每日一个Linux命令

记录工作学习中经常使用的Linux命令。

curl

DESCRIPTION

linux curl是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称Curl为下载工具。

Usage

1.查看网页源码

1
curl harlon.org
curl命令后面直接加网址,就可以看到网页源码,如果需要把这个网页保存下来,可以使用“-o”参数。
1
curl -o [文件名] harlon.org

2.自动跳转

有些网页时自动跳转的,使用“-L”参数,curl会跳转到新的网址。

1
curl -L www.sina.com

上述命令会跳转到www.sina.com.cn。

3.curl发送POST请求

1
curl -X POST -d '[{"headers":{"hadoop":"hadoop", "hadoop2":"hadoop2"}, "body":"hello"}]' http://bigdata1:52020

tar

DESCRIPTION

tar命令可以为Linux的文件和目录创建档案,进行压缩、解压缩、打包、解打包等操作。

Usage

参数

  • -c 建立新的压缩文件
  • -x 从压缩文件中提取文件
  • -z 支持gzip解压文件
  • -j 支持bzip2解压文件
  • -v 显示过程
  • -f 指定压缩文件

tar

解包:

1
tar xvf Filename.tar

打包:

1
tar cvf Filename.tar

.gz

解压:

1
2
gunzip Filename.gz
gzip -d Filename.gz

压缩:

1
gzip Filename

.tar.gz & .tgz

解压:

1
tar zxvf Filename.tar.gz

压缩:

1
tar zcvf Filename.tar.gz Filename

.bz2

解压:

1
2
bzip2 -d Filename.bz2
bunzip2 Filename.bz2

压缩:

1
bzip2 -z Filename

.tar.bz2

解压:

1
tar jxvf Filename.tar.bz2

压缩:

1
tar jcvf Filename.tar.bz2 Filename

.bz

解压:

1
2
bzip2 -d Filename.bz
bunzip2 Filename.bz

压缩:未知

.tar.gz

解压:

1
tar jxvf Filename.tar.bz

压缩:未知

.zip

解压:

1
unzip Filename.zip

压缩:

1
zip Filename.zip Filename


grep

DESCRIPTION

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并按照匹配的行打印出来。

Usage

参数

  • -c 只输出匹配行的计数
  • -i 不区分大小写
  • -h 查询多文件时不显示文件名
  • -l 查询多文件时只输出包含匹配字符的文件名
  • -n 显示匹配行及行号
  • -s 不显示不存在或无匹配文本的错误信息
  • -v 显示不包含匹配文本的所有行
  • -f 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式
  • -o 仅输出匹配部分
  • -E 将样式为延伸的普通表示法来使用
  • -w 匹配一行,匹配行首或者单词

正则表达式

  • \ 忽略正则表达式中特殊字符的原有含义
  • ^ 匹配正则表达式的开始行
  • $ 匹配正则表达式的结束行
  • \< 从匹配正则表达式的行开始
  • > 到匹配正则表达式的行结束
  • [] 单个字符,如[A]即A符合要求
  • [ - ] 范围,如[A-Z],即A、B、C一直到Z都符合要求
  • . 匹配一个非换行符的字符
  • * 匹配零个或多个字符
  • .* 匹配任何字符
  • x{m\} 重复字符x,m次,如:’o{5}‘匹配包含5个o的行
  • x{m,\} #重复字符x,至少m次,如:’o{5,}‘匹配至少有5个o的行
  • x{m,n\} #重复字符x,至少m次,不多于n次,如:’o{5,10}‘匹配5-10个o的行

1.查找指定进程

1
2
3
[root@harlon ~]# ps -ef | grep python
root 755 1 0 Feb28 ? 00:00:59 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 28862 26485 0 21:41 pts/0 00:00:00 grep --color=auto python

2.查找指定进程个数

1
2
[root@harlon ~]# ps -ef | grep -c python
2

3.从文件中读取关键词进行搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@harlon ~]# cat test.txt
hnlinux
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@harlon ~]# cat test2.txt
linux
redhat
[root@harlon ~]# cat test.txt | grep -f test2.txt
hnlinux
ubuntu linux
Redhat
linuxmint

4.从文件中查找关键词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@harlon ~]# cat test.txt
linux
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@harlon ~]# grep linux test.txt
linux
ubuntu linux
linuxmint
[root@harlon ~]# grep -n linux test.txt
1:linux
3:ubuntu linux
6:linuxmint

5.grep不显示本身进程

