linux常用命令vm,Linux 常用命令(三)

Linux 常用命令(三)

Linux系统中进程管理

常看当前客户端的命令

ps

如果只是看和自己的bash有关的进程:ps或者更详细的ps -l;

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 3806 3802 0 80 0 - 28862 do_wai pts/0 00:00:00 bash

0 R 0 3822 3806 0 80 0 - 38312 - pts/0 00:00:00 ps

参数

参数含义

S

S代表这个进程的状态:

R: 该进程正在运行;

S:该进程正在睡眠,可悲唤醒。

D:不可被唤醒;

T:停止状态(stop);

Z:僵尸进程。

F

若4,代表进程权限为root

若0,代表此进程仅能fork

UID

用户ID

PID

进程编号

PPID

父进程编号

C

代表CPU使用率

PRI/NI

Priority/Nice的缩写,代表此进程被CPU所执行的优先顺序

ADDR/SZ/WCHAN

都与内存相关。

ADDR是kernel function,如果running,就会显示。

SZ:此进程用掉了多少内存。

WCHAN:进程等待的内核时间名,-表示正在工作中。

TTY

登入终端的位置

TIME

使用掉CPU时间

CMD

进程名称

【注意】:

进程(Process)是计算机中的程序关于

某数据集合上的一次运行活动,是系统进行资源分配和

调度的基本单位,是操作系统结构的基础

ps语法:

ps [options]

[options]选项

选项

说明

ax

列出终端相关的,如果想列出所有进程需要配合使用

u

显示面向用户的格式,通常配合ax和grep使用

f

显示进程树,显示效果不佳,不建议使用

o

指定显示列

-sort

USER:用户

PID:进程id

%CPU:cpu占用率

%MEM:内存占用率

VSZ:虚拟内存大小

RSS:真实内存大小

TTY:终端

STAT:状态

START:开始时间

TIME:占用cpu时间

COMMAND:命令

PRI:优先级

RTPRIO:实时优先级

PSR:当前进程对应的处理器

NI:进程的nice值

ps ao user,pid,ppid

USER PID PPID

root 578 1

root 3806 3802

root 3836 3806

ps查看的命令都是这个瞬时状态的快照。

用的最多的是ps -aux | grep命令。

pstree

如果无法直接使用,需要使用下面的命令进行安装。

yum install psmisc -y

命令语法

pstree [options]

选项

说明

u

指定用户

p

显示进程的pid

h

高亮显示当前的进程及其祖先

systemd(1)─┬─NetworkManager(618)─┬─{NetworkManager}(633)

│ └─{NetworkManager}(638)

├─VGAuthService(548)

├─agetty(578)

├─auditd(441)───{auditd}(442)

├─chronyd(558,chrony)

├─crond(574)

├─dbus-daemon(551,dbus)───{dbus-daemon}(563)

├─firewalld(583)───{firewalld}(770)

├─master(1089)─┬─pickup(3801,postfix)

│ └─qmgr(1105,postfix)

├─polkitd(547,polkitd)─┬─{polkitd}(564)

│ ├─{polkitd}(566)

│ ├─{polkitd}(567)

│ ├─{polkitd}(576)

│ ├─{polkitd}(579)

│ └─{polkitd}(580)

├─rsyslogd(952)─┬─{rsyslogd}(1198)

│ └─{rsyslogd}(1201)

├─sshd(948)───sshd(3802)───bash(3806)───pstree(3864)

├─systemd-journal(379)

├─systemd-logind(546)

├─systemd-udevd(411)

├─tuned(950)─┬─{tuned}(1191)

│ ├─{tuned}(1192)

│ ├─{tuned}(1194)

│ └─{tuned}(1195)

└─vmtoolsd(549)───{vmtoolsd}(586)

进程状态

进程状态

说明

运行R(Running)

正在运行或在运行队列中等待

S(Sleep)

休眠中, 受阻, 在等待某个条件的形成或接受到信号

D不可唤醒

收到信号不唤醒和不可运行, 进程必须等待直到有中断发生

Z(Zombie)僵死

进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放

T停止

进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行

操控进程

进程后台相关操作

可以在命令后面添加&符号,将进程放置后台运行。

ctrl+z类似在windows中的窗口最小化——退出前台

让某个进程进入后台执行:命令 &;

kill命令

使用快捷键ctrl+c中断进程。但是对于一个需要终止其执行的后台进程就只能使用kill命令。

kill语法

kill [-信号] [PID]

# 或者下面的形式

kill [-信号] %[任务编号]

[-信号]通过向进程发送指定的信号来kill进程。

%[任务编号]可以通过jobs命令来查看。

kill命令常用信号:

选项

说明

(1)SIGHUP

重启程序

(2)SIGINT

SIGINT中止正在运行的进程;相当于Ctrl+c

(9)SIGKILL

杀死正在运行的进程

(15) SIGTERM

终止正在运行的进程,但让其正常运行完

(19) SIGSTOP 相当于Ctrl+z暂停

