Linux -- 部分命令

  • ls -- 文件按时间排序
  • sort 对文档中的内容进行排序
  • ps
  • 标准输入
  • file 命令
  • rm -- 根据 inode 号删除文件
  • cut
  • xargs

 

ls -- 文件按时间排序


 

ls -alt                    // 按修改时间排序
ls --sort=time -la        // 等价于 ls -alt
ls -alc                    // 按创建时间排序
ls -alu                    // 按访问时间排序

# 按以上标准逆向排序 -r
ls -alrt
ls --sort=time -lra
ls -alrc
ls -alru

 

 

sort 对文档中的内容进行排序


sort -k3 -t: -n /etc/passwd

// -k3        对该文档的第三个字段进行排序;
// -t:        使用 : 作为分隔符;
// -n:        数值排序, 使用第三段的整个数字进行排序;

 

 

ps


 

ps命令讲解

''' Linux中的 ps 命令是 <Process Status> 的缩写, ps命令用来列出系统中当前运行的哪些进程; ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程, 如果想要动态的显示进程信息,可以使用 top 命令; 要对进程进行监测和控制, 首先必须要了解当前进程的情况, 也就是需要查看当前的进程, 而 ps 命令就是最基本同时也是非常强大的进程查看命令; 使用该命令可以确定有哪些进程正在运行和运行状态 , 进程是否结束, 进程有没有僵死 , 哪些进程占用了过多的资源等等, 总之大部分信息都是可以通过该命令得到.
ps 为我们提供了进程的一次性的查看, 它所提供的结果并不是动态连续的;
'''

ps命令常用用法(方便查看系统进程)

1ps a 显示现行终端机下的所有程序,包括其他用户的程序。

2ps -A 显示所有进程。

3ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

4ps -e 此参数的效果和指定"A"参数相同。

5ps e 列出程序时,显示每个程序所使用的环境变量。

6ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

7ps -H 显示树状结构,表示程序间的相互关系。

8ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

9ps s 采用程序信号的格式显示程序状况。

10ps S 列出程序时,包括已中断的子程序资料。

11ps -t<终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。

12ps -u root  显示root用户信息

13ps x  显示所有程序,不以终端机来区分。

最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。

############################################################

实例3:显示所有进程信息,连同命令行

      命令:ps -ef

实例4:ps 与grep 常用组合用法,查找特定进程

      命令:ps -ef|grep ssh

实例5:将目前属于您自己这次登入的 PID 与相关信息列示出来

      命令:ps -l

    说明:

    各相关信息的意义:

    F 代表这个程序的旗标 (flag), 4 代表使用者为 super user

    S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍

    UID 程序被该 UID 所拥有

    PID 就是这个程序的 ID !

    PPID 则是其上级父程序的ID

    C CPU 使用的资源百分比

    PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍

    NI 这个是 Nice 值,在下一小节我们会持续介绍

    ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"

    SZ 使用掉的内存大小

    WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作

    TTY 登入者的终端机位置

    TIME 使用掉的 CPU 时间。

    CMD 所下达的指令为何

    在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有三个 PID。

实例6:列出目前所有的正在内存当中的程序

    命令:ps aux

说明:

USER:该 process 属于那个使用者账号的

PID :该 process 的号码

%CPU:该 process 使用掉的 CPU 资源百分比

%MEM:该 process 所占用的物理内存百分比

VSZ :该 process 使用掉的虚拟内存量 (Kbytes)

RSS :该 process 占用的固定的内存量 (Kbytes)

TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

STAT:该程序目前的状态,主要的状态有

R :该程序目前正在运作,或者是可被运作

S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。

T :该程序目前正在侦测或者是停止了

Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态

START:该 process 被触发启动的时间

TIME :该 process 实际使用 CPU 运作的时间

COMMAND:该程序的实际指令

实例7:列出类似程序树的程序显示

命令:ps -axjf

实例8:找出与 cron 与 syslog 这两个服务有关的 PID 号码

命令:ps aux | egrep '(cron|syslog)'

 

3. 输出指定的字段

命令:ps -o pid,ppid,pgrp,session,tpgid,comm

 

注意:"ps aux""ps -aux"不相同。例如"-u"用来显示该用户的进程。但是"u"则是显示详细的信息。

