Linux Cheat Sheet - tenji/ks GitHub Wiki

Linux常用命令

一、磁盘

  • 查看当前目录下所有文件和目录大小(-s, --summarize; -h, --human-readable)
    du -sh *
    
  • 查看当前目录下所有文件和目录大小,并按照大小顺排(-h, --human-numeric-sort)
    du -sh * | sort -h
    
  • 查看当前目录下所有文件和目录大小,并按照大小倒排(-h, --human-numeric-sort; -r, --reverse)
    du -sh * | sort -hr
    
  • 查看当前目录下所有文件和目录大小,按照大小倒排,并选出排在前面的10个
    du -sh * | sort -hr | head
    
  • 查看当前目录下所有文件和目录大小,按照大小倒排,并选出排在后面的10个
    du -sh * | sort -hr | tail
    
  • 查看磁盘挂载信息(-l, --local; -h, --human-readable; -T, --print-type)
    df -lhT
    

二、搜索

2.1. find

find命令的作用是在目录中根据文件名搜索文件。

  • 查找当前目录下的所有文件名中包含Clock文件
    find . -name "*Clock*"
    

2.2. grep

grep命令的作用是在目录中根据文件内容搜索文件。

  • 查找当前目录下的所有文件中包含Clock字符串的文件,不查找子目录
    grep "Clock" *
    
  • 查找当前目录下的所有文件中包含Clock字符串的文件,查找子目录
    grep -r "Clock" *
    
  • 查找当前目录下的所有文件中包含Clock字符串的文件,查找子目录,并显示行号
    grep -nr "Clock" *
    
  • 或操作
    grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行
    egrep '123|abc' filename    // 用egrep同样可以实现
    awk '/123|abc/' filename   // awk 的实现方式
    
  • 与操作
    grep pattern1 files | grep pattern2 //显示既匹配 pattern1 又匹配 pattern2 的行
    
  • 其它操作
    grep -i pattern files   // 不区分大小写地搜索,默认情况区分大小写
    grep -l pattern files   // 只列出匹配的文件名
    grep -L pattern files   // 列出不匹配的文件名
    grep -w pattern files  // 只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’)
    grep -C number pattern files // 匹配的上下文分别显示[number]行
    

三、压缩

3.1. tar

  • 打包 foldername 目录,命名为 foldername.tar

    tar -cvf foldername.tar foldername/
    
  • 打包并以 gzip 压缩 foldername 目录,命名为 foldername.tar.gz

    tar -czvf foldername.tar.gz foldername/
    
  • 打包并以 bzip2 压缩 foldername 目录,命名为 foldername.tar.bz2

    tar -cjvf foldername.tar.bz2 foldername/
    
  • 将 foldername.tar.gz 解压到当前目录

    tar -xzvf foldername.tar.gz
    
  • 将 foldername.tar.bz2 解压到当前目录

    tar -xjvf foldername.tar.bz2
    

3.2. zip

  • 打包 foldername 目录,命名为 foldername.zip
    zip -r -q foldername.zip foldername/
    

3.3. unzip

  • 将 foldername.zip 文件解压
    unzip foldername.zip
    

3.4. rpm2cpio && cpio

  • 将 rpmfile.rpm 文件解压(-i, --extract; -d, --make-directories; -m, --preserve-modification-time, -v, --verbose)
    rpm2cpio rpmfile.rpm | cpio -idmv
    

四、路由

4.1 route

  • 查看路由列表(-n, --numeric)

    route -n
    
  • 添加默认网关

    route add default gw 10.0.0.254
    
  • 添加网络路由

    route add –net 192.168.1.11 netmask 255.255.255.0 eth0
    route add –net 192.168.1.11 netmask 255.255.255.0 gw 192.168.1.1
    route add –net 192.168.1.0/24 eth1
    
  • 添加主机路由

    route add –host 192.168.1.12 gw 192.168.1.1
    
  • 删除默认网关

    route del default gw 10.0.0.254
    
  • 删除网关

    route del –net 192.168.1.11 netmask 255.255.255.0
    

注意:以上为添加临时路由的方法,若要添加永久路路由,需要修改配置文件。

4.2 traceroute

五、抓包