如:kill -9 pid,可以使用kill -l查看信号

## 查看信号量

$ 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

jobs工作管理

选项

说明

l

列出,jobnumber和PID

r

仅列出正在后台运行的工作

s

请列出后台暂停(stop)的工作

比如当前正在执行vim a.txt编辑操作时,需要操作其他命令,就可以使用ctrl+z快捷键,将当前vim a.txt任务转至后台挂起。通过jobs命令则可以查看当前后台挂起的任务。如下

## 查看后台任务

$ jobs -l

[1]+ 6694 停止 vim a.txt

[1]+在上面的面板中代表的是任务编号;

6694则代表的是PID(进程编号)

工作管理其他操作,如下

选项

说明

fg

转前台执行fg %[jobs number-任务编号]

bg

转后台执行

ctrl+z

挂起当前任务

ctrl+c

结束当前任务

如,将上面的vim a.txt任务转前台:fg %1即可,则又可以进入编辑状态。

Linux 管道

此处所介绍的管道仅为皮毛,作为linux入门操作介绍。在介绍管道之前需要简单介绍下命令执行顺序控制。

命令执行控制

通常情况下,我们在会话或者终端一般只会一条一条命令去执行。如果需要多条命令按照顺序执行命令,则需要使用到;分隔符号。

比如下面两条命令:

$ cat -n test.log ; find ./ -name "*.txt"

1 12

./jdk-8u251-linux-x64/jdk1.8.0_251/jre/THIRDPARTYLICENSEREADME.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/jre/THIRDPARTYLICENSEREADME-JAVAFX.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/jre/lib/jvm.hprof.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/jre/lib/amd64/server/Xusage.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/THIRDPARTYLICENSEREADME.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/THIRDPARTYLICENSEREADME-JAVAFX.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/lib/missioncontrol/THIRDPARTYLICENSEREADME.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/lib/missioncontrol/features/org.eclipse.ecf.filetransfer.feature_3.9.0.v20140827-1444/asl-v20.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/lib/missioncontrol/features/org.eclipse.ecf.filetransfer.httpclient4.ssl.feature_1.0.0.v20140827-1444/asl-v20.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/lib/missioncontrol/features/org.eclipse.ecf.filetransfer.httpclient4.feature_3.9.1.v20140827-1444/asl-v20.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/lib/visualvm/platform/VERSION.txt

./jdk-8u251-linux-x64/jdk1.8.0_251/lib/visualvm/profiler/VERSION.txt

cat -n test.log查看了test.log中的内容,find ./ -name "*.txt"则查找了当前目录中有txt后缀的文件。通过“;”分号将两个命令分别执行了。但是结果两个结果却不相互影响。这就是简单的命令执行顺序控制。

从上面的示例当然并不能满足实际的生产需要或者运维需要,如果要前一条命令的执行结果能够影响到后面一条命令执行,那么就有两种方式可以做到:

通过命令执行控制,又可分为:

有条件的执行多条命令;

顺序执行多条命令,顺序控制就是上面示例所展示形式。这种适用于两个结果互不影响的场景下使用。

通过管道(将在下面介绍);

那么关于“有条件的执行多条命令”,又是怎么一种情况?下面将通过三条命令来窥探如何有条件的运行多条命令。

此处所展示的是一台已经安装了git但是并未安装jdk的linux服务器。

$ which java && java --version || echo "未安装java"

/usr/bin/which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

未安装java

$ whereis git && git --help || echo "未安装git"

git: /usr/bin/git /usr/share/man/man1/git.1.gz

用法:git [--version] [--help] [-c name=value]

[--exec-path[=]] [--html-path] [--man-path] [--info-path]

[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]

[--git-dir=] [--work-tree=] [--namespace=]

[]

最常用的 git 命令有:

add 添加文件内容至索引

bisect 通过二分查找定位引入 bug 的变更

branch 列出、创建或删除分支

checkout 检出一个分支或路径到工作区

clone 克隆一个版本库到一个新目录

commit 记录变更到版本库

diff 显示提交之间、提交和工作区之间等的差异

fetch 从另外一个版本库下载对象和引用

grep 输出和模式匹配的行

init 创建一个空的 Git 版本库或重新初始化一个已存在的版本库

log 显示提交日志

merge 合并两个或更多开发历史

mv 移动或重命名一个文件、目录或符号链接

pull 获取并合并另外的版本库或一个本地分支

push 更新远程引用和相关的对象

rebase 本地提交转移至更新后的上游分支中

reset 重置当前HEAD到指定状态

rm 从工作区和索引中删除文件

show 显示各种类型的对象

status 显示工作区状态

tag 创建、列出、删除或校验一个GPG签名的 tag 对象

命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些指南。参见

'git help ' 或 'git help ' 来查看给定的子命令帮助或指南。

$ whereis java && java --version || echo "未安装java"

java:bash: java: 未找到命令

未安装java

管道

所谓管道能重定向一个进程的标准输出、输入和错误到另一个进程,以便于进一步处理。