1
2
3
4
[root@harlon ~]# ps aux | grep ssh | grep -v grep
root 757 0.0 0.2 105996 4116 ? Ss Feb28 0:00 /usr/sbin/sshd -D
root 26450 0.0 0.3 146596 6112 ? Ss 18:57 0:00 sshd: root@pts/0
root 27132 0.0 0.3 146216 5652 ? Ss 20:37 0:00 sshd: root@pts/1

6.找出已u开头的行内容

1
2
3
[root@harlon ~]# grep ^u test.txt
ubuntu
ubuntu linux

7.输出非u开头的行内容

1
2
3
4
5
[root@harlon ~]# grep ^[^u] test.txt
linux
redhat
Redhat
linuxmint

8.匹配IP地址

1
2
[root@harlon ~]# grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" /etc/hosts
127.0.0.1 localhost

9.包含un或者nu

1
2
3
4
5
[root@harlon ~]# grep -E "un|nu" test.txt
linux
ubuntu
ubuntu linux
linuxmint

ps

DESCRIPTION

linux中ps命令是process start的缩写,ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。

Usage

参数

  • -a  显示所有终端机下执行的程序,除了阶段作业领导者之外
  • a  显示现行终端机下的所有程序,包括其他用户的程序
  • -A  显示所有程序。
  • -c  显示CLS和PRI栏位。
  • c  列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
  • -C <指令名称>  指定执行指令的名称,并列出该指令的程序的状况。
  • -d  显示所有程序,但不包括阶段作业领导者的程序。
  • -e  此参数的效果和指定”A”参数相同。
  • e  列出程序时,显示每个程序所使用的环境变量。
  • -f  显示UID,PPIP,C与STIME栏位。
  • \f  用ASCII字符显示树状结构,表达程序间的相互关系。
  • -g<群组名称>  此参数的效果和指定”-G”参数相同,当亦能使用阶段作业领导者的名称来指定。
  • g  显示现行终端机下的所有程序,包括群组领导者的程序。
  • -G <群组识别码>  列出属于该群组的程序的状况,也可使用群组名称来指定。
  • h  不显示标题列。
  • -H  显示树状结构,表示程序间的相互关系。
  • -j或j  采用工作控制的格式显示程序状况。
  • -l或l  采用详细的格式来显示程序状况。
  • L  列出栏位的相关信息。
  • -m或m  显示所有的执行绪。
  • n  以数字来表示USER和WCHAN栏位。
  • -N  显示所有的程序,除了执行ps指令终端机下的程序之外。
  • -p <程序识别码>  指定程序识别码,并列出该程序的状况。
  • p <程序识别码>  此参数的效果和指定”-p”参数相同,只在列表格式方面稍有差异。
  • r  只列出现行终端机正在执行中的程序。
  • -s <阶段作业>  指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
  • s  采用程序信号的格式显示程序状况。
  • S  列出程序时,包括已中断的子程序资料。
  • -t <终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
  • t <终端机编号>  此参数的效果和指定”-t”参数相同,只在列表格式方面稍有差异。
  • -T  显示现行终端机下的所有程序。
  • -u <用户识别码>  此参数的效果和指定”-U”参数相同。
  • u  以用户为主的格式来显示程序状况。
  • -U <用户识别码>  列出属于该用户的程序的状况,也可使用用户名称来指定。
  • U <用户名称>  列出属于该用户的程序的状况。
  • v  采用虚拟内存的格式显示程序状况。
  • -V或V  显示版本信息。
  • -w或w  采用宽阔的格式来显示程序状况。
  • x  显示所有程序,不以终端机来区分。
  • X  采用旧式的Linux i386登陆格式显示程序状况。
  • -y  配合参数”-l”使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。
  • -<程序识别码>  此参数的效果和指定”p”参数相同。
  • --cols <每列字符数>  设置每列的最大字符数。
  • --columns <每列字符数>  此参数的效果和指定”–cols”参数相同。
  • --cumulative  此参数的效果和指定”S”参数相同。
  • --deselect  此参数的效果和指定”-N”参数相同。
  • --forest  此参数的效果和指定”f”参数相同。
  • --headers  重复显示标题列。
  • --help  在线帮助。
  • --info  显示排错信息。
  • --lines <显示列数>  设置显示画面的列数。
  • --no-headers  此参数的效果和指定”h”参数相同,只在列表格式方面稍有差异。
  • --group <群组名称>  此参数的效果和指定”-G”参数相同。
  • --Group <群组识别码>  此参数的效果和指定”-G”参数相同。
  • --pid <程序识别码>  此参数的效果和指定”-p”参数相同。
  • --rows <显示列数>  此参数的效果和指定”–lines”参数相同。
  • --sid <阶段作业>  此参数的效果和指定”-s”参数相同。
  • --tty <终端机编号>  此参数的效果和指定”-t”参数相同。
  • --user <用户名称>  此参数的效果和指定”-U”参数相同。
  • --User <用户识别码>  此参数的效果和指定”-U”参数相同。
  • --version  此参数的效果和指定”-V”参数相同。
  • --widty <每列字符数>  此参数的效果和指定”-cols”参数相同。

    输出格式

    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

  • USER:进程拥有者

  • PID:pid
  • %CPU:占用的 CPU 百分比
  • %MEM:占用的内存百分比
  • VSZ :占用虚拟内存量
  • RSS :该 process 占用的固定的内存量
  • TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序
  • STAT:该程序目前的状态,主要的状态有:
    • R :该程序目前正在运作,或者是可被运作
    • S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号 (signal) 唤醒。
    • T :该程序目前正在侦测或者是停止了
    • Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
  • START:该 process 被触发启动的时间
  • TIME :该 process 实际使用 CPU 运作的时间
  • COMMAND:该程序的实际指令为何

