前言
本文主要为学习贴,用来记录一些 linux 上的常用指令以供参考。
文件内容查看
cat
从上往下阅读文件内容
cat [-AbEnTv] ${FILE_NAME)
cat -n /etc/issue 将该文件的内容输出到标准输出中,并显示行号
cat file1 file2 > file3 将 file1 file2 的内容依次添加到 file3 当中
tac
从下往上阅读文件内容,用法同 cat
nl
添加行号打印,默认情况下空白行不显示行号
nl [-bnw] ${FILE_NAME}
nl -b a file1 即使空白行也显示行号
nl -b a -n rz file 空白行也显示行号,并且行号在字段的最右方显示,且行号不用加 0 对齐
more/less
一页一页翻动文件。
more ${FILE_NAME} 向下翻动文件
less ${FILE_NAME} 向上 / 下翻动文件
head/tail
取文件的前几行或者最后几行内容
head/tail [-n number] ${FILE_NAME}
head -n 10 file 读取文件前十行的内容
tail -n 10 file 读取文件后十行的内容
head -n -10 file 不打印文件后十行内容
tail -n +100 file 只打印 100 行以后的内容
tail -f file 打开文件并持续更新,直到 ctrl+ c 才退出。这个常用于查看最新的日志
type
查看命令是属于内置指令还是外部指令
type [-tpa] name
-t: 加入 - t 参数时,会显示命令的类型,file 表示为外部命令,alias 表示为命令别名设置的名称,builtin 表示为 bash 内置的命令功能
-p: 如果 name 为外部命令,会显示完整的文件名
-a: 会将所有在 PATH 路径下包含 name 的命令显示出来
命令与文件查询
which
寻找执行文件, 查找命令的完整文件名
which [-a] command #- a 会将所有由 PATH 目录中可以找到的命令均列出,而不只第一个被找到的指令
which ifconfig #在非 root 用户下会查找不到,因为 ifconfig 位于 /sbin/ifconfig 下,而非 root 用户的 PATH 中不包含该路径,所以找不到
which cd #找不到,因为 cd 为 bash 的内置命令
whereis
根据文件名寻找文件,查找文件的完整文件名
whereis [-bmsu] 文件或目录名
-b 只找二进制文件
-m 只找在 manual 路径下的文件
-s 只找 source 源文件
-u 查找不在上述选项中的其他特殊文件
locate+updatedb
locate 会根据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键字文件名,即所有包含该关键字的文件都将被输出。但是因为数据库的更新一般为一天一次,所以如果需要查找新的内容,需要用 updatedb 指令更新数据库,updatedb 会根据 /etc/updatedb.conf 去查找硬盘内的文件名,并更新数据库文件
locate [-ir] keyword
-i 忽略大小写差异
-r keyword 可以为正则表达式
find
查找文件,磁盘查找,支持通配符
find [PATH] [option] [action]
find / -mtime 0 #查找 24 小时内被修改过的文件
find /etc -mtime 3 #查找 3 天前的 24 小时内被修改的文件
find / -mtime +3 #查找 3 天前(不含 3 天本身)被更改的文件
find / -mtime -3 #查找 3 天内被更改的文件
find / -user name #查找用户名为 name 的文件
find / -group name #查找群组名为 group 的文件
find / -nouser #查找不属于任何用户的文件,可能出现于网络文件,或是已经被删除的用户创建的文件
find / -name filename #查找文件名为 filename 的文件
find / -type TYPE #查找某一类文件,f:正规文件,b:设备文件,d:目录,l:连接文件,s:socket,p:FIFO
压缩与打包
常见压缩扩展名
*.Z: compress 程序压缩文件
*.gz: gzip 程序压缩文件
*.bz2: bzip2 程序压缩的文件
*.tar: tar 程序打包的文件,但没有被压缩
*.tar.gz: tar 程序打包的文件,其中经过 gzip 的压缩
*.tar.bz2: tar 程序打包的文件,其中经过 bzip2 压缩
gzip
gzip 可以解开 compress,zip 与 gzip 等软件所压缩的文件。gzip 压缩后,源文件会被删除,被替代为.gz 的压缩文件。
gzip [-cdtv#] 文件名
-c: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理
-d: 解压缩的参数
-t: 可以用来校验一个压缩文件的一致性
-v: 显示压缩比等信息
-#: 压缩等级,- 1 最快,- 9 最慢但压缩程度最高,默认 -6
gzip -d filename: 会将压缩文件解压缩,并删除压缩文件
tar
tar [-j|-z] [cv] [-f 新建的文件名] filename #压缩
tar [-j|-z] [xv] [-f 打包文件名] [-C 目录] #解压缩
-c: 新建打包文件,可配合 v 查看过程中被打包的文件名
-x: 解打包或解压缩功能,可以搭配 - C 在特定目录中解开
-j: 通过 bzip2 的支持进行压缩和解压缩
-z: 通过 gzip 支持压缩和解压缩
-v: 将正在处理的文件名显示出来
-C: 在特定目录中解压缩
-p: 保留备份数据的原本权限和属性
-P: 保留绝对路径, 一般情况下都是相对路径,防止数据覆盖
–exclude=FILE: 在压缩过程中不要讲 FILE 打包进去
–newer: 打包 ctime 和 mtime 在日期后面的文件
–newer-mtime:打包 mtime 在日期后面的文件
tar -zcv -f filename.tar.gz filename #压缩打包为 filename.tar.gz
tar -zxv -f filename.tart.gz -C 欲解压缩的目录 filename
变量读取与声明
read
从控制台读取输入
read [-pt] variable
-p: 可以加上提示符
-t: 等待输入的秒数
declare
declare [-aixr] variable
-a: 声明为数组
-i: 声明为整数
-x: 声明为环境变量,用法同 export
-r: 声明为只读变量
declare -i sum=100+200+300 #如果不声明为整数,则会默认为字符串
declare +r sum #等同于取消操作
变量的修改
${变量 #关键字}:从变量内容开头开始,将符合关键字的最短数据删除
${变量 ## 关键字}:从变量内容开头开始,将符合关键字的最长数据删除
${变量 % 关键字}:从变量内容最后开始,将符合关键字的最短数据删除
${变量 %% 关键字}:从比那两内容最后开始,将符合关键字的最长数据删除
${变量 / 旧字符串 / 新字符串}:将遇到的第一个旧字符串更新为新字符串
${变量 // 旧字符串 / 新字符串}:将所有旧字符串更新为新字符串
变量的替换
变量的替换一般是指根据变量非空与否将变量的值进行替换,记忆方法是当公式中含有: 时,则变量不存在与变量为空字符串为空,否则只有变量不存在视为空
var=${str-expr}: 相当于 var= str==null ? expr : str
var=${str:-expr}: 相当于 var= (str==null || str==”) ? expr : str
var=${str+expr}: 相当于 var=(str==null ? ” : expr)
var=${str:+expr}: 相当于 var=(str==null || str==”) ? ” : expr
var=${str=expr}: 相当于 str= str = null ? expr : str, expr = str
var=${str:=expr}: 相当于 str= str == nul || str == ” ? expr : str, expr = str
数据流重定向
>/1>: 以覆盖的方式将正确的数据输出到指定的文件或设备上
>>/1>>: 以累加的方式将正确的数据输出到指定的文件或设备上
2>: 以覆盖的方式将错误信息输出到指定的文件或设备上
2>>: 以累加的方式将错误信息输出到指定的文件或设备上
<: 将原本需要键盘输入的数据改为文件代替
<<: 结束输入
find /home -name .bashrc > list 2>&1 #将标准输出和错误输出都导出到 list 文件中
cat > catfile < ~/.bashrc #将.bashrc 的内容拷贝并覆盖到 catfile 中
cat > catfile << “eof” #输入 eof 后立刻结束
选取命令
cut
cut -d ‘ 分隔符 ’ -f fields #根据分隔符将每一行分割并取出下标为 fields 的值
cur -c 字符范围 #将每一行字符范围内的内容切割出来
export | cut -c 12- #将 export 文件的每一行从第 12 个字符开始以后所有内容切割出来
echo ${PATH} | cut -d ‘:’ -f 3,5 #将 path 内容按照:分割开来并取第三个和第五个值
cut 在处理多空格分隔的行时会比较吃力
grep
分析一行,当该行中有我们想要的信息,就将该行输出
grep [-acinv] [–color=auto] ‘ 关键词 ’ 文件名
-a: 将 binary 文件以 text 文件的方式进行查找
-c: 打印出现的次数
-i: 忽略大小写
-n: 同时输出行号
-v: 反向选择,即选择不存在关键字的行
–color=auto:将关键字加上颜色显示
last | grep ‘root’ | cut -d ‘ ‘ -f 1
排序
sort
sort [-fbMnrtuk] file/stdin
-f: 忽略大小写
-b:忽略最前面的空格
-M:以月份来排序
-n:使用纯数字来排序,默认为文字类型
-r:倒序
-u:相同数据中,只显示一行
-t:分隔符,默认为 tab
-k:第几段数据作为排序标准
wc
统计文件的行数和子树
wc [-lwm] filename
-l: 仅列出行
-w:仅列出多少字
-m: 多少字
uniq
去重
uniq [-ic]
-i: 大小写无关
-c: 计数统计
tee
双重重定向,将一份输出同时输出到文件和标准输出流
tee [-a] filename
-a: 添加到文件后面
xargs
读入 stdin 数据,并且以某种分割字符将其分割成参数。该命令适合于不支持管道的命令来支持管道操作
xargs [-0epn] command
-0: 将特殊字符还原成一般字符
-e: EOF,当 xargs 分析到这个参数时会停止解析
-p:在执行每个命令的参数时,都会询问用户
-n: 后面接次数,要使用几个参数的意思