BSD风格:在BSD风格的语法选项前不带连字符。例如: ps aux

UNIX/LINUX的风格:在linux风格的语法选项前面有一个破折号.例如: ps -ef

混合使用两种Linux系统上的语法风格是好事儿。例如“ps ax -f”。

1、显示所有进程:

$ ps ax

$ ps -ef

"u"或者"-f"参数来显示所有进程的详细信息

$ ps aux

$ ps -ef -f

注意:为什么用户列不显示我的用户名,但显示其他用户,如root、www等,对于所有的用户名(包括你)如果长度大于8个字符,然后ps将只显示UID,而不是用户名。

2、根据用户显示进程:

由进程的所属用户使用“-u”选项后跟用户名来显示。多个用户名可以提供以逗号分隔。

$ ps -f -u www-data

3、通过名字和进程ID显示进程:

通过名字或命令搜索进程,使用“-C”选项后面加搜索词。

$ ps -C apache2

4、根据CPU或者内存进行排序:

“–sort”选项由逗号分隔的多个字段可以用指定。此外,该字段可以带有前缀“-”或“”符号,表示降序或升序分别排序。通过进程列表进行排序有很多参数,你可以检查手册页的完整列表。

$ ps aux --sort=-pcpu,+pmem

$ ps aux --sort=-pcpu | head -5

5、用树的风格显示进程的层次关系:

许多进程实际上是一些父进程分的分支,知道这父子进程关系往往是有用的。在'–forest'选项将建立ASCII艺术风格层次的树视图。

下面的命令将搜索进程名字为Apache2,形成一个树结构来显示详细的信息。

$ ps -f --forest -C apache2

6、显示一个父进程的子进程:

这里有一个例子显示所有apache进程的分支

$ ps -o pid,uname,comm -C apache2

7、显示一个进程的线程:

“-L”选项将显示进程的线程。它可以用来显示特定进程的所有线程或者所有进程。

下面的命令将显示所有id为3150的进程所拥有的线程。

$ ps -p 3150 -L

8、改变要显示的列:

ps命令可以配置为只显示选中的列表。为了显示完整列表可以查看手册。

下面的命令只显示PID,用户名,CPU,内存和命令的列。

$ ps -e -o pid,uname,pcpu,pmem,comm

可以重命名列标签,相当的灵活。

$ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm

9、显示进程运行的时间:

表示进程的运行时间。对于运行的时间,列默认情况下是不显示的,可以使用“-O”选项查看。

$ ps -e -o pid,comm,etime

10、把ps命令变成一个实时查看器:

像往常一样,watch命令可以用来实时捕捉ps显示进程。简单的例子如下:

$ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'

 

 

ps 参数

===================================ps 的参数说明=============================

l 长格式输出;

u 按用户名和启动时间的顺序来显示进程;

j 用任务格式来显示进程;

f 用树形格式来显示进程;

a 显示所有用户的所有进程(包括其它用户)。显示所有进程

-a 显示同一终端下的所有程序

x 显示无控制终端的进程;

r 显示运行中的进程;

ww 避免详细参数被截断;

-A 列出所有的进程

-w 显示加宽可以显示较多的资讯

-au 显示较详细的资讯

-aux 显示所有包含其他使用者的进程

-e 显示所有进程,环境变量

-f 全格式

-h 不显示标题

-l 长格式

-w 宽输出

a   显示终端上地所有进程,包括其他用户地进程

r   只显示正在运行地进程

x   显示没有控制终端地进程

我们常用的选项是组合是 aux 或 lax,还有参数 f 的应用。

pids 只列出进程标识符,之间运用逗号分隔.该进程列表必须在命令行参数地最后一个选项后面紧接着给出,中间不能插入空格.比如:ps -f1,4,5 显示的是进程ID为1,4,5的进程

下介绍长命令行选项,这些选项都运用“--”开头:

--sort X[+|-] key [,[+|-] key [,…]] 从SORT KEYS段中选一个多字母键.“+”字符是可选地,因为默认地方向就是按数字升序或者词典顺序,“-”字符是逆序排序(即降序).

比如: ps -jax -sort=uid,-ppid,+pid.

--help 显示帮助信息.

--version 显示该命令地版本信息.

在前面地选项说明中提到了排序键,接下来对排序键作进一步说明.需要注意地是排序中运用地值是ps运用地内部值,并非仅用于某些输出格式地伪值.排序键列表见下表.

