others-linux常用命令行

others-linux常用命令行


前篇


grep 查询

常用参数

  • -c:显示匹配次数
  • -i:忽略大小写差异
  • -n:在行首显示行号
  • -A:After的意思,显示匹配字符串后n行的数据
  • -B:before的意思,显示匹配字符串前n行的数据
  • -v:显示没有匹配行-A:After的意思,显示匹配部分之后n行
  • -B:before的意思,显示匹配部分之前n行
  • –color:以特定颜色高亮显示匹配关键字

示例

  • 一般使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ grep -inr --color "1116" a_temp.lua

    379:Duke009 = 1116,
    382:rmg-rummy09-1116

    $ grep -inr --color "www.*com" a_temp.lua // 正则

    32:apk: https://www.rmgstation.com/download/
    222:--- urltest: http://www.baidu.com/s?wd=hello&ag=world

正则匹配

正则表达式由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

vim元字符 grep 元字符 说明
^ ^ 匹配输入字符串的开始位置
$ $ 匹配输入字符串的开始位置
* * 匹配前面的子表达式0次或n次(n>0)
\+ \+ 匹配前面的子表达式1次或n次(n>1)
\? \? 匹配前面的子表达式0次或1次
\{n} \{n\} 匹配确定的 n 次(n>=0)
\{n,} \{n,\} 最少匹配n 次(∞>n>=0)
\{n,m} \{n,m\} 最少匹配 n 次且最多匹配 m 次(n<m)
\< \< 匹配单词词首
\> \> 匹配单词词尾
| 或字符,如:x|y 匹配x或者y
[abc] [abc] 字符集合。匹配所包含的任意一个字符
[^abc] [^abc] 表示匹配除方括号中字符之外的任意字符。
[a-z] [a-z] 字符范围,匹配a-z任意字符
[^a-z] [^a-z] 表示匹配除方括号中a-z字符之外的任意字符。
\d ---------- 匹配一个数字字符。等价于 [0-9]
\D ---------- 匹配非数字字符
\w \w 匹配0-9,A-Z,a-z
\W \W 匹配非0-9,A-Z,a-z

find 查找文件

将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:

1
$ find . -name "*.c"

将目前目录其其下子目录中所有一般文件列出

1
$ find . -type f

将当前目录及其子目录下所有最近 20 天内更新过的文件列出:

1
$ find . -ctime -20

查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:

1
$ find /var/log -type f -mtime +7 -ok rm {} \;

查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

1
$ find . -type f -perm 644 -exec ls -l {} \;

cat

  • -n 或 –number:由 1 开始对所有输出的行数编号。

  • -v 或 –show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。

  • -E 或 –show-ends : 在每行结束处显示 $。

  • -T 或 –show-tabs: 将 TAB 字符显示为 ^I。

  • -A, –show-all:等价于 -vET。

  • -e:等价于”-vE”选项;

  • -t:等价于”-vT”选项;

1
$ cat -n aaa.txt

tail

显示命令

  • 显示最后 10 行内容, 直接 tail 文件

    1
    $ tail aaa.txt
  • -f 循环读取, 不断刷新, 实时显示新增内容

    1
    $ tail -f aaa.txt
  • 指定行显示

    • 显示文件末尾 5行 内容

      1
      $ tail -n 5 aaa.txt
    • 显示第五行之后的内容

      1
      $ tail -n +5 aaa.txt

curl

  • 查看状态码

    1
    2
    $ curl -s -w "%{http_code}\n" http://www.gstatic.com/generate_204
    204
    • http_code 就是状态码占位符

kill

列出 kill 命令相关的信号表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

命令格式: kill -9 PID

信号编号 信号名 解释
0 EXIT 程序退出时收到该信号
1 HUP 挂掉电话线或中断连接的挂起信号, 这个信号也会造成某些进程在没有终止的情况下重新初始化
2 INT 表示结束进程, 但并不是强制性的, 常用的 ctrl+c 组合键就是发出一个 kill -2 的信息
3 QUIT 退出
9 KILL 杀死进程, 即强制结束进程
11 SEGV 段错误
15 TERM 正常结束进程, 是 kill 命令的默认信号

whereis 查看命令所在路径

查找文件

1
2
$ whereis -b go
go: /usr/bin/go /opt/go/bin/go

还一个 which

1
2
$ which go # 安装位置
/usr/local/go/bin/go

