Linux运维必会的命令详解
Linux运维必会的命令详解
1. mkdir
简介
创建文件目录
语法
mkdir [-p] dirName
参数
-p 确认目录是否已经存在,若不存在则建立目录而不会报错
示例
创建test文件夹及在其中创建new文件夹
$ mkdir -p test/new
2. find
简介
文件搜索
语法
find path -option [ expression ] [ -exec -ok command ] {} \;
参数
expression表达式默认是 -print
-mount -xdev 只查询和指定目录一个文件系统下的文件
-amin n 在过去n分钟内被读取过
-anewer file 读取时间迟于file的文件
-atime n 在过去n天内被读取得文件
-cmin n 在过去n分钟被修改过
-cnewer file 比文件file更新的文件
-ctime n 在过去n天内被修改过的文件
-empty 空的文件
-gid n or -group name gid 是 n 或是 group 名称是 name
-ipath p -path p 路径符合p的文件,ipath会忽略大小写
-name name -iname name 文件名符合name的文件,iname忽略大小写
-size n 文件大小是n单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组
-type
c 文件类型是c的文件
d 目录
c 字型装置工作
b 区块装置文件
p 具名贮列
f 一般文件
i 符号连接
s socket
-pid n process id是n的文件
示例
在当前目录及子目录以.sh结尾的文件列出来
$ find . -name "*.sh"
在当前目录及子目录列出20天内更新过的文件
$ find . -ctime -20
查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
$ find . -type f -perm 644 -exec ls -l {} \;
3. awk
简介
文本处理
语法
awk 'condition { action }' filename
参数
-F 指定字段分隔符
action的相关函数:
toupper():字符转为大写
tolower():字符转为小写
length():返回字符串长度
substr():返回子字符串
substr($1,2):返回第一个字段,从第2个字符开始一直到结束
substr($1,2,3):返回第一个字段,从第2个字符开始开始后的3个字符
sin():正弦
cos():余弦
sqrt():平方根
rand():随机数
示例
$ echo "aa bb cc dd" | awk -F "bb" '{ print $1}'
aa
$ cat test.txt
aa ss
dd ff
gg hh
$ cat test.txt | awk '{print NR")", $0}'
1) aa ss
2) dd ff
3) gg hh
$ cat exp.txt
/stsvc/fms/conf/application.yml
/stsvc/sms/conf/application.yml
/stsvc/tms/conf/application.yml
/root/home/chenfan
/root/home/jhhuang
$ cat exp.txt | awk '/stsvc/ {print $0}' #包含 stsvc 的行
/stsvc/fms/conf/application.yml
/stsvc/sms/conf/application.yml
/stsvc/tms/conf/application.yml
$ cat exp.txt | awk '/stsvc\/fms/ {print $0}' #包含 stsvc/fms 的行
/stsvc/fms/conf/application.yml
$ cat exp.txt | awk 'NR%2==1 {print $0}' #奇数行
/stsvc/fms/conf/application.yml
/stsvc/tms/conf/application.yml
/root/home/jhhuang
$ echo "aa ss dds" | awk '{ if($3 == "dd") print $0; else print "nothing"}'
nothing
4. sed
简介
文本处理
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数
-e<script> 以选项中指定的script来处理输入的文本文件
-f<script> 以选项中指定的script来处理输入的文本文件
-h 显示帮助
-n 仅显示想script处理后的结果
动作说明:
a 新增,新增的内容出现在下一行
i 插入,插入的内容出现在上一行
c 取代,取代n1,n2之间的行
d 删除
p 打印,打印选择的数据,通常与sed -n一起运行
s 取代,就是替换功能
示例
在第二行下面添加Hello
$ sed '2a Hello'
搜索/etc/passwd包含root关键字的行
$ nl /etc/passwd| sed -n '/root/p'
删除/etc/passwd包含root关键字的行
$ nl /etc/passwd| sed '/root/d'
搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行
$ nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
数据的搜索与替换
$ sed 's/要被取代的字串/新的字串/g'
5. uniq
简介
检查文件中的重复行列
语法
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
参数
-c 在列旁边显示该行重复次数
-d 仅显示重复出现的行列
-u 仅显示出行一次的行列
-f<栏位> 忽略指定的栏位
-s 忽略比较指定的字符
-w<字符位置> 指定要比较的字符
示例
$ cat testfile
test 30
test 30
test 30
Hello 95
Hello 95
Hello 95
Hello 95
Linux 85
Linux 85
$ uniq -c testfile #删除重复行后的内容
3 test 30 #前面的数字的意义为该行共出现了3次
4 Hello 95 #前面的数字的意义为该行共出现了4次
2 Linux 85 #前面的数字的意义为该行共出现了2次
6. sort
简介
行列排序
语法
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
参数
-b 忽略每行文本前面的空格
-c 检查文件是否按照顺序排序
-d 只处理英文字母。数字和空格,忽略其他字符
-f 排序时,将小写字母看成大写字母
-i 只处理040-176之间的ACSII码
-m 将排序好的文件合并
-M 将前面三个字母按照月份缩写排序
-n 依照数值的大小排序
-r 以相反的顺序排序
-u 唯一,输出的结果是去重过的
-t<分隔字符> 指定排序时所用的栏位分隔字符
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一个栏位
示例
$ cat testfile #testfile文件原有排序
test 30
Hello 95
Linux 85
$ sort testfile #重排结果
Hello 95
Linux 85
test 30
7. tail
简介
查看文件内容
语法
tail [参数] [文件]
参数
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
示例
循环显示notes.log的文件内容
$ tail -f notes.log
8. head
简介
查看文件开头部分内容
语法
head [参数] [文件]
参数
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数
示例
显示 notes.log 文件的开头 5 行
$ head -n 5 runoob_notes.log
9. mkfs
简介
在特定的分区建立文件系统
语法
mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
参数
device : 预备检查的硬盘分区,例如:/dev/sda1
-V : 详细显示模式
-t : 给定档案系统的型式,Linux 的预设值为 ext2
-c : 在制做档案系统前,检查该partition 是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
block : 给定 block 的大小
示例
在 /dev/hda5 上建一个 msdos 的档案系统,同时检查是否有坏轨存在
$ mkfs -V -t msdos -c /dev/hda5
将sda6分区格式化为ext3格式
$ mfks -t ext3 /dev/sda6
10. chmod
简介
控制文件调用权限
语法
chmod [-cfvR] [--help] [--version] mode file...
参数
mode参数:
[ugoa...][[+-=][rwxX]...][,...]
(1) u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是
(2) + 表示增加权限、- 表示取消权限、= 表示唯一设定权限
(3) r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
示例
将文件 file1.txt 设为所有人皆可读取
$ chmod ugo+r file1.txt
#或者
$ chmod a+r file1.txt
将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
$ chmod ug+w,o-w file1.txt file2.txt
11. crontab
简介
执行定时任务
语法
crontab [ -u user ] file
#或者
crontab [ -u user ] { -l | -r | -e }
参数
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表
时间格式:
(1) 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推
(2) 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
(3) 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
(4) 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推
f1 f2 f3 f4 f5 program
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
示例
每分钟执行一次/bin/ls
* * * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “haha”
20 0-23/2 * * * echo"haha"
每天22:50关闭ssh服务
50 22 * * * /sbin/service sshd stop
每月1号和15号检查/home 磁盘
0 0 1,15 * * fsck /home
12. lsof
简介
列出当前系统打开文件的工具
语法
lsof [options] filename
参数
默认 : 没有选项,lsof列出活跃进程的所有打开文件
组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数
-a 结果进行“与”运算(而不是“或”)
-c<进程名> 列出指定进程锁打开的文件
-g 列出GID号进程详情
+d<文件号> 列出占用该文件号的进程
+D<目录> 递归列出目录下被打开的文件
-n<目录> 列出NFS的文件
-i<条件> 列出符合条件的进程
-p<进程号> 列出指定进程号打开的文件
-l 在输出显示用户ID而不是用户名
-h 获得帮助
-t 仅获取进程ID
-U 获取UNIX套接口地址
-F 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)
示例
#列出所有打开的文件:
$ lsof
#备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
#递归查看某个目录的文件信息
$ lsof +D /filepath/filepath2/
#备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
# 列出某个用户打开的文件信息
lsof -u username
# 列出某个程序所打开的文件信息
lsof -c mysql
# 通过某个进程号显示该进行打开的文件
lsof -p 1
# 列出所有tcp 网络连接信息
lsof -i tcp
# 列出谁在使用某个端口
lsof -i :3306
# 列出所有网络文件系统
lsof -N
# 根据文件描述列出对应的文件信息
lsof -d description(like 2)
13. netstat
简介
获取系统的网络状况
语法
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
参数
-a或–all 显示所有连线中的Socket
-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址
-c或–continuous 持续列出网络状态
-C或–cache 显示路由器配置的快取信息
-e或–extend 显示网络其他相关信息
-F或–fib 显示FIB
-g或–groups 显示多重广播功能群组组员名单
-h或–help 在线帮助
-i或–interfaces 显示网络界面信息表单
-l或–listening 显示监控中的服务器的Socket
-M或–masquerade 显示伪装的网络连线
-n或–numeric 直接使用IP地址,而不通过域名服务器
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称
-o或–timers 显示计时器
-p或–programs 显示正在使用Socket的程序识别码和程序名称
-r或–route 显示Routing Table
-s或–statistics 显示网络工作信息统计表
-t或–tcp 显示TCP传输协议的连线状况
-u或–udp 显示UDP传输协议的连线状况
-v或–verbose 显示指令执行过程
-V或–version 显示版本信息
-w或–raw 显示RAW传输协议的连线状况
-x或–unix 此参数的效果和指定"-A unix"参数相同
–ip或–inet 此参数的效果和指定"-A inet"参数相同
示例
显示详细的网络状况
$ netstat -a
显示所有的监听套接口
$ netstat -l
显示所有tcp和udp连接
$ netstat -tuln
14. route
简介
查看路由表
语法
route [-f] [-p] [Command] [Destination] [mask Netmask] [Gateway] [metric Metric] [if Interface]
参数
-c 显示更多信息
-n 不解析名字
-v 显示详细的处理信息
-F 显示发送信息
-C 显示路由缓存
-f 清除所有网关入口的路由表
-p 与 add 命令一起使用时使路由具有永久性
add:添加一条新路由。
del:删除一条路由。
-net:目标地址是一个网络
-host:目标地址是一个主机
netmask:当添加一个网络路由时,需要使用网络掩码
gw:路由数据包通过网关。注意,你指定的网关必须能够达到
metric:设置路由跳数
示例
添加网关/设置网关
$ route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
屏蔽一条路由
$ route add -net 224.0.0.0 netmask 240.0.0.0 reject
删除路由记录
$ route del -net 224.0.0.0 netmask 240.0.0.0
$ route del -net 224.0.0.0 netmask 240.0.0.0 reject
删除和添加设置默认网关
$ route del default gw 192.168.120.240
$ route add default gw 192.168.120.240
15. tcpdump
简介
用于抓包分析数据包
语法
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
参数
-a 尝试将网络和广播地址转换成名称
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出
-e 在每列倾倒资料上显示连接层级的文件头
-f 用数字显示网际网络地址
-F<表达文件> 指定内含表达方式的文件
-i<网络界面> 使用指定的网络截面送出数据包
-l 使用标准输出列的缓冲区
-n 不把主机的网络地址转换成名字
-N 不列出域名
-O 不将数据包编码最佳化
-p 不让网络界面进入混杂模式
-q 快速输出,仅列出少数的传输协议信息
-r <数据包文件> 从指定的文件读取数据包数据
-s <数据包大小> 设置每个数据包的大小
-S 用绝对而非相对数值列出TCP关联数
-t 在每列倾倒资料上不显示时间戳记
-tt 在每列倾倒资料上显示未经格式化的时间戳记
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型
-v 详细显示指令执行过程
-vv 更详细显示指令执行过程
-x 用十六进制字码列出数据包资料
-w<数据包文件> 把数据包数据写入指定的文件
示例
显示TCP包信息
$ tcpdump
显示指定数量包
$ tcpdump -c 20
精简显示
$ tcpdump -c 10 -q //精简模式显示 10个包
16. tar
简介
用于文件备份
语法
tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][--after-date=<日期时间>][--atime-preserve][--backuup=<备份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<范本样式>][--force-local][--group=<群组名称>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用户名称>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<区块数目>][--recursive-unlink][--remove-files][--rsh-command=<执行指令>][--same-owner][--suffix=<备份字尾字符串>][--totals][--use-compress-program=<执行指令>][--version][--volno-file=<编号文件>][文件或目录...]
参数
-A或–catenate 新增文件到已存在的备份文件
-b<区块数目>或–blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes
-B或–read-full-records 读取数据时重设区块大小
-c或–create 建立新的备份文件
-C<目的目录>或–directory=<目的目录> 切换到指定的目录
-d或–diff或–compare 对比备份文件内和文件系统上的文件的差异
-f<备份文件>或–file=<备份文件> 指定备份文件
-F<Script文件>或–info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件
-g或–listed-incremental 处理GNU格式的大量备份
-G或–incremental 处理旧的GNU格式的大量备份
-h或–dereference 不建立符号连接,直接复制该连接所指向的原始文件
-i或–ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF
-k或–keep-old-files 解开备份文件时,不覆盖已有的文件
-K<文件>或–starting-file=<文件> 从指定的文件开始还原
-l或–one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算
-m或–modification-time 还原文件时,不变更文件的更改时间
-M或–multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式
-N<日期格式>或–newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里
-o或–old-archive或–portability 将资料写入备份文件时使用V7格式
-O或–stdout 把从备份文件里还原的文件输出到标准输出设备
-p或–same-permissions 用原来的文件权限还原文件
-P或–absolute-names 文件名使用绝对名称,不移除文件名称前的"/“号
-r或–append 新增文件到已存在的备份文件的结尾部分
-R或–block-number 列出每个信息在备份文件中的区块编号
-s或–same-order 还原文件的顺序和备份文件内的存放顺序相同
-S或–sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或–list 列出备份文件的内容
-T<范本文件>或–files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件
-u或–update 仅置换较备份文件内的文件更新的文件
-U或–unlink-first 解开压缩文件还原文件之前,先解除文件的连接
-v或–verbose 显示指令执行过程
-V<卷册名称>或–label=<卷册名称> 建立使用指定的卷册名称的备份文件
-w或–interactive 遭遇问题时先询问用户
-W或–verify 写入备份文件后,确认文件正确无误
-x或–extract或–get 从备份文件中还原文件
-X<范本文件>或–exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件
-z或–gzip或–ungzip 通过gzip指令处理备份文件
-Z或–compress或–uncompress 通过compress指令处理备份文件
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度
–after-date=<日期时间> 此参数的效果和指定”-N"参数相同
–atime-preserve 不变更文件的存取时间
–backup=<备份方式>或–backup 移除文件前先进行备份
–checkpoint 读取备份文件时列出目录名称
–concatenate 此参数的效果和指定"-A"参数相同
–confirmation 此参数的效果和指定"-w"参数相同
–delete 从备份文件中删除指定的文件。
–exclude=<范本样式> 排除符合范本样式的文件
–group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组
–help 在线帮助
–ignore-failed-read 忽略数据读取错误,不中断程序的执行
–new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同
–newer-mtime 只保存更改过的文件
–no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理
–null 从null设备读取文件名称
–numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称
–owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户
–posix 将数据写入备份文件时使用POSIX格式
–preserve 此参数的效果和指定"-ps"参数相同
–preserve-order 此参数的效果和指定"-A"参数相同
–preserve-permissions 此参数的效果和指定"-p"参数相同
–record-size=<区块数目> 此参数的效果和指定"-b"参数相同
–recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接
–remove-files 文件加入备份文件后,就将其删除
–rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令
–same-owner 尝试以相同的文件拥有者还原文件
–suffix=<备份字尾字符串> 移除文件前先行备份
–totals 备份文件建立后,列出文件大小
–use-compress-program=<执行指令> 通过指定的指令处理备份文件
–version 显示版本信息
–volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号
示例
压缩当前目录下所有的文件,非打包
$ tar -czvf test.tar.gz *
列出压缩文件内容
$ tar -tzvf test.tar.gz
解压文件
$ tar -zxvf test.tar.gz