============排序键列表==========================

c cmd   可执行地简单名称

C cmdline   完整命令行

f flags   长模式标志

g pgrp   进程地组ID

G tpgid   控制tty进程组ID

j cutime   累计用户时间

J cstime   累计系统时间

k utime   用户时间

K stime   系统时间

m min_flt   次要页错误地数量

M maj_flt   重点页错误地数量

n cmin_flt 累计次要页错误

N cmaj_flt 累计重点页错误

o session   对话ID

p pid   进程ID

P ppid   父进程ID

r rss   驻留大小

R resident 驻留页

s size   内存大小(千字节)

S share   共享页地数量

t tty   tty次要设备号

T start_time 进程启动地时间

U uid   UID

u user   用户名

v vsize   总地虚拟内存数量(字节)

y priority 内核调度优先级

 

 

ps aux 或者 lax 输出格式

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

USER        // 进程所有者
PID         // 进程ID
%CPU        // 占用的 CPU 使用率
%MEM        // 占用的内存使用率
VSZ         // 占用的虚拟内存大小
RSS         // 占用的内存大小
TTY         // 终端的次要装置号码(minor device number of tty)
STAT        // 进程状态
START       // 启动进程的时间
TIME        // 进程消耗 CPU 的时间
COMMAND     // 命令的名称和参数

 

 

标准输入


 

// 标注输入,为指定用户创建密码
$ echo 123 |passwd zxjr --stdin

// 对相应的字符串进行加密
$ echo 123 |openssl passwd -1 -stdin
    $1$xPokL2Yn$OlmcFvyqt3/ifxdhHPeJg0

 

 

file 命令


 

命令格式:

  file [-bchikLnNprsvz] [-f namefile] [-F separator] [-m magicfiles] file ...

 

命令功能:

  用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月和年份;

  通过file命令, 辨识文件类型.

 

命令参数:

    -b    列出辨识结果时, 不显示文件名称;
    -c    详细显示指令执行过程,便于排错或分析程序执行的情形;
    -f <文件名>    列出文件中文件名的文件类型;
    -F    使用指定分割符号替换输出文件名后的默认的 ":" 分割符;
    -i    输出mime类型的字符串;
    -L    查看对应软链接对应文件的文件类型;
    -z    尝试去解读压缩文件的内容;
    --help    显示命令在线帮助;
    -version    显示命令版本信息
 
使用示例:
// 查看文件类型
file install.log
    install.log: UTF-8 Unicode text

// 不输出文件名称,只显示文件格式及编码
file -b install.log
    UTF-8 Unicode text

// 输出mime类型的字符串
file -i install.log
    install.log: text/plain; charset=utf-8
    
// 查看文件中的文件名的文件类型
vim test
    /etc/networks
    testing
file -f test
    /etc/networks: ASCII text
    testing:       cannot open 'testing' (No such file or directory)

// 使用指定分割符号代替输出文件名后的默认 ":" 分割符
file -F '--' test
    test-- ASCII text

// 尝试去解读压缩文件的内容
file -z test.gz
    test.gz: ASCII text (gzip compressed data, was "test", from Unix, last modified: Fri Jul  7 13:17:16 2017)

