Linux学习笔记


2021-10-08虽然使用ubuntu已经两年多了,但对Linux的认识依旧停留在很浅的一个层次,因此决定找个时间系统地、较为全面地对Linux基础知识进行学习。但作为算法工程师,也没必要对Linux进行太过深入的研究,因此本文的主要参考是一篇小而精的Linux文档

1. Linux帮助命令

  • Linux系统内置了详细的帮助文档,当需要了解某些命令的用法或者忘记相关命令的具体拼写时,可以使用Linux帮助命令。
  • whatis command,显示command命令的简要说明,若忘记命令的完整拼写,可用正则匹配进行搜索whatis -w "comm*"
  • man command,显示command命令的说明文档,文档一共分为9类,某些关键词可能对应多个类别,1类最为常见。
  • 若某个关键词对应多个类别,如printf,则需指定查看某类别时用man N printf命令,N代表类别,取值为1~9。
  • 根据部分关键字来查询命令:man -k keyword
  • 查看程序的二进制文件路径:which command;查看程序的搜素路径,显示所有版本: whereis command

2. 文件及目录管理

  • 新建目录mkdir xxx,新建文件touch xxx,删除文件rm xxx,删除目录rm -r xxx,强行删除目录rm -rf xxx
  • 移动文件或目录mv a b,可用于重命名,复制文件cp a b,复制目录cp -r a b
  • 切换路径cd path,切换到homecd ~,切换到父路径cd .., 显示当前路径pwd
  • 显示当前目录下的文件ls,以长列表形式显示ls -l,显示所有文件(包括隐藏文件)ls -a,按文件修改时间排序显示la -t,这些参数可组合使用。
  • 文件和目录查找find
    • 基本语法:find path option action
    • 根据名称查找:find path -name filename,可以是具体的文件名,也可以用通配符匹配。若需要查找目录,则在命令最后加-type d-type f表示一般文件,-type l表示链接文件,忽略大小写则将-name改为-iname
    • 根据权限查找:find path -perm 664 -type f查找路径下权限为-rw-rw-r--的文件。查找空文件或空目录加上-empty参数即可。
    • 根据所有者或组查找:find path -user xxx查找路径下所有者为xxx的所有文件和目录,find path -group xxx查找路径下所有组为xxx的所有文件和目录。
    • 根据时间查找:find path -atime 7 -type f查找第7天被访问过的所有文件,将7改为-7则表示7天内,改为+7则表示7天前。将-atime改为-mtime则表示内容被修改的文件,改为-ctime则表示元数据或权限发生改变的文件。将time字段替换为min则时间单位由变为分钟
    • 根据大小查找:find path -size +50M -size -100M -type f查找大小在50M到100M的所有文件。单位可替换为k或G
    • 执行动作find-command -exec command \;,可跟在查找命令之后,作用于找到的文件。等价于find-command | xargs command
  • 查看文件内容cat
    • cat xxx,若要显示行号,则加上-n选项,即cat -n xxx
    • 使用重定向符:
      • cat xxx1 > xxx2xxx2的内容将被xxx1的内容所替代。
      • cat xxx1 >> xxx2,将xxx1的内容附加在xxx2的末尾。
  • 文件与目录权限修改
    • ll命令可查看文件的详细信息,有7个字段。
    • 第一个字段为文件的属性,由十位组成,第一位表示文件类别,d表示目录,l表示链接文件,-表示一般文件,后九位中每三位分别代表所有者、所属组、其他用户的读r(4),写w(2)和执行x(1)权限。
    • 第二个字段表示文件硬链接数或目录子目录数。
    • 第三个字段表示该文件或目录的所有者。
    • 第四个字段表示改文件或目录的所属组。
    • 第五个字段表示文件的大小。
    • 第六个字段表示最后修改的时间。
    • 第七个字段表示文件名。
    • 修改文件的权限:chmod 764 file表示将file的权限修改为:所有者的权限为7(4+2+1,读、写、执行),所属组的权限为6(4+2,读、写),其他用户的权限为4(4,读),若要修改整个目录的权限,则加上-R选项。
    • 修改文件的所有者或所属组:chown user:group file表示将file的所有者改为user,所属组改为group,若修改对象是目录,则加上-R选项。
  • 创建文件的硬链接/软链接
    • 硬链接ln f1 f2表示创建f1的一个硬链接文件f2,这两个文件名指向同一个文件(索引节点),删除任意一个文件都不会影响其他文件的访问,只有所有的硬链接文件都被删除,对应文件的数据块才会被释放。
    • 软链接ln -s f1 f3表示创建f1的一个软链接文件f3,这类似windows中的快捷方式,可以通过f3来访问f1,若f1被删除,f3仍旧存在,但指向的是一个无效的链接,而删除f3f1无影响。
  • 管道符号、重定向符号与连接符号
    • 管道符号|command A | command B表示将命令A的输出作为命令B的输入。
    • 输出重定向符>command A > file B表示将命令A的输出写入B文件,覆盖原文件内容。
    • 输出重定向符>>command A >> file B表示将命令A的输出追加写入B文件,不覆盖原文件内容。
    • 输入重定向符<command A < file B表示将文件B的内容作为命令A的输入。
    • 连接符号;command A ; command B不论命令A是否执行成功,B命令都会继续执行。
    • 后台执行符号&command A &命令A会进入后台执行。
    • 逻辑与符号&&command A && command B若命令A执行成功,则执行命令B,否则不执行命令B。
    • 逻辑或符号||command A || command B若命令A执行失败,则执行命令B,否则不执行命令B。

