• Linux 基础命令、文档树 和 bash


    最近发现了一个总结得更好的:bash cheatsheet


    本文只是我对 linux 基础学习的一个总结,可能仅适用于复习用。算是我的 Linux 备忘录。

    最基础

    • tab 补全
    • * 通配符
    • ctrl-c 中断当前进程 (以下几个快捷键可使用 stty -a 查看)
    • ctrl-d EOF或者exit
    • ctrl-r 反向查找命令历史
    • history 查看命令历史
    • reset 通过重启完全清空窗口(慢)
    • clear 通过翻页实现窗口清空(快)
    • shift+page down/up 窗口翻页

    命令行编辑-快捷键(M 表示 Meta, 指 ALT 键)

    • commands for moving
      • ctrl-a 光标移到行首
      • ctrl-e 光标移到行末
      • meta-f 光标前进一个单词
      • meta-b 光标后退一个单词
      • ctrl-l 等同于clear
    • commands for killing
      • ctrl-w 从当前光标,向前删除到空格
      • meta-d 从当前光标,向后删除到空格
      • ctrl-k 删除光标后面的所有内容
      • ctrl-u 清空当前命令行

    指令/档案帮助:

    • man page(manual 说明文档)(man的说明见man man)
    • 程序说明文档 usr/share/doc

    系统状态:

    • who 当前在线用户
    • netstat 网络状态
    • ps -aux 正在活动的进程
    • ls 即list,列出当前目录下的文档/目录
    • ls -l 列出文档的同时,还列出其权限等信息
    • ls -a 列出所有文档,包括隐藏文档和 . ..

    文件搜索:

    • which 只搜索 PATH 下的所有程序
    • whereis 只查询特定目录下的文档(使用完全匹配),主要是/usr/share/man /usr/src等,可用-l选项查看被查询的目录。
    • locate 关键字匹配,并且使用预建索引,索引可使用updatedb手动更新。
    • find PATH option action 在指定目录中递归查找能匹配的 文件/目录。
      • find . -name '*.png' 查找当前目录下的所有png图片。
      • 经常和 xargs 一起用于批量操作:find 目录 -name 名称|xargs rm -rf,批量删除名字内带有特定字符的文件。

    文档抓取(通常是针对行的操作,复杂的操作建议用 python)

    1. cut(从每一行中,仅取出需要的部分)
    2. grep -[vniwc] 'pattern' file(从所有行中,仅取出需要的行,pattern 部分使用正则表达式)
      • grep --color=auto 'pattern' filename
      • v 反匹配,列出不被匹配的行
      • n 显示行号
      • i 忽略大小写
      • w 单词完全匹配
      • c 计数匹配到的行
      • 全文搜索:grep ‘string-pattern' [path-pattern] -r,在匹配到的所有文档内搜索 string-pattern
    3. sed 按行进行的修改替换命令(行是基本单位)
    4. awk 针对每行的一部分进行的修改替换命令(行的一部分是基本单位)
    5. uniq 重复的行只列出一个
    6. wc 字符计数
    7. tee 单入口、双出口的管道,在需要检视中间流时很有用
    8. sort 按行排序
    9. diff 档案对比工具
      • -y选项:side-by-side显示,特别实用

    系统控制:

    • shutdown -h now 正常关机(poweroff)
    • shutdown -r now 正常重启(reboot)
    • systemctl 管理命令
    • tty-x切换:ctrl+alt+f-x
    • 字符集:locale 或 echo $LANG
    • time 指令: 输出指令执行所用的时间

    目录操作

    • cd (change directory)
    • pwd (print work directory)
    • mkdir -[mp] (make directory)
      • m选项 设定权限rwx...
      • p选项 自动创建多层目录
    • rmdir -[p] dir_name 删除空目录
      • p选项 删除多层空目录
    • 环境变量
      • PATH变量(一个对 shell 很有用的环境变量):所有的命令,都只会从该变量指定的目录查找。(不同的路径之间用「:」分隔)如果要运行不在$PATH中的程序,需要使用绝对路径或相对路径明确指定。
      • export variable: 将 自定义变量 var 导入到环境变量(仅当前环境有效,JAVA_HOME 之类的变量就需要使用它来导入)
      • env 查看当前环境变量
      • set /unset 设定自用变量

    文档与目录

    • cp -[aipr] source destination (不同身份的用户,执行这条指令,结果会有明显的差别)
      • a选项 递归复制所有文件、对link文件复制其本身(不加a的话,默认是复制源文件的,而不是该link文件)
      • i选项 交互模式,执行不可逆操作(覆盖)时,先行提示
      • p选项 同时复制该文件的所有属性(权限、所有者、时间)
      • r选项 递归复制,用于目录复制
      • u选项 在目标文档与源文档有差异时才复制,常用于备份。
      • cp file1 file2 directory 复制多个文件到一个目录
    • rm -[fir] file_or_dir
      • f 强制删除,忽略不存在的档案,没有任何提示
      • i 交互模式
      • r 递归移除(rmdir的加强版,危险操作)
    • mv -[fiu] source destination
      • f 强制移动,直接覆盖已有文档,无提示
      • i 交互模式
      • u 更新模式update,只当 source 比目标文档更新时才覆盖。
      • 可一次移动多个文件到某目录
      • 也用于目录或文档的更名
    • touch 新建空文档/更新已存在文档的时间
    • ln 新建链接

    文档内容查阅

    • cat -n 正序查阅(n表示带行号)
    • tac 倒叙(cat的反写)
    • nl 显示行号
    • more 一页页查阅
    • less 滚动查阅,前后都可滚动、还有几个跳转查找指令可用
    • head [-n num] file 查看前num行,默认10
    • tail 查看最后num行,用法同上
    • hd 查看binary文档,默认16进制
    • file 查询指定文件/目录的属性,text or directory, text or binary, excutable or not, etc. (deepin 默认没有安装,需要sudo apt-get install file

    账号管理

    • /etc /passwd
    • 账号变更: useradd, passwd, chage, usermod, userdel
    • 群组变更: groupadd, groupmod,  groupdel, gpasswd
    • id,  finger,   chfn(change finger),   chsh (changer shell)
    • sudo(super do),   su
    • ACL
    • lastlog,     who

    文档与目录的权限管理

    • r:read w:write x:execute
      • 文档
        • 文档的 rwx 控制文档的可读写/执行,但不包括增删。
      • 目录的 rwx
        • r 表示可查看目录内的结构(至于目录内的内容是否可读,就是它自己的rwx的事了)
        • w表示可增删这个目录内的结构
        • x 表示能以该目录为当前工作目录(可 cd 到该目录)
    • chmod 755 file.sh
      • 仅拥有者可写,其他人可读可执行。(创建 shell 脚本时常用 r w x : 4 2 1)
      • 另一种方法是使用 u g o,可读性更好,但是书写会麻烦一点点。
      • 第三种方法是使用 a 和 +-= 来设定
    • chown ryan:ryan filename
      • 修改文件拥有者、群组。不同用户之间交换文件时常用。(例如root要发一个文件给普通用户)
    • chgrp 仅修改群组时使用
    • umask 档案预设需要减掉的(掩码)权限(未理解)
    • chattr [+-=][ai] file 设置隐藏属性,常用于安全相关的设置
      • a 只能增加内容,不能被删除、修改
      • i 不可变对象,不能被删除、修改、改名、创建链接、增加内容。
    • lsattr 显示隐藏属性

    重定向、管道

    1. 输出重定向(可使用数字做为前缀,1为stdin,2为stderr)
      1. > 覆盖方式的流重定向,将标准输出输出为某文档
      2. >> 添加方式的重定向,将内容添加到某文档尾部
    2. 输入重定向
      1. < 以某文档作为程序的标准输入,覆盖方式。
      2. << 添加方式的输入重定向

    Linux 的目录结构(仅较重要的部分)

    1. /usr (unix software resources) 主要的系统软件
      • usr/bin 一般用户能够使用的命令,基本都在这里
      • usr/sbin 即 super binaries,与系统管理相关的,需要root权限的指令会存放在这里。(类似于 win 的 C://Windows)
      • usr/local 管理员额外安装的系统软件,应安装在此。(类似于 win 的 C://Programm Files)
      • usr/share 基本都是只读文档,man doc 都在这
      • usr/include c/c++的头文件
      • usr/src 系统软件的源代码,可放置于此。
      • usr/local/src 管理员额外安装的软件的源码
    2. /opt 即 optional softwares (类似于 win 的 D://Programm Files)
    3. /var variable,可变目录,随着使用增大。
      • var/cache 缓存
      • var/lock 资源锁
      • var/log 日志文件
    日 志 文 件 说 明
    /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
    /var/log/secure 与安全相关的日志信息
    /var/log/maillog 与邮件相关的日志信息
    /var/log/cron 与定时任务相关的日志信息
    /var/log/spooler 与UUCP和news设备相关的日志信息
    /var/log/boot.log 守护进程启动和停止相关的日志消息
    1. /etc 配置文件,建议备份 (名字来自于 etcetera,原用于存放 “其他文件”,演化至今,便成了配置文件夹。)
      • 全局环境
        • /etc/profile 系统的 shell 环境配置文件(仅每个用户登录时加载一次,不建议修改)
        • /etc/bash.bashrc 系统的 bash shell 环境配置文件(每次开启一个新 bash,都会加载。如果需要对所有用户都生效的 bash 环境,就修改这个)
      • 用户环境
        • ~/.profile [也可能是 ~/.bash_profile] 用户个人的 shell 环境配置文件,相当于 /etc/profile 的个人 patch。一般来说它设定一些用户个人的环境变量,然后执行 ~/.bashrc。
        • ~/.bashrc 用户个人的 bash shell 配置文件(同样每次开新 bash 都会加载)
      • source :在当前 shell 中执行指定的 shell 脚本。常用于环境设定档。(这样做,运行后的变量会存在于当前shell,也就完成了所谓的环境设定。而如果是普通的直接运行的话,会启用新shell来运行该脚本,运行结束环境就销毁了。)

    由上述配置文件引申,用户安装二进制 tarball 时,通常有两种做法

    1. 一种就是将该软体的 bin 目录添加进PATH中(这会使该 bin 目录中的所有可执行文件都被加入到 PATH,如果你不想这样,请考虑第二种方法),也就是将相关命令写入 shell 配置文件中。至于应该添加到哪里,看了上面的说明,你应该已经懂了。

      举例来说,安装一个软件时,如果该软件大家都要用,就应该写入系统配置里,然后如果你基本只用 bash,写 bashrc 里更方便(修改可立即生效),否则选profile。
      而若只有你个人需要该软件,肯定要放用户配置里,再考虑你是不是用其他 shell。一般来说放 bashrc 里总没问题,而放 profile 里,有时会需要手动 source /etc/profile 一下才能用。

    2. 第二种呢,就是向PATH默认就会包含的那些目录中(例如 /usr/local/bin),添加启动脚本。(使用 python 或 shell 编写)Jetbrains 家的软件在检测到该软件的 bin 目录未添加进 PATH 时,就会提示你这么干。(idea 会向 /usr/local/bin 添加名为 idea 的 python 启动脚本)

    bash 的特殊符号表

    符号内容
    #注解符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行
    跳脱符号:将『特殊字符或通配符』还原成一般字符
    |管线 (pipe):分隔两个管线命令的界定(后两节介绍);
    ;连续指令下达分隔符号:连续性命令的界定 (注意!与管线命令并不相同)
    ~用户的家目录
    $取用变量前置字符:亦即是变量之前需要加的变量取代值
    &工作控制 (job control):将指令变成后台工作
    !逻辑运算意义上的『非』 not 的意思!
    /目录符号:路径分隔的符号
    >, >>数据流重导向:输出导向,分别是『取代』与『累加』
    <, <<数据流重导向:输入导向 (这两个留待下节介绍)
    ' '单引号,不具有变量置换的功能 ($ 变为纯文本)
    " "具有变量置换的功能! ($ 可保留相关功能)
    ` `两个『 ` 』中间为可以先运行的指令,亦可使用 $( )
    ( )在中间为子 shell 的起始与结束
    { }在中间为命令区块的组合!

    系统监控常用命令:

    1. htop — 系统进程监控(需要安装,此外 linux 自带 top 命令)
    2. iotop — 磁盘IO监控,有总的IO统计,和分进程的IO统计,风格类似 top
    3. nmon — CPU/Disk IO/Network IO 多功能监控工具
    4. at(atd),   crontab(crond) —定时任务

    线程管理

    1. job:  ctrl +z,  jobs, fg, bg, kill  (job 是所在bash的子任务,不一定正在运行)
    2. process: ps [aux,  axjf, -lA]
      1. top/htop,     pstree
      2. kill,    killall (整个相关程序组)

    零碎

    1. default terminal:tty1/tty6    (ctrl+)alt+f[1-6]
    2. parted 分区工具
    3. alias/unalias

    脱离当前的 shell,在后台工作。(简便的“服务”)

    nohup python xxx.py &
    

    上面的命令使 xxx.py 在后台运行,即使当前 shell 被关闭,该程序仍然不会被影响。而 std 被定向到运行目录下的 nohup.out 文件(默认行为)。

    查看系统信息

    1. uname --all:查看 linux 内核信息
    2. cat /etc/system-releasecat /etc/os-release:查看系统的发行版信息
    3. df -h:查看系统中文件的使用情况
    4. du -sh *:查看当前目录下各个文件及目录占用空间大小
    5. 全文搜索:grep ‘string-pattern' [path-pattern] -r,在匹配到的所有文档内搜索 string-pattern
    6. 全文搜索并替换:sed -i "s/pattern_str/replace_str/g" `grep "key_pattern" 'path_pattern' -r`
    7. 文件名搜索并替换:sed -i "s/pattern_str/replace_str/g" `find . -name "pattern"`
    8. 批量转换大小写: sed -i 's@http://gitlab.xxx.*.git@L&@g' find . -name pubspec*
      • L 表示转换成小写,U 表示转换成大写
    #只在目录中所有的.php和.html文件中递归搜索字符"main()"
    grep "main()" . -r --include *.{php,html}
    

    参考

  • 相关阅读:
    第一次编程作业
    第一次博客作业
    软工回顾与总结
    百度OCR技术博客
    BUAA2020软工个人博客作业2-软件
    2020软工结队项目作业
    2020软工个人项目作业
    2020软件工程第一次个人博客作业
    2020软件工程热身作业
    OO完结篇-第四单元小结
  • 原文地址:https://www.cnblogs.com/kirito-c/p/8955474.html
Copyright © 2020-2023  润新知