5.1. tcpdump

  • 监听来自eth0适配卡且通信协议为port 22,来源主机为192.168.1.100的数据包资料

    tcpdump -i eth0 -nn port 22 and src host 192.168.1.100
    
  • 抓取访问eth0适配卡且访问协议为tcp,端口为9080,目标主机为172.168.70.35的数据报资料

    tcpdump -i eth0 dst 172.168.70.35 and tcp port 9080
    
  • 抓取与主机192.168.43.23或着与主机192.168.43.24通信报文,并且显示在控制台上

    tcpdump -X -s 1024 -i eth0 host \(192.168.43.23 or 192.168.43.24\) and host 172.16.70.35
    
  • 监听来自eth0适配卡且通信协议为port 22,目标主机为129.188.35.69的数据包资料,并写到mypcap.pcap文件

    tcpdump -i eth0 -nn port 22 and dst 129.188.35.69 -w mypcap.pcap
    

相关参数:

-s 0 will set the capture byte to its maximum i.e. 65535, after this capture file will not truncate.
-i eth0 is using to give Ethernet interface, which you to capture. Default is eth0, if you not use this option.
port ftp or ssh is the filter, which will capture only ftp and ssh packets. You can remove this to capture all packets.
-w mypcap.pcap will create that pcap file, which will be opened using wireshark.

六、iptables

  • 查询规则列表

    iptables -L
    
  • 查询指定规则及行号

    iptables -L INPUT --line-numbers
    iptables -L OUTPUT --line-numbers
    
  • 删除指定规则

    iptables -D INPUT [规则的行号]
    iptables -D OUTPUT [规则的行号]
    
  • 添加指定规则(临时)

    iptables -I INPUT -s [source_ip] -p tcp -j ACCEPT
    iptables -I INPUT -s [source_ip] -p tcp -j DROP
    
  • 禁止和开放端口(dport:目标端口,sport:来源端口)

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
    
  • 禁止访问指定 IP 和端口

    iptables -A OUTPUT -p tcp -d [target_ip] --dport [target_port] -j DROP
    
  • 重启

    service iptables restart
    

七、进程

  • 查看进程启动时间
    ps -p [PID] -o lstart
    
  • 查看系统里运行的JAVA线程(-L, Show threads, possibly with LWP and NLWP columns),以及线程数量
    ps -eLf | grep java
    ps -eLf | grep java | wc
    
  • 查看进程的内存映射关系(-x,extended,show details)
    pmap -x [pid]
    

八、目录与文件

  • 查看目录或文件被用户占用情况(-u, --user; -v, --verbose)

    fuser -uv [file]
    
  • 查看目录或文件被进程占用情况

    lsof +D [file]
    
  • 查看进程打开的文件详情、查询进程打开的文件数量

    lsof -p [pid]
    lsof -p [pid] | wc -l
    

九、用户与用户组

  • 创建用户

    useradd [username]
    
  • 修改用户密码(新创建的用户没有设置密码,需要使用passwd命令来修改密码)

    passwd [username]
    
  • 把用户加到groupname组(并没有改变主属组)

    usermod -G [groupname] [username]
    
  • 把username的主属组修改为groupname

    usermod -g [groupname] [username]
    
  • 删除用户

    userdel [username]
    
  • 创建用户组

    groupadd [groupname]
    
  • 删除用户组

    groupdel [groupname]
    
  • 查询用户所属组

    groups [username]
    

十、散列

  • md5
    $ echo -n [text] | md5sum
    
  • sha256
    $ echo -n [text] | sha256sum
    

十一、定时任务

11.1 crontab

  • 列出crontab文件

    crontab -l
    
  • 编辑crontab文件

    crontab -e
    

十二、时间

12.1. date

  • 查看当前时区和时间

    date
    
  • 查看UTC时间(-u, --utc)

    date -u
    
  • 修改系统时间(-s, --set)

    date -s 2019-07-17 15:17:00
    

十三、替换

13.1. sed

  • 替换每行第一个匹配的关键字
    sed "s/source/target/"
    
  • 替换每行所有匹配的关键字
    sed "s/source/target/g"
    
  • 替换每行所有匹配的关键字,并且在文件中替换(-i,--in-place,edit files in place)
    sed -i "s/source/target/g"
    

十四、网络

14.1. curl

  • 统计端到端时延
    curl -o /dev/null -s -w %{time_namelookup}---%{time_connect}---%{time_starttransfer}---%{time_total}---%{speed_download}"\n" dis.cn-north-1.myhuaweicloud.com:443