shell 常用命令

例举一些常用的shell命令

shell的基本能力

linux的设计理念,就是用shell命令来完成很多复制的工作。 shell包含特色功能。

通配符

包括 *,花括号展开,引号等高级用法。 echo ~ echo可以用来看通配符的展开情况

重定向

  • > 重定位到文件 >> 是追加内容
  • ls -l /bin/usr > ls-output.txt 2>&1 其中2>&1 将标准错误重定向到标准输出
  • > /dev/null 重定向到null,相当于忽略输出

    管道

    可以对文本做多个复杂的处理 cat .bash_history |sort|uniq -c|sort -rn|head 看历史命令使用最多的前几条(uniq前必须先排序)

    组合命令

    command1,command2

    历史命令

    ctrl+r 搜索历史命令

    shell脚本

  • a = $(command) 执行命令的返回,赋值给变量
  • if [ -n "$a" ] 变量就是对其展开,如果把变量字符串用,可以

#nohup 应用程序名 & 此后,如果你断开了ssh,程序依旧运行。

文本处理

查看文本 (cat,less,more,vi,od)

cat,less,more,vi,od 都可以对文件进行查看。

  • cat -n输出带行号
  • less view file 代替more,可以前后翻页
  • od -x 或则 hexdump 以16进制的方式查看文件

grep

常用选项

选项 描述
-n 匹配结果的时候,给出行号
-C10 输出匹配行号,并输出上下n行 grep -C10 pattern filename
-r 查找文件夹 grep -r xx ./
-E 使用扩展正则,可以同时匹配多个表达式 grep -E "pattern1|pattern2" filename
none 多次查找 grep 'xx' filename| grep 'yy'
-i 忽略大小写

awk

按照给定分隔符,一般是空格,将文本当做表格处理。在需要对查找出来的问题,做高级统计的时候需要用到

  • grep '过期' logs/message.log |awk '{sum+=substr($8,7)} END {print sum}'|more

文件操作

文件信息 file stat du

  • file 查看文件的类型
  • stat 文件修改时间
  • du 文件夹大小 du -m|sort -rg|less 显示并对其排序 du -sh * 文件夹大小

远程文件拷贝 scp sftp

scp 和 sftp 可以通过ssh在服务器之间传输文件。

  • scp -P22 fixAgent.jar root@192.168.2.207:~/fixAgent.jar 通过ssh将本地的文件复制到远端
  • sftp root@192.168.2.207

查找文件 locate find

快速的查找。locate 查询路径数据库,find 便利查找。

  • find / -name "system.map"
  • find ~ -type d 只搜索目录
  • find ~ -type f -name "\*.JPG" -size +1M 更多的过滤条件

压缩文件 tar

  • tar -xvf archive_name.tar.gz 解压文件
  • tar -cvf 1.ar * 压缩文件

符号链接 ln

ln -s file link -s 软连接,可以是目录

文件比较 diff

diff file1 file2 比较文件的差异 diff <(printenv) <(env) 对于标准输出,可以直接进程替换比较

工具

wc统计行数或则字数 md5sum file 文件的md5码 df free

watch

周期的执行给定命令。 watch -n1 "netstat -ano|grep 10001 -c" 不加n就默认两秒执行一次。

screen

screen -ls screen的列表 screen -rd name 重新连接一个会话 screen -S name 新建screen,并给个name 退出screen ctrl+A,D ` screen -X -S 19216 quit` 删除session

访问网页

curl -u username -d “param1=value1&param2=value” https://api.github.com curl -G -d “test=string” http://www.baidu.com

tcpdump

抓包 tcpdump -i eth0 -nn port 9001 tcpdump -i eth0 -s 0 -w SuccessC2Server.pcap port 10001

系统信息

硬件信息

  • lscpu cpu信息概况,能看出是否虚拟化
  • cat /proc/cpuinfo 更详细的cpu信息
  • /sys/devices/system/cpu/中更详细的cpu信息 cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size cache_line大小
  • 硬盘s使用情况 df -h -h单位是g
  • 内存使用信息 free -m 更详细的信息cat /proc/meminfo