// 查看软链接对应文件的文件类型
file test.txt
    test.txt: symbolic link to `test'

 

rm -- 根据 inode 号删除文件


 

ls -i           // 查找文件或目录的inode号;

// 使用上面查询到的 inode 号进行删除文件;
find ./ -inum 25789760 -exec rm {} \;

 

 

cut


 

命令选项

// cut 命令主要用于截取一行中若干个, 选项:
    * -b    // 根据字节来截取,忽视多字符,比如汉字,可以配合[-n]选项来忽视不完整的多字符;
    * -c    // 根据字符来截取,多字节字符当做一个字符;
    * -d    // 根据字段来截取时,定义分割符,默认是TAB;配合[-f]输出指定字段;
    * -f    // 根据字段来截取时,输出指定的字段;
    * -n    // 截取后忽略不完整的字符,配合 [ -b ]使用;
    * -s    // 根据字段来截取时,忽略不包含分割符的行,配合 [ -d ] 使用.

 

 

字节截取和字符截取

// 使用方法
    * cut -b LIST
    * cut -c LIST
// LIST为要输入的字节位置,可以指定位置也可以指定区间,例如1,3,5表示第一\第三\第五个字节;1,3-5表示第一和第三到第五个字节;
// 区别在于多字节字符的处理上,比如汉字;通过下面例子解析:

[root@bogon ~]# echo "烽火戏诸侯" |cut -b 1-3
烽
[root@bogon ~]# echo "烽火戏诸侯" |cut -b 1-4
烽
[root@bogon ~]# echo "烽火戏诸侯" |cut -b 1-5
烽
[root@bogon ~]# echo "烽火戏诸侯" |cut -b 1-6
烽火
******************************************************************
[root@bogon ~]# echo "烽火戏诸侯" |cut -c 1
烽
[root@bogon ~]# echo "烽火戏诸侯" |cut -c 1,2
烽火
[root@bogon ~]# echo "烽火戏诸侯" |cut -c 1-3
烽火戏
********************************************************************************
// -d参数配置[ -n ]选项忽略不完整的字符
[root@bogon ~]# echo "烽火戏诸侯" |cut -nb 1-7
烽火
[root@bogon ~]# echo "烽火戏诸侯" |cut -nb 1-4

 

 

字段截取

// cut还可以根据字段截取行字符,默认字段分割符为TAB表示,可以使用 [ -d ] 来指定分割符,分割符限定为单字符.特别需要注意的是:多字节字符也是单字符,例如:
// 配合[ -s ] 选项,可以忽略不包含分割符的行,例如某个文件中,里面没有TAB,全是空格
[root@bogon ~]# vim test.txt
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Oct09 ?        00:00:13 init [5]
root         2     1  0 Oct09 ?        00:00:06 [ksoftirqd/0]
root         3     1  0 Oct09 ?        00:00:05 [events/0]
root         4     3  0 Oct09 ?        00:00:00 [khelper]

// 截取方法:
[root@bogon ~]# cat test.txt |cut -d : -f 2
UID        PID  PPID  C STIME TTY          TIME CMD
00
00
00
00
[root@bogon ~]# cut -sd : -f 2 test.txt
00
00
00
00
[root@bogon ~]# echo "烽火戏诸侯"|cut -d 戏 -f 2
诸侯

 

xargs


 

  很多命令不支持管道来传递参数 -- xargs

 

参数:

  • -0 : 当 sdtin 含有特殊字符的时候, 将其当成一般字符;
  • -a <file> : 从文件中读入作为参数;
  • -p : 当每次执行一个 argumer 的时候询问一次用户;
  • -n <num> : 表示命令在执行的时候一次用的argument的个数, 默认是用所有的;
  • -t : 表示先打印命令, 然后再执行
  • -i 或 -I : 一行一行赋值给{}, 可以用 {} 代替;
  • -r : 当 xargs 的输入为空时停止 xargs, 不再去执行了

 

示例:

// -0 参数
echo '\n' |xargs echo
 n
echo '\n' |xargs -0 echo
 \n
 
// -a 参数
xargs -a test echo
 good good study day day up gogogo good gold goood goolld
 
// -e 参数
cat test |xargs -E 'gogogo' echo
 good good study day day up
 
// -p 参数
cat test |xargs -p echo
 echo good good study day day up gogogo good gold goood goolld ?...y
 good good study day day up gogogo good gold goood goolld
 
// -n 参数
cat test |xargs -n1 echo
 good
 good
 study
 day
 day
 up
 gogogo
 good
 gold
 goood
 goolld
 
// -t 参数
cat test |xargs -t echo
 echo good good study day day up gogogo good gold goood goolld 
 good good study day day up gogogo good gold goood goolld
 
// -i 参数
ls |xargs -t -i mv {} {}.back
 mv test test.back
 
// -r 参数
echo "" |xargs -t -r mv

// 使用 xargs 进行操作;
find ./ -type f -name tian
 ./tian
find ./ -type f -name tian |xargs rm -f ;        // 使用 xargs 进行删除;
find ./ -type f -name tian -exec rm -f {} \;     // 使用 -exec 进行删除, 必须使用{} , 及 \; 结尾...

 

posted @ 2019-04-16 15:04  荣荣很乖  阅读(290)  评论(0编辑  收藏  举报