参考文档RUNOOB Linux 教程
1.Linux基础命令
1.1 查看文件
-
cat -- 用于连接文件并打印到标准输出设备上
cat /etc/issue -
more --类似cat命令,以分页的方式显示文件内容
ls -l |more -
less --与more类似,但使用less可以随意浏览文件
ps -ef| less
history| less -
head --用于显示文件的开头至标准输出中
head -n 20 /etc/fstab
ps -ef| head -
tail --用于显示文件的末尾至标准输出中
tail -n 20 /var/log/messages
tail -f /var/log/messages
1.2 文本处理
- vim是vi改进版本,程序员的文本编辑器
vim常用模式
命令模式
插入模式
ex模式
可视模式
-
grep文本过滤
grep -- 命令用于查找文件里符合条件的字符串
grep [-abcEGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
# 查看文本 grep "test" file #输出file文件中匹配到test字符串的行 grep -v "test" file #输出file文件中未匹配到test字符串的行 grep -A 10 -B 12 "test" file #输出file文件中,匹配到test的前10行和后12行 grep 'model name' /proc/cpuinfo # 查看CPU型号 grep -E -v "^#|^$" /etc/fstab #显示/etc/fstal的有效内容(不显示空行和注释行) grep -iRn "rot" /root #搜索/root目录下的所有文件,显示包含"rot"关键字的行 grep -c "48" test.txt #统计所有以“48”字符开头的行有多少 grep -i "May" test.txt #不区分大小写查找“May”所有的行) grep -n "48" test.txt #显示行号;显示匹配字符“48”的行及行号,相同于 nl test.txt |grep 48) grep -v "48" test.txt #显示输出没有字符“48”所有的行) grep "471" test.txt #显示输出字符“471”所在的行) grep "48;" test.txt #显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行 grep "48[34]" test.txt #显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行) grep "^[^48]" test.txt #显示输出行首不是字符“48”的行) grep "[Mm]ay" test.txt #设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行) grep "K…D" test.txt #显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行) grep "[A-Z][9]D" test.txt #显示输出第一个字符的范围是“A-D”,第二个字符是“9”,第三个字符的是“D”的所有的行 grep "[35]..1998" test.txt #显示第一个字符是3或5,第二三个字符是任意,以1998结尾的所有行 grep "4\{2,\}" test.txt #模式出现几率查找:显示输出字符“4”至少重复出现两次的所有行 grep "9\{3,\}" test.txt #模式出现几率查找:显示输出字符“9”至少重复出现三次的所有行 grep "9\{2,3\}" test.txt #模式出现几率查找:显示输出字符“9”重复出现的次数在一定范围内,重复出现2次或3次所有行 grep -n "^$" test.txt #显示输出空行的行号 ls -l |grep "^d" #如果要查询目录列表中的目录 同:ls -d * ls -l |grep "^d[d]" #在一个目录中查询不包含目录的所有文件 ls -l |grpe "^d…..x..x" #查询其他用户和用户组成员有可执行权限的目录集合 grep -Rni "test" dir #(R)递归匹配dir目录中所有包含test字符串的行和行号(n),并忽略大小写(i) grep -ni "^$" file.txt|grep -E -o '\w+' #输出file.txt所有空行的行数号, -E正则匹配,-o仅输出匹配的字符串 grep -E -w -o "/.*\w*/.conf" #正则匹配"/*/xxx.conf"配置文件的纯路径单词 grep -niE "phpmyadmin:$" docker-compose.yml|awk '{print $1}'| grep -E -o '\w+' #获取包含phpmyadmin:的行号
-
wc计算字数
wc file wc -l file w | wc -l #查看CPU数量 grep processor /proc/cpuinfo | wc -l
-
sed文本处理,利用script来处理文本文件
#将文本中"This"替换为"That" sed 's/This/That' test.txt #从第2处匹配开始替换 echo sksksksksksk | sed 's/sk/SK/2g' #删除中的空白行 sed '/^$/d' test.txt #删除文件第2行 sed '2d' test.txt #替换test.txt中第3到第5行的数据 sed -i "3,5s/abc/def/" test.txt
-
uniq删除文本重复行
uniq命令用于检查及删除文本文件中重复出现的行列# 删除重复行 uniq testfile # 统计重复行数 uniq -c testfile # 只显示重复的行 uniq -d testfile
-
awk处理文本文件语言,强大的文本分析工具
#查看各挂载点的可用空间 df -h |awk '{print $1,$4}' #查看每个用户shell awk -F ':' '{print $1,$7}' /etc/passwd #查看长度大于80字节的日志信息 awk 'length>80' /var/log/messages #输出$6到最后的所有内容 awk '{ for(i=1; i<6; i++){ $i="" }; print $0 }' test.txt #获取nginx进程的执行命令 ps -ef|grep nginx |grep -v grep|awk '{{ for(i=1; i<=7; i++){ $i="" };print $0}' #awk只处理第一个匹配的行,匹配后使用exit命令退出处理: awk '{print $1;exit;}' input.txt #处理3个匹配行后结束处理: awk '/aa/{i++;if(i<3){print $0}else{exit;}}' a #只处理指定的行。NR表示输入文件的行号 awk 'NR==1,NR==3 {print $0}' file
-
xagrs,给命令传递参数的一个过滤器
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
命令格式:
somecommand |xargs -item command
参数:
-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。
#-n 选项多行输出,每行3个单元
cat test.txt | xargs -n3
#以X字符为分隔符,将字符串分开并输出
echo "nameXnameXnameXname" | xargs -dX
echo "nameXnameXnameXname" | xargs -dX -n2
#复制所有图片文件到 /data/images 目录下
ls *.jpg | xargs -n1 -I {} cp {} /data/images
#统计一个源代码目录中所有 go 文件的行数,xargs -0是将 \0 作为定界符
find . -type f -name "*.go" -print0 | xargs -0 wc -l #print0和xargs -0配合使用,用来解决文件名中有空格或特殊字符问题
#查找所有的 jpg 文件,并且压缩它们
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
#查找所有文件并将其中\r\n格式转换为\n, 使用前请先备份;
find . -type f -print0 | xargs -0 sed -i "s/\r\n/\n/g"
#使用 xargs下载文件中所有链接
cat url-list.txt | xargs wget -c
#服务器磁盘满,一般由大的日志文件导致,需找到大文件
du -m -d 1 /|sort -nr #du -m是查看这些文件的大小,并以m为单位显示。最后sort -nr是按照数字反向排序(大的文件在前)
find / -size +500M -print0|xargs -0 du -m|sort -nr
1.3 传输文件
-
Linux/Unix同Window文件传输
- rz,sz是Linux/Unix同Window文件传输的命令行工具,进行Zmodem。使用方法如下:
- linu端需要安装rz/sz命令,也就是lszrz包;
- Window端需要支持ZModem的telnet/ssh客户端(Xshell,SecureCRT支持)
- 运行命令rz,即接收Windows文件,xshell就会弹出文件选择对话框,选好文件后关闭对话框,文件就会上传到linux里的当前目录。
- 运行命令sz file,就是发文件到Windows上(保存的目录是可以配置),比ftp命令方便多,而且服务器不用再开FTP服务;
- 提示:rz、sz命令 系统可能没有安装,软件包的名字是[rzsz]
-
Linux间文件复制
- scp是linux系统下基于ssh登录进行安全的远程文件拷贝命令
- sync/scp相关文章
scp [可选参数] file_source file_target scp loca_file remote_ip:remote_file scp -r local_folder remote_ip:remote_folder scp -P 4588 remote@remote_ip:/usr/local/sin.sh /home/administrator
1.4 文件类其他命令
-
find 命令用来在指定目录下从查找文件
find . -name "*.c" find . -type f -name abc find . -type d -name include find . -ctime -20 find /var/log -type f -mtime +7 -ok rm{} \; find . -type f -perm 644 exec ls -l {} \; find / -type f -size 0 -exec ls -l {} \;
-
pwd查看当前目录
pwd [-L] pwd -P
-
pwdx查找程序执行路径
pwdx PID
-
mount 命令是经常会用命令,用于挂载Linux系统外文件
mount /dev/sdb1 /mnt mount -o ro /dev/sdb1 /mnt mount -o oop /tmp/image.iso /mnt/cdrom
1.5 进程类
-
ps命令用于显示当前进程状态
ps -ef|grep http ps aux|grep http ps -A ps -u root
-
top命令用于显示实时process进程状态
可以看到load average/CPU使用率/内存使用率#当服务器中某个服务进程内存或者CPU资源消耗非常严重时,查看特定进程 top -p PID #查看特定用户的进程情况 top -u USERNAME
-
kill关闭进程
kill 12345 kill -KILL 123456
-
nohup 不挂断运行命令
nohup ./start.sh & nohup ./start.sh > start.log
-
lsof 命令用于查看进程打开文件,打开文件进程,进程打开的端口(TCP/UDP)
lsof abc.txt lsof -c abc lsof -i:8080 #列出所有打开的文件 lsof #找出哪些进程在使用/tmp/ lsof /tmp #列出所有mysql用户打开的文件 lsof -u mysql #列出进程号为1的进程打开的文件 lsof -p 1
1.6 系统类
-
hostmane 命令用于显示和设置系统主机名称
#生产环境不能修改主机名 hostname -F hostname -s
-
uptime命令能够打印系统总共运行市场和系统平均负载
uptime 14:54:05 up 1 day, 21:07, 0 users, load average: 0.01, 0.02, 0.05 #系统当前时间 uptime 15:31:30 #主机已运行时间,时间越大,机器越稳定up 1 day, 21:07 #用户连接数,是总连接数而不是用户数 0 users #系统平均负载, load average: 0.01, 0.02, 0.05,分别表示1分钟,5分钟,15分钟平均负载
load average(系统平均负载):
load average 就是一定 时间内计算机有多少active_taks,也就是计算机的任务执行队列的长度,cpu计算 的队列。load average计算,有多少核心即为于多少负载原则; -
nproc命令查看CPU数量
-
pssh工具箱
pssh是可以并发在多台机器上批量执行命令的工具,系统默认不安装;包括一下命令:- pssh:在远程多台主机上并行运行命令
- pscp:把文件并行复制到多台远程主机上
- prsync:使用rsync协议本地文件同步到远程多台主机上
- pnuke:在远程多台主机上并行killall某进程
- pslurp:把文件从远程多台主机上复制到本地主机上
-
pssh命令
#pssh命令主要用于查看,如修改需要做好操作前测试 #连接到host1和host2运行uptime pssh -i -H "host1 host2" uptime #连接到ip.txt列表里的主机,运行uptime pssh -i -h ip.txt uptime #运行长命令不超时 pssh -i -h ip.txt -t 0 sleep 10000
-
远程复制
#批量传送本地文件到"目标机器" pscp -h ip.txt local remote #批量传送"目标机器"文件到本地 pslurp -h ip.txt -L localdir remote local #通过rsync协议批量传送本地文件到"目标机器",使用admin用户 prsync -h ip.txt -l admin local remote
-
iostat用于输出CPU和磁盘I/O相关统计信息
#查看所有磁盘IO iostat #查看sda磁盘IO,每次相隔2秒,查看5次 iostat sda 2 5
2.NTP
2.1 NTP介绍
Network Time Protocol(NTP,网络时间协议)用于同步它所有客户端时钟的服务;它可以再大规模的设备范围内同步矫正
时间到ms级别精度;在网络稳定的局域网内,精度甚至可以达到微秒级;
2.2 NTP时间来源
- GPS、北斗等卫星系统
- 原子钟
- 移动基站
- 恒温晶振
2.3 NTP配置
-
安装NTP服务
- 检查NTP服务是否安装
rpm -q ntp
- 安装NTP服务
yum install ntp
- 检查NTP服务是否安装
-
配置NTP客户端
-
NTP配置文件
/etc/ntp.conf -
内容查看
查看server开关配置内容
server ntp1.tbsite.net iburst minpoll 4 maxpoll 6
server ntp2.tbsite.net iburst minpoll 4 maxpoll 6
-
-
NTP服务管理
- 服务状态查看
service ntpd status
- 服务启用
service ntpd start
- 服务重启
service ntpd restart
- 服务开启启动
chkconfig ntpd on
- 服务状态查看
-
NTP常用命令
-
查询NTP服务器时间
ntpdate -q ntp1.aliyun.com
-
查询NTP时间同步情况
ntpq -p
-
3.软件管理
3.1 yum源配置
- yum配置文件
- /etc/yum.repos.d/*.repo
- 配置文件内容
- [名称]-yum源的名称
- name-yum源的描述信息
- baseurl-yum源地址
- gpgcheck是否检查GPGKEY
- enabled是否可用
3.2 yum常用命令
#安装
yum install 全部安装
yum install package1 安装指定安装包package1
yum groupinstall group1 安装程序组group1
#更新升级
yum update 全部更新
yum update package1 更新指定程序包package1
yum check-update 检查可更新程序
yum groupupdate group1升级程序组group1
#查找和显示
yum info package1 显示安装包信息package1
yum list 显示所有已经安装和可以安装的数据包
yum list package1 显示指定程序包安装情况package1
yum groupinfo group1 显示程序组group1信息
yum search string 根据关键字string查找安装包
#删除程序 注意生产环境不允许删除操作
yum remove package1 删除程序包package1
yum groupremove group1 删除程序组group1
yum deplist package1 查看程序package1依赖情况
3.3 rpm软件管理
#rpm安装
rpm -ivh lynx-2.8.5-18.2.i386.rpm
#升级软件
rpm -Uvh lynx-2.8.5-18.2.i386.rpm
rpm -Fvh lynx-2.8.5-18.2.i386.rpm
-
rpm查询
使用命令rpm -q来查询已安装软件包的数据库;
rpm -q foo 显示foo软件包的包名,版本号和发行号;
rpm -q foo 除了指定软件包名以外,还可以连同-q使用以下选项来指明要查询哪些软件包信息;-a 查询所有已安装软件包
-f将查询包含有文件 的软件包
-l 查询软件包安装在哪些目录
-i 查询软件包的详细信息
-p查询软件包中有哪些文件 -
rpm卸载
rpm -e foo
注意这里使用软件包名字,而不是软件包文件的命令;版本号也不需要写;生产环境不允许删除操作;
4.DNS查询
4.1 DNS查询
- dig命令
#基本用法
dig www.aliyun.com
#查看反向解析
dig -x 140.205.34.3
#从根服务器开始追踪一个域名解析过程
dig +trace aliyun.com
- nslookup命令
# 直接查询
nslookup aliyun.com
# 反向查询
nslookup ip
4.2 DNS问题排查思路
- 用户侧不能访问,运维侧可访问
一般用户DNS设置问题 - 用户侧和运维侧同时不能访问
检查DNS服务能否ping通
查看DNS服务器的53端口是否可用telnet53
5.日志查看
5.1 日志查看命令
-
last 命令用于显示系统开机以来或是从每月初登入者的讯息
last
last username -
lastb命令用于列出登入系统失败的用户相关信息
lastb -
查看历史命令
history -
查看日志文件
cat
tac
tail -f 或tailf
5.2 常用命令
/var/log/message 系统启动后的信息和错误日志,最常用的日志
/var/log/secure 与安全相关的日志
/var/log/cron 与定时任务相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志信息
/var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件