环境变量

  • 全部环境变量 printenv or env
  • 输出单个环境变量 echo $HOME
  • /etc/profile 定义的地方

ssh

  • ssh配置免密输入,可以更方便的scp和执行远端命令。 通过ssh-keygen -t rsa生成rsakey,一般在~/.ssh/里面,并加入远端的服务器cat id_rsa.pub >> ~/.ssh/authorized_keys
  • 远端执行命令 ssh root@192.168.2.207 'df -h'
  • ssh隧道 ssh -L 8008:web:80 root@sshserver 通过ssh服务器访问内网环境

cpu使用率

cpu作为程序执行的主体,分析cpu的工具比较多,perf,top,vmstat,VTune perf非常强大的性能分析工具。甚至能对cache miss和内核切换做分析。 linux下的sar是比较全面的性能分析工具,包括iostat,vmstat。

perf

看cpu L1Cache的miss 情况

perf stat -e L1-dcache-load-misses java L1CacheMiss

相关介绍

top

VIRT:进程占用的虚拟内存 单个进程的线程占用情况 top -H -p

load average:加载平均值是指,等待运行的进程数目。第一个是最后60秒的平均值,下一个是前5分钟的平均值,最后一个是前15分钟的平均值,低于1就是工作不忙碌。

磁盘利用率,磁盘队列

iostat -xm 1每秒查看磁盘的读写量。-x显示更详细的统计信息,-m用megabytes为单位显示统计信息。

关注写入速度,await时间等。

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.25    0.00    0.38    0.12    0.00   99.25

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00   18.00     0.00     0.04     4.00     0.03    1.83    0.00    1.83   0.67   1.20
vdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

内存

  • vmstatsi代表从磁盘换入,so代表换出。正在内存交换的系统性能很差。
  • r:运行队列,运行队列于处理器个数 代表cpu执行不过来了
  • b: 等待io队列。The number of processes in uninterruptible sleep
  • swpd:virtual memory
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 6288620  75888 349184    0    0     0     3    0    0  0  0 100  0  0
 0  0      0 6288480  75888 349184    0    0     0     0  844 1664  0  0 100  0  0

netstat -r 路由表 netstat -s # 查看网络统计信息 netstat -anotp 查看所有tcp链接,p显示pid。n显示原始地址,不用试图解析。o包括网络计时器。

Recv-Q和Send-Q 可以看TCP缓存区的情况。来断定是否TCP已经来不起接收或者发送。

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name     Timer
tcp        0      0 0.0.0.0:8060            0.0.0.0:*               LISTEN      15848/nginx: master  off (0.00/0/0)
tcp        0      0 127.0.0.1:9121          0.0.0.0:*               LISTEN      16470/redis_exporte  off (0.00/0/0)
tcp        0      0 192.168.2.207:30000     192.168.101.102:62645   ESTABLISHED 5546/mongod          keepalive (290.00/0/0)
tcp        0     28 10.0.0.14:10001         115.52.169.241:26370    ESTABLISHED 8427/java            on (79.60/5/0)

socket状态统计

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

看tcp缓存区的使用情况 netstat -anp|grep 6010|awk ‘{sums+=$3; sumr+=$2} END {print “sumSend =”,sums,”sumRece=”,sumr}’

来自 http://www.cnblogs.com/sunxucool/p/3449068.html ss -i 可以看到rtt等内部相关的消息

网络使用率

ifconfignetstatifstat

其它

  • 执行时间 time command
  • 查看定时任务列表 crontab -l
  • 系统启动时间 who -b uptime
  • 活动用户 who
  • 计算机名 hostname
  • 查看用户登录日志 last
  • 设置时间 date -s 02/11/2012
  • 重启 reboot
  • 切换用户 su near su -切换到超级用户
  • CentOS版本 cat /etc/redhat-release “CentOS Linux release 7.2.1511 (Core)”
  • /etc/passwd 修改登录后的默认路径