1.列出所有进程信息

1
2
3
4
5
6
7
8
9
10
11
12
[root@harlon ~]# ps -A
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:08 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
6 ? 00:00:00 kworker/u2:0
7 ? 00:00:00 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:00:55 rcu_sched
10 ? 00:00:02 watchdog/0
...

2.显示指定用户信息

1
2
3
4
5
6
7
8
9
10
11
12
[root@harlon ~]# ps -u root
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:08 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
6 ? 00:00:00 kworker/u2:0
7 ? 00:00:00 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:00:55 rcu_sched
10 ? 00:00:02 watchdog/0
...

3.显示所有进程,连同命令行

1
2
3
4
5
6
7
8
9
10
11
12
[root@harlon ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Feb28 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 Feb28 ? 00:00:00 [kthreadd]
root 3 2 0 Feb28 ? 00:00:08 [ksoftirqd/0]
root 5 2 0 Feb28 ? 00:00:00 [kworker/0:0H]
root 6 2 0 Feb28 ? 00:00:00 [kworker/u2:0]
root 7 2 0 Feb28 ? 00:00:00 [migration/0]
root 8 2 0 Feb28 ? 00:00:00 [rcu_bh]
root 9 2 0 Feb28 ? 00:00:55 [rcu_sched]
root 10 2 0 Feb28 ? 00:00:02 [watchdog/0]
...

4.ps 与grep 组合使用,查找特定进程

1
2
3
4
[root@harlon ~]# ps -ef | grep sshd
root 2088 1 0 Feb28 ? 00:00:00 /usr/sbin/sshd -D
root 29855 2088 0 21:38 ? 00:00:00 sshd: root@pts/0
root 30254 29857 0 23:02 pts/0 00:00:00 grep --color=auto sshd

5.将与这次登入的 PID 与相关信息列示出来

1
2
3
4
5
6
7
[root@harlon ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 29857 29855 0 80 0 - 28845 wait pts/0 00:00:00 bash
0 S 0 30023 1 0 80 0 - 341798 futex_ pts/0 00:00:07 java
0 S 0 30104 1 0 80 0 - 270795 futex_ pts/0 00:00:12 java
0 S 0 30105 1 0 80 0 - 236115 futex_ pts/0 00:00:05 java
0 R 0 30255 29857 0 80 0 - 37232 - pts/0 00:00:00 ps

6.列出目前所有的正在内存中的程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@harlon ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 43208 3544 ? Ss Feb28 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S Feb28 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Feb28 0:08 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Feb28 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S Feb28 0:00 [kworker/u2:0]
root 7 0.0 0.0 0 0 ? S Feb28 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S Feb28 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R Feb28 0:55 [rcu_sched]
root 10 0.0 0.0 0 0 ? S Feb28 0:02 [watchdog/0]
root 12 0.0 0.0 0 0 ? S Feb28 0:00 [kdevtmpfs]
root 13 0.0 0.0 0 0 ? S< Feb28 0:00 [netns]
root 14 0.0 0.0 0 0 ? S Feb28 0:00 [khungtaskd]
root 15 0.0 0.0 0 0 ? S< Feb28 0:00 [writeback]
...

tcpdump

arp