3. 文本处理

  • grep文本搜索
    • 基本用法:grep str path在路径path对应的文件中查找str字符串,若path对应的是目录,则需加上-r选项。
    • grep是大小写敏感的,若需要忽略大小写进行查找,则需加上-i选项。
    • 加上-v选项可以进行反向搜索,即输出不含有str字符串的内容。
    • 加上-A n选项可以在str字符串所在行后打印n行,加上-B n选项可以在str字符串所在行前打印n行,加上-C n选项可以在str字符串所在行前后打印n行,
    • 加上-c选项可以输出匹配项的数目,加上-n选项可以输出匹配项所在的行号。
    • 加上-w选项可以进行精确匹配搜索而不是通配,例如搜RUN不会返回RUNNING的搜索结果。
    • 加上-e选项可以进行多个模式匹配(or逻辑),例如-e str1 -e str2将输出匹配str1str2的结果。
  • xargs命令
    • xargs命令的作用是将标准输入转为命令行参数,大多数命令(比如rmmkdirls)与管道一起使用时,都需要xargs将标准输入转为命令行参数。
    • 有些命令可以接受标准输入作为参数,因此在使用管道命令时不需要xargs,比如grep命令。
    • 默认情况下,xargs将换行符和空格作为分隔符,把标准输入分解成一个个命令行参数。-d "\t"可以将分隔符改为\t
    • -p参数会先打印出要执行的命令,用户输入y以后才会正真实行。
    • xargs默认只用一个进程执行命令。如果命令要执行多次,必须等上一次执行完,才能执行下一次。--max-procs n指定同时用n个进程并行执行命令,n=0时表示不限制进程数。
  • wc命令
    • wc命令用来统计文件的行数、单词数、字节数。
    • wc file会输出file文件的行数、单词数及字节数(字符数)。
    • wc -l file输出行数,wc -w file输出单词数,wc -c file输出字节数(字符数)。
  • awk命令
    • awk是处理文本文件的一个应用程序,它依次处理文件的每一行,并读取里面的每一个字段。
    • 基本用法:awk '动作' 文件名,如awk '{print $0}' demo.txt表示将demo.txt文件的每一行打印出来,$0代表当前行。
    • awk默认根据空格和制表符,将每一行分为若干字段,依次用$1$2$3表示第一个、第二个和第三个字段。若需要修改默认分隔符,可使用-F选项,例如-F ':'表示指定分隔符为冒号。
    • NF变量表示当前行有多少个字段,$NF代表最后一个字段,$(NF-1)代表倒数第二个字段。
    • NR变量表示当前处理的是第几行,FILENAME变量表示当前文件名。
    • awk允许指定输出条件,只输出符合条件的行,awk '条件 动作' 文件名awk 'NR % 2 = 1 {print $0}' demo.txt表示只输出demo.txt文件的奇数行。awk '/^test/ {print $0}' demo.txt表示只输出demo.txt文件中以test开头的行,/test$/则匹配以test结尾的行。

4. 磁盘管理

  • 查看磁盘空间
    • df -h命令查看文件系统磁盘占用情况。
    • du -sh d命令查看目录d所占空间的大小。
  • 压缩/解压缩
    • tar -cvf test.tar /path/to/testtest目录打包到test.tar文件,无压缩,-c表示创建,要创建文件时不能缺少这个选项,-v表示显示具体过程,-f表示创建一个归档文件。
    • tar -czvf test.tar.gz /path/to/testtest目录打包并用gzip压缩到test.tar.gz文件,-z表示压缩的归档文件是gzip格式。
    • tar -xzvf test.tar.gz -C /path/to/testtest.tar.gz文件解压至/path/to/test-x表示提取。-C指定解压路径。
  • 查询进程
    • ps -ef查询正在运行的进程信息。top显示进程信息,并实时更新,推荐使用htop,功能更多。
    • ps -lu usernameps -ef | grep username查询用户username的进程信息。
    • 杀死指定PID的进程:kill -9 PID
  • lsof命令
    • 在Linux系统中,万物皆文件,lsof (list open files)是一个列出当前系统已打开文件的工具。
    • 直接输入lsof命令会输出所有系统已打开的文件信息(需要root权限)。
    • lsof file显示所有开启文件file的进程信息。
    • lsof -i:xxxx显示占用端口xxxx的进程信息。
    • lsof -u username显示用户username当前打开的文件信息。
    • lsof -p PID显示进程号为PID的进程打开的文件信息。

5. 其他常用命令

  • Linux杀死多进程:ps -ef | grep 'command' | awk '{print $2}' | xargs kill -9
  • git status中文显示为数字串解决方法:git config --global core.quotepath false
  • 查看Linux系统版本:uname -a
  • 查看CPU信息:cat /proc/cpuinfo
  • 查看内存信息:cat /proc/meminfo
  • 查看系统可用内存:free

6. References


文章作者: Wonder
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wonder !
评论
  目录