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 > xxx2
,xxx2
的内容将被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
仍旧存在,但指向的是一个无效的链接,而删除f3
对f1
无影响。
- 管道符号、重定向符号与连接符号
- 管道符号
|
: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
将输出匹配str1
或str2
的结果。
- 基本用法:
xargs
命令xargs
命令的作用是将标准输入转为命令行参数,大多数命令(比如rm
、mkdir
、ls
)与管道一起使用时,都需要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/test
将test
目录打包到test.tar
文件,无压缩,-c
表示创建,要创建文件时不能缺少这个选项,-v
表示显示具体过程,-f
表示创建一个归档文件。tar -czvf test.tar.gz /path/to/test
将test
目录打包并用gzip
压缩到test.tar.gz
文件,-z
表示压缩的归档文件是gzip格式。tar -xzvf test.tar.gz -C /path/to/test
将test.tar.gz
文件解压至/path/to/test
,-x
表示提取。-C
指定解压路径。
- 查询进程
ps -ef
查询正在运行的进程信息。top
显示进程信息,并实时更新,推荐使用htop
,功能更多。ps -lu username
或ps -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
的进程打开的文件信息。
- 在Linux系统中,万物皆文件,
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