进程

ps

  • ps aux x显示全部进程,au能显示更多的信息。TIME 字段表示进程所消耗的 CPU 时间数量。
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0 190716  3252 ?        Ss    2018   5:06 /usr/lib/systemd/systemd --system --deserialize 17
    root         2  0.0  0.0      0     0 ?        S     2018   0:17 [kthreadd]
    root         3  0.0  0.0      0     0 ?        S     2018   1:39 [ksoftirqd/0]
    
  • -o可以指定额外的列显示得到更详细的进程信息。ps -eo pid,lstart,etime|grep 17862 ps -p 15202 -o etime= etime为执行了多久,格式是[[DD-]hh:]mm:ss。lstart是开始执行时间。
    PID                  STARTED     ELAPSED
    10899 Fri Mar 15 12:28:07 2019    02:29:39
    15372 Thu Feb 28 12:42:51 2019 15-02:14:55
    ......
    
  • ps -eLf|grep pid -c 看pid的进程有多少个线程

进程详细信息 (/proc/pid/)

这里包含进程相关的很多信息

  • ll /prod/pid 可以看到很多信息,进程的工作目录和执行的命令等。
    lrwxrwxrwx  1 root root 0 Mar 15 12:33 cwd -> /home/brgzadmin/online/server
    -r--------  1 root root 0 Mar 15 12:33 environ
    lrwxrwxrwx  1 root root 0 Mar 14 15:05 exe -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre/bin/java
    
  • cat /poc/pid/maps 进程的内存布局

offset - If the region was mapped from a file (using mmap), this is the offset in the file where the mapping begins. If the memory was not mapped from a file, it’s just 0. mmap: It implements demand paging。不会读取全部文件

address           perms offset  dev   inode   					pathname
00601000-00602000 rw-p 00001000 fd:01 134498201         /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre/bin/java
00ee6000-00f07000 rw-p 00000000 00:00 0                 [heap]
85a00000-a6e80000 rw-p 00000000 00:00 0
......
  • ll fd 进程打开的句柄。如果持有一个输出文件。就算被删除,也能找回来。
    lr-x------ 1 root root 64 Mar 15 12:37 0 -> /dev/null
    l-wx------ 1 root root 64 Mar 15 12:37 1 -> /home/brgzadmin/online/server/out.txt
    lr-x------ 1 root root 64 Mar 15 12:37 10 -> /home/brgzadmin/online/server/lib/serial-client.jar
    lr-x------ 1 root root 64 Mar 15 12:37 100 -> pipe:[30756313]
    

top

top -d 30 -p $pid -b 统计指定进程的cpu占用。-b 可以作为输出,一直记录

lsof 打开的文件

lsof -i:22 条件过滤 -i

网络

Traceroute ip

查看经过的路由器,如果中间的路由器不支持返回信息,就会显示***

traceroute: Warning: www.baidu.com has multiple addresses; using 61.135.169.125
traceroute to www.a.shifen.com (61.135.169.125), 64 hops max, 52 byte packets
 1  192.168.200.1 (192.168.200.1)  6.941 ms  5.138 ms  4.306 ms
 2  * * *
  • cat /proc/net/dev 看网络流量

route

用于查看那系统的路由表信息

nslook

nslook www.baidu.com 通过域名 查ip


帮助

man

man 7 socket 显示socket entry在section 7的内容。看man手册的不同section,可以用man man man -k xxx 在man手册中搜索对应的entries man -K xxx 大写K,搜索man手册中所有内容

section 内容
1 用户命令
2 程序接口内核系统调用
3 C 库函数程序接口
4 特殊文件,比如说设备结点和驱动程序
5 文件格式
6 游戏娱乐,如屏幕保护程序
7 其他方面
8 系统管理员命令

系统日志

  • dmesg -T 内核日志
  • /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一

更多

关于系统方面的命令,在《性能调优》有更多的分析。

Linux命令总结 http://linuxtools-rst.readthedocs.org/zh_CN/latest/index.html

Updated: