linux命令行解析(一)

1·which命令

作用是在PATH变量指定的路径中搜索可执行文件的所在位置,他一般用来确定系统中是否安装了指定的软件。

命令格式:

which 可执行文件的名称

会返回该程序的路径。

注:shell内建命令不在PATH指定的目录中。

到底什么是命令?

命令可以是下面四种形式之一:

是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。 属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++语言写成的程序, 也可以是由脚本语言写成的程序,比如说 shell,perl,python,ruby,等等。

是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,上面我本地环境中的 cd 命令,就是一个 shell 内部命令。

是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中。 比如上面讲到的 cd 命令,在实验楼环境中就是一个 shell 函数。

是一个命令别名。我们可以定义自己的命令,建立在其它命令之上。

2·whereis 命令

用于定位可执行文件、源代码文件、帮助文件在文件系统中的位置。还具有搜索源代码、指定备用搜索路径和搜索不寻常项的功能。

查找速度很快,因为他根本不是在磁盘中漫无目的的乱找,而是在一个数据库(/var/lib/mlocate)中查询。这个数据库是linux系统自己创建的,包含有本地所有文件的信息,并且每天通过自动执行updatedb命令更新一次。

命令格式:

whereis[选项]文件

常用参数:

- -b   定位可执行文件

- -m   定位帮助文件

- -s   定位源代码文件

-u  搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其他文件

-B| 指定搜索可执行文件的路径

-M| 指定搜索帮助文件的路径

-S|指定搜索源代码文件的路径

3·locate命令

与whereis类似,且他们使用相同的数据库。要想获得更全面的搜索结果,可使用。

locate 命令使用了十分复杂的匹配语法,可以使用特殊字元(如’*’和’?’)来指定需要查找的样本。

命令格式:

locate[选项][搜索字符串]

常用参数:

-q    安静模式,不会显示任何错误讯息

-n    至多显示n个输出

-r    使用正规表达式做寻找的条件

-V    显示版本讯息

EG1:搜索 etc 目录下所有以 sh 开头的文件,可以使用如下命令:locate /etc/sh

EG2: 搜索 etc 目录下文件名包含 lou 的文件,可以使用如下命令: locate /etc/*lou*

4·find命令

作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。

命令格式:

find [选项][搜索路径][表达式]

默认路径是当前目录,默认表达式为-print

表达式可能由下列成分组成:操作符、选项、测试表达式以及动作。

常用参数:

参数 描述

-print
find 命令将匹配的文件输出到标准输出

-exec find 命令对匹配的文件执行该参数所给出的 shell 命令

-name 按照文件名查找文件

-type 查找某一类型的文件

-prune
使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同 时使用-depth 选项,那么-prune 将被 find 命令忽略

-user 按照文件属主来查找文件

-group
按照文件所属的组来查找文件

-mtime -n +n
按照文件的更改时间来查找文件,-n 表示文件更改时间距现在小于 n天,+n 表示文件更改时间距现在大于 n 天,find 命令还有-atime 和 -ctime 选项

EG1:打印当前目录下的文件目录列表 ,可以使用如下命令:find . -print

EG2:打印当前目录下所有以.txt 结尾的文件名 ,可以使用如下命令  find . -name "*.txt" -print  -iname 选项跟-name 选项作用一样,不同在于-iname 会忽略字母大小写。

EG3: 打印当前目录下所有以.txt 或.pdf 结尾的文件名     youwenti  find . \( -name "*.pdf" -or -name "*.txt")\

EG4: 打印当前目录下所有不以.txt 结尾的文件名 ,可以使用如下命令:find . ! -name "*.txt"

下面将介绍如何根据文件类型、权限、所有者及操作符来查找匹配文件。

根据文件类型来查找文件,使用-type 选项,常见 find 文件类型见下表。

文件类型 描述

b     块设备文件

c     字符设备文件

d 目录

f 普通文件

l 符号链接

根据文件权限查找文件,使用-perm 选项。所有者使用-user 选项。

另外,find 命令可以通过逻辑操作符来创建更复杂的逻辑关系,例如 find 命令(一)中的例三就使用了操作符-or。find 命令的逻辑操作符见下表。

操作符 描述

-and 匹配如果操作符两边的测试条件都为真。可以简写为-a。若没有使用操作符,则默认使用-and

-or 匹配若操作符两边任一个测试条件为真。简写:-o

-not 匹配若操作符后边的测试条件为假。简写:!

() 把测试条件和操作符组合起来形成更大的表达式。

EG1:打印当前目录下所有以.txt 结尾的符号链接 ,可以使用如下命令:find . -type l -name "*.txt" -print

EG2: 打印当前目录下所有权限为 777 的 php 文件(web 服务器上的 php 文件一般需要执行权限),可以使用如下命令:find . -type f -name "*.php" -perm 777

EG3: 打印当前目录下 root 用户拥有的所有文件,可以使用如下命令:find . -type f -user root

EG4: 打印当前目录下权限不是 777 和 664 的所有文件,可以使用如下命令:find . -type f \(! -perm 777 -and ! -perm 644 \)

下面将介绍如何使用 find 命令的-exec 选项来实现对查找到的文件执行指定的动作命令。

EG1: 找到当前目录下所有 php 文件,并显示其详细信息,可以使用如下命令:find . -name "*.php" -exec ls -l {} \;

-exec 是 find 命令对找到的文件执行的动作,这个动作就是对找到的文件执行命令,上面的命令就是 ls -l {}。在这里说明一下{}和\;,{}其实它就是一个占位符,在 find 命令的执行过程中会不断地替换成当前找到的文件,相当于”ls -l 找到的文件”。而\;是-exec 的命令结束标记,因为规定-exec 后面的命令必须以;结束,但;在 shell 中有特殊含义,必须要转义,所以写成\;。

5·xargs命令

用管道将一个命令的stdout(标准输出)重定向到另一个命令的stdin(标准输入)。但有些命令只能以命令行参数的形式接收数据,而无法通过stdin接收数据流,在这种情况下,无法通过管道将数据重定向给这些命令。

xargs命令可以从标准输入接收输入,并把输入转换为一个特定的参数列表。

命令格式:

command|xargs [选项][command]

xargs命令应该紧跟在管道操作符之后,因为它以标准输入作为主要的源数据流。

常用参数:

-n  指定每行最大的参数数量

-d  指定分隔符

6·cut命令

将文本按列进行切分的小工具,他可以指定分隔每列的定界符。如果一行数据包含多个字段(多列),现在想要提取其中的一列或多列,就需要cut。

命令格式:

cut[选项][文件名]

常用参数:

参数 描述

-b 以字节为单位进行分割

-c 以字符为单位进行分割

-d 自定义分隔符,默认为制表符

-f 自定义字段

--complement
抽取整个文本行,除了那些由 -c 或 -f 选项指定的文本

常用范例:

例一:取出 student.txt 文件中的第一列和第三列,可以使用如下命令:

cut -f 1,3 -d ‘ ’ student.txt

例三:取出 student.txt 文件中的前三列,可以使用如下命令:

cut -f 1-3 -d ‘ ’ student.txt、

例三:取出 student.txt 文件中的前三列,可以使用如下命令:

cut -f 1-3 -d ‘ ’ student.txt

7·paste命令

功能正好和cut相反,它会添加一个或多个文本列到文件中,而不是从文件中抽取文本咧。它通过读取多个文件,然后把每个文件中的字段整合成单个文本流,输入到标准输出。

命令格式:

paste[选项][文件名]

常用参数:

参数 描述

-s 将每个文件合并成行而不是按行粘贴

-d 自定义分隔符,默认为制表符

常用范例:

例一:将 student.txt 和 telphone.txt 文件中的内容按列拼接,可以使用如下命令:

paste student.txt telphone.txt

例二:将 student.txt 和 telphone.txt 文件中的内容按列拼接,指定分隔符为’:’,可以使用如下命令:

paste student.txt telphone.txt -d ‘:’

8·tr命令

tr命令用来更改字符。我们可以把它看做是一种基于字符的查找和替换操作。换字是一种把字符从一个字母转换为另一个字母的过程。tr从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

tr只能通过stdin(标准输入),而无法通过命令行参数来接收输入。

translate(转换)的缩写。

命令格式:

tr [选项] SET1 SET2

将来自 stdin 的输入字符从 SET1 映射到 SET2,并将其输出写入 stdout(标准输出)。SET1 和 SET2 是字符类或字符集。如果两个字符集的长度不相等,那么 SET2 会不断重复其最后一个字符,直到长度与 SET1 相同。如果 SET2 的长度大于 SET1,那么在 SET2 中超出 SET1 的那部分字符则全部被忽略。

常用参数:

参数 描述

-d 删除匹配 SET1 的内容,并不作替换

常用范例:

例一:将输入的字符大写转换为小写,可以使用如下命令:

echo ‘THIS IS SHIYANLOU!’ | tr ‘A-Z’ ‘a-z’

例二:将输入的字符中的数字删除,可以使用如下命令:

echo ‘THIS 123 IS S1HIY5ANLOU!’ | tr -d ‘0-9’

例三:tr 命令的一个有趣的用法是执行 ROT13 文本编码。ROT13 是一款微不足道的基于一种简易的替换暗码的加密类型。把 ROT13 称为“加密”是大方的,“文本模糊处理”更准确些。有时候它被用来隐藏文本中潜在的攻击内容。这个方法就是简单地把每个字符在字母表中向前移动 13 位。因为移动的位数是可能的 26 个字符的一半,所以对文本再次执行这个算法,就恢复到了它最初的形式。可以使用如下命令:

#加密

echo ‘shiyanlou’ |  tr  ‘a-zA-Z’  ‘n-za-mN-ZA-M’

fuvlnaybh

#解密

echo ‘fuvlnaybh’ | tr  ‘a-zA-Z’  ‘n-za-mN-ZA-M’

shiyanlou

9·sort命令

同文本文件打交道时,总避不开排序,那是因为对于文本处理任务而言,排序可以起到不小的作用。sort命令能够帮助我们队文本文件和stdin进行排序操作。通常,它会结合其他命令来生成所需要的输出。

命令格式:

sort[选项][文件名]

常用参数:

参数 描述

-n 基于字符串的长度来排序,使用此选项允许根据数字值排序,而不是字母值

-k 指定排序关键字

-b 默认情况下,对整行进行排序,从每行的第一个字符开始。这个选项导致 sort 程序忽略每行开头的空格,从第一个非空白字符开始排序

-m 只合并多个输入文件

-r 按相反顺序排序,结果按照降序排列,而不是升序

-t 自定义分隔符,默认为制表符

常用范例:

例一:列出/usr/share/目录下使用空间最多的前 10 个目录文件,可以使用如下命令:

du -s /usr/share/* | sort -nr | head -10

du -s /usr/share/* 命令显示/usr/share/目录下所有文件和目录的磁盘使用空间,目录包含目录下的子目录和文件

例二:ls 命令能显示目录下文件的详细信息,包含空间使用大小,但与 du 命令不同的是,ls 命令不计算目录下的子目录和文件的大小。ls 显示格式如下:

-rwxrwxrwx   1  root   root  542  11 月   29  test.php

现在想要对 ls 命令输出信息中的空间使用大小字段进行排序,可以使用如下命令:

ls -l /usr/bin/ | sort -nr -k 5 | head -10

例三:首先来看下下面的例子: img 由于 11 由 1 开始,比 5 大,所以排在 5 的前面。这时排序可以通过自定义排序字段来排序。使用下面的命令就可以解决。

sort  -k 1,1  -k 2n data.txt

第一个-k 选项指明只对第一个字段排序,1,1 意味着“始于并且结束于第一个字段”。 第二个-k 选项 2n 表示对第二个字段按数值排序。 还有一种格式,如-k 3.4,表示始于第三个字段的第四个字符,按数值排序。

-k 选项的语法格式如下:

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

这个语法格式可以被其中的逗号(“,”)分为两大部分,Start 部分和 End 部分。

先给你灌输一个思想,那就是“如果不设定 End 部分,那么就认为 End 被设定为行尾”。这个概念很重要的,但往往你不会重视它。

Start 部分也由三部分组成,其中的 Modifier 部分就是类似 n 和 r 的选项部分。我们重点说说 Start 部分的 FStart 和 CStart。 FStart.CStart,其中 FStart 就是表示使用的域,而 CStart 则表示在 FStart 域中从第几个字符开始算“排序首字符”。CStart 是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 5 就是省略了 CStart 的例子。

同理,在 End 部分中,你可以设定 FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将 CEnd 设定为 0(零),也是表示结尾到“域尾”。

10·uniq命令

uniq命令经常和sort命令一起使用。uniq从标准输入或单个文件名参数接收数据有序列表,默认情况下,从数据列表中删除任何重复行。

只能用于排过序的数据输入,因此,要么使用管道,要么将排过序的文件作为输入,并总是以这种方式与sort命令介个起来使用

unique的缩写

命令格式:

uniq[选项][文件名]

常用参数:

参数 描述

-c 在每行前加上表示相应行目出现次数的前缀编号

-d 只输出重复的行

-u 只显示唯一的行

-D 显示所有重复的行

-f 比较时跳过前 n 列

-i 在比较的时候不区分大小写

-s 比较时跳过前 n 个字符

-w 对每行第 n 个字符以后的内容不作对照

常用范例:

例一:找出/bin 目录和/usr/bin 目录下所有相同的命令,可以使用如下命令:

ls /bin /usr/bin  | sort | uniq -d

11·join命令

类似于paste,它会往文件中添加列,但是它使用了独特的方法来完成。一个join操作通常与关系型数据库相关联,在关系型数据库中来自多个享有共同关键域的表格的数据结合起来,得到一个期望的结果。这个join命令执行相同的操作,它把来自于多个基于共享关键域的文件的数据结合起来。

通俗讲,就是讲两个文件中指定栏位相同的行链接起来,即按照两个文件中共同拥有的某一列,将对应的行拼接成一行。

命令格式:

join[选项]文件1 文件2

常用参数:

参数 描述

-j FIELD
等同于 -1 FIELD -2 FIELD,-j 指定一个域作为匹配字段

-1 FIELD
以 file1 中 FIELD 字段进行匹配

-2 FIELD
以 file2 中 FIELD 字段进行匹配

-t 自定义分隔符,默认为制表符

12·comm命令

comm命令将逐行比较已经排序的文件。现实的结果包括3列:第1列为只在第一个文件中找到的行,第2列为只在第二个文件中找到的行,第3列为两个文件的共有行。

命令格式:

comm [选项] 文件 1 文件 2

常用参数:

参数 描述

-1 不输出文件 1 特有的行

-2 不输出文件 2 特有的行

-3 不输出两个文件共有的行

13·diff命令

被用来监测文件之间的差异。它支持许多输出格式,并且一次能处理许多文本文件。软件开发员经常使用diff程序来检查不同程序源码版本之间的更改,diff能够递归地检查源码目录,经常称之为源码树。diff程序的一个常见用例是创建diff文件或者补丁,它会被其它程序使用。

diff在命令行中打印每一个行的改动,并且diff是svn、cvs、git等版本控制工具不可或缺的一部分。

differential的缩写

命令格式:

diff[选项]文件

常用参数:

参数 描述

-c 上下文模式,显示全部内文,并标出不同之处

-u 统一模式,以合并的方式来显示文件内容的不同

-a 只会逐行比较文本文件

-N 在比较目录时,若文件 A 仅出现在某个目录中,预设会显示:Only in 目录。 若使用-N 参数,则 diff 会将文件 A 与一个空白的文件比较

-r 递归比较目录下的文件

14·df命令

用来检查linux服务器的文件系统的磁盘空间占用情况。

disk free的缩写

命令格式:

df[选项]文件

常用参数:

参数 描述

-a 全部文件系统列表

-h 方便阅读方式显示

-i 显示 inode 信息

-T 文件系统类型

-t<文件系统类型>
只显示选定文件系统的磁盘信息

-x<文件系统类型>
不显示选定文件系统的磁盘信息

15·du命令

du也可以查看使用空间,与df不同的是Linux du命令是对文件和目录磁盘使用的空间的查看。

disk usage的缩写。

命令格式:

du [选项]文件

常用参数:

参数 描述

-a 显示目录中个别文件的大小。

-b 显示目录或文件大小时,以 byte 为单位。

-c 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。

-k 以 KB(1024bytes)为单位输出。

-m 以 MB 为单位输出。

-s 仅显示总计,只列出最后加总的值。

-h 以 K,M,G 为单位,提高信息的可读性

16·time命令

常用于测量一个命令的运行时间,包括实际使用时间(real time)、用户态使用时间(the process spent in user mode)、内核态使用时间(the process spent in kernel mode)。

实际时间:从command命令开始执行到运行终止。

用户态:命令执行完成花费的用户CPU时间。

内核态:命令执行完成花费的系统CPU时间。

命令格式:

time 命令

时间: 2024-10-29 01:01:39

linux命令行解析(一)的相关文章

Zabbix监控之Linux命令行/Shell脚本解析json

本文主要写了在Linux下如何用Shell脚本解析json数据,以便于在Zabbix中添加适合于业务应用的监控项. 为什么要使用json? json作为一种文本化的数据格式(文本化协议),符合UNIX编程的哲学,既符合透明性(透明性:设计可见,便于审查和调试)又符合文本性(文本性:数据应该保存为文本文件).关键在于json对Web程序或者java程序非常友好,对于开发人员来说,他们也喜欢使用json数据.业务逻辑.内部的依赖关系以及状态信息由程序员去做,运维人员只需要调用程序员开放出来的API接

Linux命令行抓包及包解析工具tshark(wireshark)使用实例解析

在Linux下,当我们需要抓取网络数据包分析时,通常是使用tcpdump抓取网络raw数据包存到一个文件,然后下载到本地使用wireshark界面网络分析工具进行网络包分析. 最近才发现,原来wireshark也提供有Linux命令行工具-tshark.tshark不仅有抓包的功能,还带了解析各种协议的能力.下面我们以两个实例来介绍tshark工具.1.安装方法 CentOS: yum install -y wireshark    Ubuntu: apt-get install -y tsha

linux命令行抓取网页快照-(xvfb+CutyCapt)

目的: 在一台没有安装X-server的Debian服务器上实现命令行抓取网页快照 软件: xvfb(在命令行下实现对X-server的模拟,渲染图形进行缓存)-在没有安装X-Server的环境下提供图像渲染 CutyCapt(模拟浏览器对网页进行下载.HTML.css渲染.Javascript执行,并将最终渲染完成的网页进行快照)- 主力干将 Qt(CutyCapt是基于此框架开发的) 实践: 1.安装CutyCapt.Qt及相关软件包: 帮助 1 2 3 4 5 sudo apt-get i

linux命令行学习-dig(DNS查询器)

在web开发中,总要熟悉的就是http协议,而发起一个http开始前最先要经历的一个过程就是DNS解析.简单说就是域名如何最终解析到实际服务器ip的过程. 而在研究DNS解析和排除DNS解析类故障问题的时候一个强大的工具就是dig.和他对应的有个比较传统的命令nslookup,不过dig作为更新的命令,其强大而简洁可定制的输出也使得运维其开发人员使用. 实例1(访问服务器本地DNSserver查询根域名服务器):  ~#: dig ; <<>> DiG 9.3.6-P1-RedHa

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shell 脚本编程基础:第三部分深入探讨shell 脚本编程的高级内容:第四部分介绍如何在现实环境中使用shell 脚本.本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料. 本书内容全面,语言简练,示例丰富,适合于linux 系统管理员及Linux 爱好者阅读

在 Linux 命令行中使用和执行 PHP 代码

PHP是一个开源服务器端脚本语言,最初这三个字母代表的是“Personal Home Page”,而现在则代表的是“PHP:Hypertext Preprocessor”,它是个递归首字母缩写.它是一个跨平台脚本语言,深受C.C++和Java的影响. 在 Linux 命令行中运行 PHP 代码 PHP的语法和C.Java以及带有一些PHP特性的Perl变成语言中的语法十分相似,它当下大约正被2.6亿个网站所使用,当前最新的稳定版本是PHP版本5.6.10. PHP是HTML的嵌入脚本,它便于开发

《Linux命令行与shell脚本编程大全 第3版》

第一部分 Linux 命令行 第1章  初识Linux she1.1   什么是Linux 21.1.1 深入探究Linux 内核 31.1.2 GNU 工具 61.1.3 Linux 桌面环境 81.2   Linux 发行版 121.2.1 核心Linux 发行版 131.2.2 特定用途的Linux 发行版 131.2.3 Linux LiveCD 141.3   小结 15 第2章  走进shell2.1   进入命令行 162.1.1 控制台终端 172.1.2 图形化终端 172.2

三个网站让你成为Linux命令行高手

[转载自http://www.linuxeden.com/html/news/20091119/69183.html] Linux的命令行是通向Linux高级应用的必经之路,Linux系统管理员.开发者都是学习对象.Susan Linton向我们推荐了三个学习Linux命令行的网站,现在介绍给大家: 1. LinuxCommand LinuxCommand是一个学习Linux命令行最好的网站之一.网站分为:学习Shell.写Shell脚本.脚本库.超级MAN页面. 2. O'Reilly的Lin

linux命令行的简单使用

<linux命令行的简单使用> 在linux中打开一个终端(terminal),这是一个由内核提供的shell交互界面,在命令提示符后输入相关的命令. 本文中的示例中, 标记的为你输入的指令 命令输入格式: command options target  ##命令.选项.操作对象,中间用空格作为分隔符 (一)与文件系统相关的指令: v pwd pwd  ##显示当前的绝对路径 例子: [[email protected] ~]# pwd /root [[email protected] htm