参考文档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][范本样式][文件或目录...]
123456789101112131415161718192021222324252627282930# 查看文本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计算字数
123456wc filewc -l filew | wc -l#查看CPU数量grep processor /proc/cpuinfo | wc -l -
sed文本处理,利用script来处理文本文件
1234567891011121314#将文本中"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命令用于检查及删除文本文件中重复出现的行列123456# 删除重复行uniq testfile# 统计重复行数uniq -c testfile# 只显示重复的行uniq -d testfile -
awk处理文本文件语言,强大的文本分析工具
12345678910111213141516#查看各挂载点的可用空间df -h |awk '{print $1,$4}'#查看每个用户shellawk -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 ,这个例子我没有想到,应该平时都用不到的吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#-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相关文章
1234scp [可选参数] file_source file_targetscp loca_file remote_ip:remote_filescp -r local_folder remote_ip:remote_folderscp -P 4588 remote@remote_ip:/usr/local/sin.sh /home/administrator
1.4 文件类其他命令
-
find 命令用来在指定目录下从查找文件
1234567find . -name "*.c"find . -type f -name abcfind . -type d -name includefind . -ctime -20find /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查看当前目录
12pwd [-L]pwd -P -
pwdx查找程序执行路径
1pwdx PID -
mount 命令是经常会用命令,用于挂载Linux系统外文件
123mount /dev/sdb1 /mntmount -o ro /dev/sdb1 /mntmount -o oop /tmp/image.iso /mnt/cdrom
1.5 进程类
-
ps命令用于显示当前进程状态
1234ps -ef|grep httpps aux|grep httpps -Aps -u root -
top命令用于显示实时process进程状态
可以看到load average/CPU使用率/内存使用率12345#当服务器中某个服务进程内存或者CPU资源消耗非常严重时,查看特定进程top -p PID#查看特定用户的进程情况top -u USERNAME -
kill关闭进程
12kill 12345kill -KILL 123456 -
nohup 不挂断运行命令
12nohup ./start.sh &nohup ./start.sh > start.log -
lsof 命令用于查看进程打开文件,打开文件进程,进程打开的端口(TCP/UDP)
1234567891011lsof abc.txtlsof -c abclsof -i:8080#列出所有打开的文件lsof#找出哪些进程在使用/tmp/lsof /tmp#列出所有mysql用户打开的文件lsof -u mysql#列出进程号为1的进程打开的文件lsof -p 1
1.6 系统类
-
hostmane 命令用于显示和设置系统主机名称
123#生产环境不能修改主机名hostname -Fhostname -s -
uptime命令能够打印系统总共运行市场和系统平均负载
12345uptime 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命令
12345678#pssh命令主要用于查看,如修改需要做好操作前测试#连接到host1和host2运行uptimepssh -i -H "host1 host2" uptime#连接到ip.txt列表里的主机,运行uptimepssh -i -h ip.txt uptime#运行长命令不超时pssh -i -h ip.txt -t 0 sleep 10000 -
远程复制
12345678#批量传送本地文件到"目标机器"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相关统计信息
1234#查看所有磁盘IOiostat#查看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常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#安装 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软件管理
1 2 3 4 5 6 |
#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命令
1 2 3 4 5 6 |
#基本用法 dig www.aliyun.com #查看反向解析 dig -x 140.205.34.3 #从根服务器开始追踪一个域名解析过程 dig +trace aliyun.com |
- nslookup命令
1 2 3 4 |
# 直接查询 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 常用命令
1 2 3 4 5 6 |
/var/log/message 系统启动后的信息和错误日志,最常用的日志 /var/log/secure 与安全相关的日志 /var/log/cron 与定时任务相关的日志信息 /var/log/boot.log 守护进程启动和停止相关的日志信息 /var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件 |
微信赞赏
支付宝赞赏