top 进程信息

Linux top命令用于实时显示 process 的动态

  • 所有进程的信息, 直接 top

    1
    $ top
  • 指定进程的信息

    1
    2
    $ top -p 139
    //显示进程号为139的进程信息,CPU、内存占用率等
  • 指定更新周期

    1
    2
    $ top -d 3
    //表示更新周期为3秒
  • 根据内存, cpu 等排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
        $ top -o %MEM // 内存排序
    $ top -o %CPU // cpu 排序

    - 指定服务信息

    ```json
    $ top -b -n 1 | grep test_
    915262 root 20 0 1236780 16088 9332 S 0.0 0.4 0:37.42 test_feishu_bot
    926767 root 20 0 1602564 7368 6288 S 0.0 0.2 0:00.03 test_flag.test

tar 解压缩

1
2
3
4
5
6
// 压缩
$ tar -czvf public.tar.gz public // 压缩 public 目录 为 public.tar.gz 文件

// 解压
$ tar -xzvf public.tar.gz // 解压 public.tar.gz 文件
$ tar -xzvf public.tar.gz -C /Webapps // 加压到指定目录

zip 解压缩

1
2
3
4
5
// 压缩
$ zip -r myfile.zip public // 压缩 当前目录 及 子目录 为 myfile.zip

// 解压
$ unzip -o -d . proxychains-ng-master.zip // 解压到当前目录, -o 直接覆盖同名文件

scp 上下行文件

1
2
3
4
5
# 下行到本地 /c/Users/Administrator
scp -P 23431 root@wilker.cn:/app/my_hexo_blog/public.tar.gz /c/Users/Administrator

# 上行到远端 /root
scp -P 28980 /c/Users/Administrator/public.tar.gz root@xyz.wilker.cn:/root

ps 查看后台程序 pid

  • 使用命令: ps -aux, 查看 aaa 程序的进程号

    1
    2
    3
    $ ps -aux | grep aaa
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 24446 0.0 0.1 14728 1144 pts/2 S+ 11:58 0:00 grep --color=auto aaa

netstat 查看进程端口

  • netstat 命令

    1
    2
    3
    4
    root@v2ray:~/v2ray# netstat -naptln | grep docker # 指定 关键字
    tcp6 0 0 :::6306 :::* LISTEN 2060/docker-proxy
    tcp6 0 0 :::28017 :::* LISTEN 20268/docker-proxy
    tcp6 0 0 :::7379 :::* LISTEN 2046/docker-proxy

如果没有这个 netstat 命令,则安装net-tool

1
$ apt-get install net-tools
  • ps 命令

    1
    2
    3
    4
    root@v2ray:~/v2ray# ps -auxf | grep v2ray
    root 13704 0.0 1.9 720688 19928 pts/0 Sl Jan13 0:23 | \_ ./v2ray -config config-india02-business.json
    root 13714 0.0 2.2 720688 22280 pts/0 Sl Jan13 0:24 | \_ ./v2ray -config config-india01.json
    root 25748 0.0 0.1 14736 1040 pts/0 S+ 07:58 0:00 | \_ grep --color=auto v2ray

查看正在运行的服务

命令 ps auxw, 必要时可以加上 | grep xxx 查询xxx服务是否在运行

1
2
3
4
5
6
root@7c1a2201d46a:~# ps auxw
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 65504 6316 pts/0 Ss+ 07:11 0:00 /usr/sbin/sshd -D
root 690 0.0 0.0 15800 952 ? S 15:00 0:00 /usr/bin/rsync --no-detach --daemon --config /etc/rsyncd.conf
root 695 0.0 0.0 39100 3328 pts/2 R+ 15:01 0:00 ps auxw
root@7c1a2201d46a:~#

查看某个服务占用的端口

两种方式

  1. 使用 netstat 命令

    1
    2
    3
    root@itsself:~# netstat -naptln | grep redis
    tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 428455/redis-server
    tcp6 0 0 ::1:6379 :::* LISTEN 428455/redis-server
  2. 使用 pslsof 命令

    1
    2
    3
    4
    5
    6
    7
    root@itsself:~# ps aux | grep redis
    redis 428455 0.0 0.1 50376 7452 ? Ssl 10:13 0:09 /usr/local/bin/redis-server 0.0.0.0:6379
    root 431221 0.0 0.0 9032 716 pts/0 S+ 14:09 0:00 grep --color=auto redis

    root@itsself:~# lsof -i -P -n | grep 428455
    redis-ser 428455 redis 6u IPv4 5004741 0t0 TCP *:6379 (LISTEN)
    redis-ser 428455 redis 7u IPv6 5004742 0t0 TCP [::1]:6379 (LISTEN)

查看端口被哪个服务占用


查看所有在用端口

  • a

    1
    2
    3
    4
    5
    6
    $ lsof -i -P -n

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    systemd-n 427 systemd-network 17u IPv4 16092 0t0 UDP 172.18.172.236:68
    systemd-r 448 systemd-resolve 12u IPv4 17111 0t0 UDP 127.0.0.53:53
    systemd-r 448 systemd-resolve 13u IPv4 17112 0t0 TCP 127.0.0.53:53 (LISTEN)

查看建立链接的服务

  • ss 命令

    1
    2
    3
    4
    $ ss -tonp state established
    Recv-Q Send-Q Local Address:Port Peer Address:Port Process
    0 0 127.0.0.1:5001 127.0.0.1:34136 users:(("v2ray",pid=914888,fd=18)) timer:(keepalive,10sec,0)
    0 0 172.18.172.236:6301 113.89.32.25:58487 users:(("nginx",pid=1414877,fd=80))
  • 或者 netstat 命令

    1
    2
    3
    4
    5
    6
    7
    $ netstat -tonpnetstat -tonp | grep ESTABLISHED

    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name Timer
    root@itssz:~# netstat -tonp | grep ESTABLISHED
    tcp 0 0 127.0.0.1:5001 127.0.0.1:42630 ESTABLISHED 914888/v2ray keepalive (13.17/0/0)
    tcp 0 0 172.18.172.236:443 183.14.28.120:11701 ESTABLISHED 1414878/nginx: work off (0.00/0/0)

rsync

  • 服务器之间传输文件好用, 可以传输文件或文件夹

    1
    rsync -avzP ./aaa.test root@aaa.bbb.cn:~/aaa.test
  • -a:归档模式(archive mode)。这是一个组合选项,相当于 -rlptgoD。它会递归地传输目录,并保持文件的属性,包括权限、时间戳、符号链接等。

    • -r:递归传输目录。
    • -l:保持符号链接。
    • -p:保持文件权限。
    • -t:保持文件时间戳。
    • -g:保持文件组。
    • -o:保持文件所有者。
    • -D:保持设备文件和特殊文件。
  • -v:详细模式(verbose)。在传输过程中显示详细信息。

  • -z:压缩文件数据(compress)。在传输时对文件数据进行压缩,以减少传输的数据量。

  • -P:这个选项实际上是两个选项的组合:

    • --partial:保留部分传输的文件,以便下次可以从中断的地方继续传输。
    • --progress:显示传输进度信息。

nslookup - 查看域名 cname 链

  • nslookup 命令

    1
    2
    3
    4
    5
    6
    7
    8
    $ nslookup aaa.bbb.cn
    服务器: public1.114dns.com
    Address: 114.114.114.114

    非权威应答:
    名称: ccc.eee.cn
    Address: 1.2.3.4
    Aliases: aaa.bbb.cn

df - 查看硬盘使用情况

  • 命令

    1
    2
    3
    4
    5
    6
    7
    # df -h

    Filesystem Size Used Avail Use% Mounted on
    udev 1.9G 0 1.9G 0% /dev
    tmpfs 380M 680K 379M 1% /run
    /dev/vda1 99G 28G 67G 30% /
    tmpfs 1.9G 0 1.9G 0% /dev/shm

telnet

  • 测试某个 tcp 端口是否连通

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ telnet <hostname> <port>

    // 成功输出
    Trying 192.168.1.100...
    Connected to 192.168.1.100.
    Escape character is '^]'.

    // 失败输出
    Trying 192.168.1.100...
    telnet: Unable to connect to remote host: Connection refused
    • <hostname>:目标主机的 IP 地址或域名。
    • <port>:目标服务运行的端口号。
  • 关闭 telnet 会话: 如果 telnet 成功连接到端口,可以按下 Ctrl + ],然后输入 quit 以退出 telnet 会话。


chown 修改文件夹所有权

  • 命令

    1
    $ chown itsuser001:itsuser001 game_rgame_www