文章目录
- 前言
- Linux命令
- awk
- cat
- ctags . -eR * : 函数跳转
- chmod
- cut
- df
- diff
- du
- find
- (1) find . -name "*.cpp" l xargs grep "main" : 查找当前目录下(包含子目录)文件名为“*.cpp”且文件内容有“main”的文件。
- (2) find . -name "\*file_name_pattern\*" | xargs -n1 -I "XXX" grep -l "content_pattern" "XXX" | xargs -n1 -I "zz" rm -rf "XXX": 查找当前目录下文件名为“\*file_name_pattern\*”且文件内容有“content_pattern”的文件并将该文件删除。
- (3) find ./ -name "*.pattern" : 查找当前目录及其子目录下所有的 *.pattern 文件
- grep
- (1) grep -i pattern file :不区分大小写地搜索。默认情况区分大小写。
- (2) grep pattern1 file | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
- (3) grep -E 'str1|str2' file : 找出文件(file)中包含 str1 或者包含 str2 的行。跟下面方法等价:
- (4) grep -rn "pattern" ./ :查找目录下文件内容包含 pattern 关键词的所有文件
- (5) grep -f file2 file1:看file2里面有多少行在file1里面有(比如file1里面东西比较全,file2里面东西比较少,想看file2里面有多少行在file1里面有)
- (6) grep -cf file2 file1:看file2里面有多少行在file1里面有,只看数量
- head
- ll
- ln :ln [参数] [源文件或目录] [目标文件或目录]
- ls
- lsb_release
- rm -rf *
- sed
- sort
- split
- tar
- tail
- touch
- whoami : 查看服务器登陆者
- xargs
- 总结
前言
本文章旨在总结自己工作学习中一些常用且能显著提高工作效率的Linux命令。每个命令基本都会跟着例子,且以下命令将持续维持以字典序总结。
Linux命令
awk
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk ‘{pattern + action}’ {filenames}
其中 pattern 表示 awk 在数据中查找的内容,action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
(1) awk ‘{print $1, $3}’ log : 输出 log 文件每行的第一列和第三列(空格间隔)
(2) awk -F ‘:’ ‘{print $1}’ log : 用指定分隔符 ‘:’ 分割每行内容,并输出每行的第一列
(3) awk ‘length>10’ log : 从 log 文件中找出长度大于10的行
(4) ls -l log | awk ‘{sum+=$5} END {print sum}’ : 计算 log 文件的大小
cat
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
(1) cat file | grep “string” : 提取文件中的指定内容
例如有一个log文件内容如下:
Info : Meshing 1D…
Info : [ 0 %] Meshing curve 1 (Line)
Info : [ 10 %] Meshing curve 2 (Line)
Info : [ 50 %] Meshing curve 7 (Line)
Info : [100 %] Meshing curve 14 (Line)
Info : Done meshing 1D (0.000867 s)
Info : Meshing 2D…
Info : Meshing surface 1 (Plane, Frontal-Delaunay)
Info : Done meshing 2D (0.003622 s)
Info : 95 nodes 206 elements
The number of nodes: 95
The number of elements: 149
Info : Writing ‘demo.msh’…
Info : Done writing ‘demo.msh’
亦可能文件内容更多,不想打开文件,只想知道如下两行信息:
The number of nodes: 95
The number of elements: 149
则可以用如下命令:
cat log | grep “number”
则Terminal显示如下内容:
The number of nodes: 95
The number of elements: 149
(2) cat file1 file2 >& file : 合并两个文件的内容
例如有如下两个文件:
log1:
Info : Meshing 1D…
Info : [ 0 %] Meshing curve 1 (Line)
log2:
Info : Meshing 2D…
Info : Meshing surface 1 (Plane, Frontal-Delaunay)
则应用命令:
cat log1 log2 >& log
后log文件内容如下:
Info : Meshing 1D…
Info : [ 0 %] Meshing curve 1 (Line)
Info : Meshing 2D…
Info : Meshing surface 1 (Plane, Frontal-Delaunay)
(3) cat /etc/issue :查看当前系统版本
ctags . -eR * : 函数跳转
chmod
Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令。
(1) chmod 777 file :表示具有读、写和执行权限的所有用户
cut
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
(1) cat file | cut -d “:” -f 1
例如有一个log文件内容如下:
Time of solve this question is : CPU : 13.4 : User : 13.1
Time of solve this question is : CPU : 12.1 : User : 12.3
Time of solve this question is : CPU : 15.3 : User : 13.4
…
我们想提取CPU后的时间,则可以用如下命令:
cat log | cut -d “:” -f 3
终端显示结果为:
13.4
12.1
15.3
注:""之间只能是单字符,用以剪切,-f 后的数字则是提取第几段,自己可以尝试修改练习。
df
df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
(1) df -h : 用以显示各磁盘使用情况
diff
diff 命令用于比较文件的差异。
diff 以逐行的方式,比较文本文件的异同处。
(1) diff log1 log2 >& log : 比较 log1 和 log2 文件的差异并将结果重定向到 log 文件
du
du(英文全拼:disk usage)命令用于显示目录或文件的大小。
du 会显示指定的目录或文件所占用的磁盘空间。
(1) du -sh * : 可以查看到当前文件夹下所有文件夹大小 等价于 du --max-depth 1 -lh
(2) du -sh ./file : 可以查看到file单独文件夹大小
find
Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
(1) find . -name ".cpp" l xargs grep “main” : 查找当前目录下(包含子目录)文件名为“.cpp”且文件内容有“main”的文件。
(2) find . -name “*file_name_pattern*” | xargs -n1 -I “XXX” grep -l “content_pattern” “XXX” | xargs -n1 -I “zz” rm -rf “XXX”: 查找当前目录下文件名为“*file_name_pattern*”且文件内容有“content_pattern”的文件并将该文件删除。
注: 其中“XXX” 可随意替换成任意字符串,只要三处是相同的即可。
find . -name “*file_name_pattern*” | xargs -n1 -I “XXX” grep -l “content_pattern” “XXX” | xargs rm -rf “XXX”
(3) find ./ -name “*.pattern” : 查找当前目录及其子目录下所有的 *.pattern 文件
grep
用于查找文件里符合条件的字符串
(1) grep -i pattern file :不区分大小写地搜索。默认情况区分大小写。
(2) grep pattern1 file | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
(3) grep -E ‘str1|str2’ file : 找出文件(file)中包含 str1 或者包含 str2 的行。跟下面方法等价:
a). egrep ‘str1|str2’ file
b). awk ‘/str1|str2/’ file
(4) grep -rn “pattern” ./ :查找目录下文件内容包含 pattern 关键词的所有文件
如:grep -rn “set” *
说明:
-r : 递归查找
-n : 显示行号
-R : 查找所有文件包含子目录
-i : 忽略大小写
* : 表示当前目录所有文件,也可以是某个文件名。
(5) grep -f file2 file1:看file2里面有多少行在file1里面有(比如file1里面东西比较全,file2里面东西比较少,想看file2里面有多少行在file1里面有)
(6) grep -cf file2 file1:看file2里面有多少行在file1里面有,只看数量
head
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
(1) head -n 3 log: 查看log文件的前3行
ll
(1) ll --full-time -lrt : 查看文件具体时间和大小并排序
ln :ln [参数] [源文件或目录] [目标文件或目录]
(1) ln -s log2022.log link2022 : 为log2022.log文件创建软链接link2022,如果log2022.log丢失,link2022将失效
(2) ln -snf [新目标目录] [软链接地址] : 修改软链接的目标目录
ls
Linux ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
(1) ls -l | grep “^-” | wc -l : 查看某文件夹下文件的个数
(2) ls -l | grep “^d” | wc -l : 查看某文件夹下文件夹的个数
(3) ls -lR | grep “^-” | wc -l : 查看某文件夹下文件的个数,包括子文件夹
(4) ls *.txt | wc -l : 查看当前目录下 .txt 文件的个数
# ls -l 列出文件及文件夹
# "^-" 以-开头的行 文件以-开头 文件夹以d开头
# wc -l 统计行数
lsb_release
LSB是Linux Standard Base的缩写,lsb_release命令用来显示LSB和特定版本的相关信息。
可以用 lsb_release -a 查看所有信息,或者用 cat /etc/issue查看当前linux系统。
rm -rf *
如果遇到文件无法删除可以先 chmod 777 * -R 再 rm * -rf
sed
sed 是一种在线编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作。
(1) sed ‘2d’ log : 删除log文件的第2行
(2) sed ‘2,$d’ log : 删除log文件的第2行到末尾所有行
(3) sed -n ‘/pattern/p’ log : 搜索 log 文件中有pattern关键字的行并打印输出
(4) sed ‘/pattern/d’ log : 删除 log 文件中有pattern关键字的行,其他行输出
(5) sed ‘s/pattern/result/g’ log : 搜索 log 文件每行中有pattern的关键词并将其替换为result
(6) sed -n ‘$=’ list : 获取文件 list 共有多少行(包含空白行)
sort
sort 命令用于将文本文件内容加以排序。
sort 可针对文本文件的内容,以行为单位来排序。
(1) cat log | sort -n -k 3 : 以 log 文件中每行的第3列的数值的大小由小到大排序
split
(1) split -l 100 caseList list : 将 caseList 文件拆分为每个100行的块,并以 list 为前缀生成多个输出文件。
tar
tar(英文全拼:tape archive )命令用于备份文件。
tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
(1) tar -zcvf file.tar file : 将 file 文件压缩为 file.tar
(2) tar -zxvf file.tar : 将 file.tar 文件解压缩
tail
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
(1) tail log : 默认显示 log 文件的最后 10 行
touch
touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
(1) touch * : 把当前目录的所有文件的时间属性更新
whoami : 查看服务器登陆者
xargs
xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
(1) find . -name “option*” | xargs ls -l : 寻找文件名格式为 option* 的文件并以 ls -l 格式展示
总结
以上命令会持续补充,可以说“条条大路通罗马”,为完成一个任务可能不止一种方法,有好的方法可以完成相同的任务也欢迎大家提出宝贵的意见。