管道命令会自动忽略错误的标准输入。

管道命令后面接的命令必须能够接收标准输入,不能接收的命令包括ls、cp、mv等。

常见的管道命令有:grep、less、more、head、tail......

管道分为两种:

未命名管道,该管道生命周期很短,在成功执行完成后,该管道就会被删除且不能被另一个会话访问或者使用。常见的诸如:find / -name "*.txt" | grep test;即"|"创建的管道。

命名管道,该管道生命周期长,在成功创建后,系统启动后,可被多个会话使用(除非被删除)。它是一个遵循 FIFO(先进先出)机制的特殊文件。它可以像普通文件一样使用。也就是,你可以写入,从中读取,然后打开或关闭它。

未命名管道

常见的使用方式:

Command 1 | Command 2 | Command 3

将Command 1的执行标准输出结果作为Command 2的标准输入项,Command 2的标准输出作为Command 3的标准输入。例如下面这条命令;

$ find ./ -name "*.txt" -exec ls -l {} \; | grep -E "VERSION"

-rw-r--r--. 1 10143 10143 42 1月 15 2017 ./jdk-8u251-linux-x64/jdk1.8.0_251/lib/visualvm/platform/VERSION.txt

-rw-r--r--. 1 10143 10143 42 1月 15 2017 ./jdk-8u251-linux-x64/jdk1.8.0_251/lib/visualvm/profiler/VERSION.txt

首先$ find ./ -name "*.txt" -exec ls -l {} \;命令找到符合后缀名为".txt"文件,并使用-exex选项将find的结果再使用ls -l命令列举出来;如下所示,此时结果可能并不是想要的,再通过管道将标准输出结果在进行过滤,找到包含“VERSION”的文件。

$ find ./ -name "*.txt" -exec ls -l {} \;

# 执行结果如下

-r--r--r--. 1 10143 10143 169571 3月 12 14:33 ./jdk-8u251-linux-x64/jdk1.8.0_251/jre/THIRDPARTYLICENSEREADME.txt

-rw-r--r--. 1 10143 10143 117365 3月 12 11:25 ./jdk-8u251-linux-x64/jdk1.8.0_251/jre/THIRDPARTYLICENSEREADME-JAVAFX.txt

-rw-r--r--. 1 10143 10143 4226 3月 12 14:33 ./jdk-8u251-linux-x64/jdk1.8.0_251/jre/lib/jvm.hprof.txt

-rw-r--r--. 1 10143 10143 1423 3月 12 14:33 ./jdk-8u251-linux-x64/jdk1.8.0_251/jre/lib/amd64/server/Xusage.txt

-r--r--r--. 1 10143 10143 169571 3月 12 14:33 ./jdk-8u251-linux-x64/jdk1.8.0_251/THIRDPARTYLICENSEREADME.txt

-rw-r--r--. 1 10143 10143 117365 3月 12 11:25 ./jdk-8u251-linux-x64/jdk1.8.0_251/THIRDPARTYLICENSEREADME-JAVAFX.txt

-rw-r--r--. 1 10143 10143 30275 12月 8 2017 ./jdk-8u251-linux-x64/jdk1.8.0_251/lib/missioncontrol/THIRDPARTYLICENSEREADME.txt

-rw-r--r--. 1 10143 10143 11358 12月 8 2017 ./jdk-8u251-linux-x64/jdk1.8.0_251/lib/missioncontrol/features/org.eclipse.ecf.filetransfer.feature_3.9.0.v20140827-1444/asl-v20.txt

-rw-r--r--. 1 10143 10143 11358 12月 8 2017 ./jdk-8u251-linux-x64/jdk1.8.0_251/lib/missioncontrol/features/org.eclipse.ecf.filetransfer.httpclient4.ssl.feature_1.0.0.v20140827-1444/asl-v20.txt

-rw-r--r--. 1 10143 10143 11358 12月 8 2017 ./jdk-8u251-linux-x64/jdk1.8.0_251/lib/missioncontrol/features/org.eclipse.ecf.filetransfer.httpclient4.feature_3.9.1.v20140827-1444/asl-v20.txt

-rw-r--r--. 1 10143 10143 42 1月 15 2017 ./jdk-8u251-linux-x64/jdk1.8.0_251/lib/visualvm/platform/VERSION.txt

-rw-r--r--. 1 10143 10143 42 1月 15 2017 ./jdk-8u251-linux-x64/jdk1.8.0_251/lib/visualvm/profiler/VERSION.txt

以上是比较常用的操作,通过管道将多个命令结合使用。

命名管道

下面仅简单介绍命名管道,对命名管道感兴趣可点击《Linux进程间通信——使用命名管道》这篇博客。我觉得写的还不错。该作者还有一篇是《Linux进程间通信——使用匿名管道》。有兴趣可升华下相关内容。

参考博客

引用与《介绍 Linux 中的管道和命名管道》,作者: Archit Modi,译者: LCTT geekpi。 ↩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值