LinuxShell基础命令汇总

参考文档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模式
    可视模式

VIM模式

  • 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格式删除掉, 使用前请先备份;
find . -type f -print0 | xargs -0 sed -i "s/\r//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配置文件
      /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端口是否可用telnet 53

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     该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页