【大数据】02 Linux 命令

在前面,我们已经装好了 CentOS 的虚拟机系统,并且复制了 4 台机器,现在,我们就不直接使用 VMware 直接操作服务器虚拟机了,而是使用 Xshell 软件。官方下载地址:https://www.netsarang.com/zh/xshell/

Xshell 软件是一款客户机软件,通过SSH协议远程访问服务器。以后你们到公司上班的话,是见不到那些物理服务器的,你要访问那些服务器,必须通过你公司的电脑通过网络远程连接,目前比较常用的就是 Xshell 软件。

打开 Xshell,

输入:ssh 主机名@主机IP地址 ,回车,就会让你输入密码:

输入密码,点 确定,即远程连接服务器成功。Xshell界面和VMware界面是一样一样的。


VMware界面
 

Xshell界面
 

接下来进入今天的主题:开始讲 Linux 命令啦

Linux 命令

1、type

type命令 用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。

2、file

file命令 用于辨识文件类型。通过file指令,我们得以辨识该文件的类型。

3、echo

4、man

如果在使用 man 命令时提示该命令没有安装,就使用 yum install man man-pages 安装 man 命令和其帮助文档 man-pages

5、yum

6、help

总结来说,Linux 就两类命令,

一类是 外部命令,使用 man 来学习

一类是 内部命令,使用 help 来学习

Linux 所有的内部命令 可通过 help 直接回车得到显示:

[root@node0001 ~]# help
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
These shell commands are defined internally.  Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

 job_spec [&]                          history [-c] [-d offset] [n] or hi>
 (( expression ))                      if COMMANDS; then COMMANDS; [ elif>
 . filename [arguments]                jobs [-lnprs] [jobspec ...] or job>
 :                                     kill [-s sigspec | -n signum | -si>
 [ arg... ]                            let arg [arg ...]
 [[ expression ]]                      local [option] name[=value] ...
 alias [-p] [name[=value] ... ]        logout [n]
 bg [job_spec ...]                     mapfile [-n count] [-O origin] [-s>
 bind [-lpvsPVS] [-m keymap] [-f fil>  popd [-n] [+N | -N]
 break [n]                             printf [-v var] format [arguments]>
 builtin [shell-builtin [arg ...]]     pushd [-n] [+N | -N | dir]
 caller [expr]                         pwd [-LP]
 case WORD in [PATTERN [| PATTERN]..>  read [-ers] [-a array] [-d delim] >
 cd [-L|-P] [dir]                      readarray [-n count] [-O origin] [>
 command [-pVv] command [arg ...]      readonly [-af] [name[=value] ...] >
 compgen [-abcdefgjksuv] [-o option]>  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE>  select NAME [in WORDS ... ;] do CO>
 compopt [-o|+o option] [-DE] [name >  set [--abefhkmnptuvxBCHP] [-o opti>
 continue [n]                          shift [n]
 coproc [NAME] command [redirections>  shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFilrtux] [-p] [name[=v>  source filename [arguments]
 dirs [-clpv] [+N] [-N]                suspend [-f]
 disown [-h] [-ar] [jobspec ...]       test [expr]
 echo [-neE] [arg ...]                 time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [>  times
 eval [arg ...]                        trap [-lp] [[arg] signal_spec ...]>
 exec [-cl] [-a name] [command [argu>  true
 exit [n]                              type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or >  typeset [-aAfFilrtux] [-p] name[=v>
 false                                 ulimit [-SHacdefilmnpqrstuvx] [lim>
 fc [-e ename] [-lnr] [first] [last]>  umask [-p] [-S] [mode]
 fg [job_spec]                         unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMA>  unset [-f] [-v] [name ...]
 for (( exp1; exp2; exp3 )); do COMM>  until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or nam>  variables - Names and meanings of >
 getopts optstring name [arg]          wait [id]
 hash [-lr] [-p pathname] [-dt] [nam>  while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]             { COMMANDS ; }

7、whereis

-----------------------  华丽的分割线    --------------------------------

文件系统命令

1、df

Linux df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。

2、du

Linux du命令用于显示目录或文件的大小。

du会显示指定的目录或文件所占用的磁盘空间。

du == disk usage (磁盘使用量,占用的磁盘空间)

一个文件占用的磁盘空间和一个文件的大小是两码事情。占用空间取决于文件系统的块(block)的大小,linux一般默认是4k(4096) ,因此,一个大小为1个字节的文件,最小也要占用4k,如果你创建文件系统的时候制定块大小是16K,那么即便一个文件只有1个字节,占用空间也是16K。

如果一个分区上主要放大文件,那么block可以大一些,有利于减少磁盘碎片,如果主要放小文件,那么block设置小一下,否则太浪费磁盘空间。

通常情况下,ls 显示的文件大小比du显示的磁盘占用空间小,比如文件系统的block是4K,一个13K的文件占用的空间是 13k/4k = 3.25 个block,一个block只能被一个文件占用,因此实际占用空间就是4个block,就是16K。

3、cd

Linux cd命令用于切换当前工作目录至 dirName(目录参数)。

其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。

另外,”~” 也表示为 home 目录 的意思,”.” 则是表示目前所在的目录,”..” 则表示目前目录位置的上一层目录。

语法

cd [dirName]

  • dirName:要切换的目标目录。

实例

跳到 /usr/bin/ :

cd /usr/bin/

跳到自己的 home 目录 :

cd ~

或者 cd

跳到目前目录的上上两层 :

cd ../..

跳到上次所在的目录:

cd -

另外,如果当前用户为 root 用户,root 用户可以访问其它任何用户的 家目录,可以通过:

cd /home/ 用户名  

另外,还可以通过(波浪线扩展):

cd ~用户名

4、mkdir

Linux mkdir命令用于建立名称为 dirName 之子目录。

语法

mkdir [-p] dirName

参数说明

  • -p 确保目录名称存在,不存在的就建一个。

实例

在工作目录下,建立一个名为 AAA 的子目录 :

mkdir AAA

在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。 若 BBB 目录原本不存在,则建立一个。(注:本例若不加 -p,且原本 BBB目录不存在,则产生错误。)

mkdir -p BBB/Test

同时创建多个目录,用 {} 括起来即可:

mkdir ./AAA/{1,2,3}

5、rm

Linux rm命令用于删除一个文件或者目录。

语法

rm [options] name...

参数

  • -i 删除前逐一询问确认。
  • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  • -r 将目录及以下之档案亦逐一删除。

实例

删除文件可以直接使用rm命令,若删除目录则必须配合选项”-r”,例如:

# rm test.txt rm:

是否删除 一般文件 "test.txt"? y

# rm homework rm:

无法删除目录"homework": 是一个目录

# rm -r homework rm:

是否删除 目录 "homework"? y

删除当前目录下的所有文件及目录,命令行为:

rm -r *

文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令。

6、cp

Linux cp命令主要用于复制文件或目录。

语法

cp [options] source dest

cp [options] source... directory

参数说明

  • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
  • -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
  • -f:覆盖已经存在的目标文件而不给出提示。
  • -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答”y”时目标文件将被覆盖。
  • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
  • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
  • -l:不复制文件,只是生成链接文件。

实例

使用指令”cp”将当前目录”test/”下的所有文件复制到新目录”newtest”下,输入如下命令:

cp –r test/ newtest

注意:用户使用该指令复制目录时,必须使用参数”-r”或者”-R”

7、mv

Linux mv命令用来为文件或目录改名、或将文件或目录移入其它位置。

语法

mv [options] source dest

mv [options] source... directory

参数说明

  • -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
  • -f: 在mv操作要覆盖某已有的目标文件时不给任何指示;

mv参数设置与运行结果

命令格式运行结果
mv 文件名 文件名将源文件名改为目标文件名
mv 文件名 目录名将文件移动到目标目录
mv 目录名 目录名目标目录已存在,将源目录
移动到目标目录;目标
目录不存在则改名
mv 目录名 文件名出错

实例

将文件 aaa 更名为 bbb :

mv aaa bbb

将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。

mv info/ logs

再如将/usr/student下的所有文件和目录移到当前目录下,命令行为:

mv /usr/student/* .

8、ln

Linux ln命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

语法

ln [参数][源文件或目录][目标文件或目录]

其中参数的格式为

[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]

[–help] [–version] [–]

命令功能 :

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

软链接

  • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 2.软链接可以 跨文件系统 ,硬链接不可以
  • 3.软链接可以对一个不存在的文件名进行链接
  • 4.软链接可以对目录进行链接

硬链接

  • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
  • 2.不允许给目录创建硬链接
  • 3.硬链接只有在同一个文件系统中才能创建

命令参数

必要参数

  • -b 删除,覆盖以前建立的链接
  • -d 允许超级用户制作目录的硬链接
  • -f 强制执行
  • -i 交互模式,文件存在则提示用户是否覆盖
  • -n 把符号链接视为一般目录
  • -s 软链接(符号链接)
  • -v 显示详细的处理过程

选择参数

  • -S “-S<字尾备份字符串> “或 “–suffix=<字尾备份字符串>”
  • -V “-V<备份方式>”或”–version-control=<备份方式>”
  • –help 显示帮助信息
  • –version 显示版本信息

实例

给文件创建软链接,为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效:

ln -s log2013.log link2013

输出:

[root@localhost test]# ll
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
[root@localhost test]# ln -s log2013.log link2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log

给文件创建硬链接,为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同

ln log2013.log ln2013

输出:

[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
[root@localhost test]# ln log2013.log ln2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 2 root bin      61 11-13 06:03 ln2013
-rw-r--r-- 2 root bin      61 11-13 06:03 log2013.log

9、stat

Linux stat命令用于显示inode内容(常称为 元数据)。

stat以文字的格式来显示inode的内容。

语法

stat [文件或目录]

实例

查看 testfile 文件的inode内容内容,可以用以下命令:

# stat testfile

执行以上命令输出结果:

# stat testfile                #输入命令
  File: `testfile'
  Size: 102             Blocks: 8          IO Block: 4096   regular file
Device: 807h/2055d      Inode: 1265161     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-08-13 14:07:20.000000000 +0800
Modify: 2014-08-13 14:07:07.000000000 +0800
Change: 2014-08-13 14:07:07.000000000 +0800

10、touch

Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

ls -l 可以显示档案的时间记录。

语法

touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]

  • 参数说明
  • a 改变档案的读取时间记录。
  • m 改变档案的修改时间记录。
  • c 假如目的档案不存在,不会建立新的档案。与 –no-create 的效果一样。
  • f 不使用,是为了与其他 unix 系统的相容性而保留。
  • r 使用参考档的时间记录,与 –file 的效果一样。
  • d 设定时间与日期,可以使用各种不同的格式。
  • t 设定档案的时间记录,格式与 date 指令相同。
  • –no-create 不会建立新档案。
  • –help 列出指令格式。
  • –version 列出版本讯息。

实例

使用指令”touch”修改文件”testfile”的时间属性为当前系统时间,输入如下命令:

$ touch testfile                      #修改文件的时间属性

首先,使用ls命令查看testfile文件的属性,如下所示:

$ ls -l testfile                   #查看文件的时间属性

#原来文件的修改时间为16:09

-rw-r--r-- 1 hdd hdd 55 2019-11-15 16:09 testfile

执行指令”touch”修改文件属性以后,并再次查看该文件的时间属性,如下所示:

$ touch testfile                              #修改文件时间属性为当前系统时间

$ ls -l testfile                                 #查看文件的时间属性

#修改后文件的时间属性为当前系统时间

-rw-r--r-- 1 hdd hdd 55 2019-11-15 16:53 testfile

使用指令”touch”时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件”file”,输入如下命令:

$ touch file                      #创建一个名为“file”的新的空白文件

11、cat

cat 命令用于连接文件并打印到标准输出设备上。

使用权限

所有使用者

语法格式

cat [-AbeEnstTuv] [--help] [--version] fileName

参数说明:

  • -n 或 –number:由 1 开始对所有输出的行数编号。
  • -b 或 –number-nonblank:和 -n 相似,只不过对于空白行不编号。
  • -s 或 –squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
  • -v 或 –show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
  • -E 或 –show-ends : 在每行结束处显示 $。
  • -T 或 –show-tabs: 将 TAB 字符显示为 ^I。
  • -e : 等价于 -vE。
  • -A, –show-all:等价于 -vET。
  • -e:等价于”-vE”选项;
  • -t:等价于”-vT”选项;

实例:

把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:

cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:

cat -b textfile1 textfile2 >> textfile3

清空 /etc/test.txt 文档内容:

cat /dev/null > /etc/test.txt

cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:

cat /dev/fd0 > OUTFILE

相反的,如果想把 image file 写到软盘,输入:

cat IMG_FILE > /dev/fd0

  • 1. OUTFILE 指输出的镜像文件名。
  • 2. IMG_FILE 指镜像文件。
  • 3. 若从镜像文件写回 device 时,device 容量需与相当。
  • 4. 通常用制作开机磁片。

12、more

Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。

语法

more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]

参数

  • -num 一次显示的行数
  • -d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
  • -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
  • -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
  • -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
  • -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
  • -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
  • -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
  • +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
  • +num 从第 num 行开始显示
  • fileNames 欲显示内容的文档,可为复数个数

实例

逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。

more -s testfile

从第 20 行开始显示 testfile 之文档内容。

more +20 testfile

常用操作命令

  • Enter 向下n行,需要定义。默认为1行
  • Ctrl+F 向下滚动一屏
  • 空格键 向下滚动一屏
  • Ctrl+B 返回上一屏
  • = 输出当前行的行号
  • :f 输出文件名和当前行的行号
  • V 调用vi编辑器
  • !命令 调用Shell,并执行命令
  • q 退出more

13、less

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

语法

less [参数] 文件

参数说明

  • -b <缓冲区大小> 设置缓冲区的大小
  • -e 当文件显示结束后,自动离开
  • -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
  • -g 只标志最后搜索的关键词
  • -i 忽略搜索时的大小写
  • -m 显示类似more命令的百分比
  • -N 显示每行的行号
  • -o <文件名> 将less 输出的内容在指定文件中保存起来
  • -Q 不使用警告音
  • -s 显示连续空行为一行
  • -S 行过长时间将超出部分舍弃
  • -x <数字> 将”tab”键显示为规定的数字空格
  • /字符串:向下搜索”字符串”的功能
  • ?字符串:向上搜索”字符串”的功能
  • n:重复前一个搜索(与 / 或 ? 有关)
  • N:反向重复前一个搜索(与 / 或 ? 有关)
  • b 向后翻一页
  • d 向后翻半页
  • h 显示帮助界面
  • Q 退出less 命令
  • u 向前滚动半页
  • y 向前滚动一行
  • 空格键 滚动一行
  • 回车键 滚动一页
  • [pagedown]: 向下翻动一页
  • [pageup]: 向上翻动一页

实例

1、查看文件

less log2013.log

2、ps查看进程信息并通过less分页显示

ps -ef |less

3、查看命令历史使用记录并通过less分页显示

history | less

4、浏览多个文件

less log2013.log log2014.log

说明:
输入 :n后,切换到 log2014.log
输入 :p 后,切换到log2013.log

附加备注

1.全屏导航

  • ctrl + F – 向前移动一屏
  • ctrl + B – 向后移动一屏
  • ctrl + D – 向前移动半屏
  • ctrl + U – 向后移动半屏

2.单行导航

  • j – 向前移动一行
  • k – 向后移动一行

3.其它导航

  • G – 移动到最后一行
  • g – 移动到第一行
  • q / ZZ – 退出 less 命令

4.其它有用的命令

  • v – 使用配置的编辑器编辑当前文件
  • h – 显示 less 的帮助文档
  • &pattern – 仅显示匹配模式的行,而不是整个文件

5.标记导航

当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:

  • ma – 使用 a 标记文本的当前位置
  • ‘a – 导航到标记 a 处

14、head

在屏幕上显示指定文件的开头若干行

补充说明

head命令 用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。

语法

head(选项)(参数)

选项

  • -n<数字>:指定显示头部内容的行数;
  • -c<字符数>:指定显示头部内容的字符数;
  • -v:总是显示文件名的头信息;
  • -q:不显示文件名的头信息。

参数

文件列表:指定显示头部内容的文件列表。

15、tail

在屏幕上显示指定文件的末尾若干行

补充说明

tail命令 用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。

注意:如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1 048576(1M)。

语法

tail(选项)(参数)

选项

--retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用;
-c<N>或——bytes=<N>:输出文件尾部的N(N为整数)个字节内容;
-f<name/descriptor>或;--follow<nameldescript>:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效;
-F:与选项“-follow=name”和“--retry"连用时功能相同;
-n<N>或——line=<N>:输出文件的尾部N(N位数字)行内容。
--pid=<进程号>:与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令;
-q或——quiet或——silent:当有多个文件参数时,不输出各个文件名;
-s<秒数>或——sleep-interal=<秒数>:与“-f”选项连用,指定监视文件变化时间隔的秒数;
-v或——verbose:当有多个文件参数时,总是输出各个文件名;
--help:显示指令的帮助信息;
--version:显示指令的版本信息。
 

参数

文件列表:指定要显示尾部内容的文件列表。

实例

tail file (显示文件file的最后10行)
tail +20 file (显示文件file的内容,从第20行至文件末尾)
tail -c 10 file (显示文件file的最后10个字符)

16、管道 |

简单来说,管道就是把前一个命令的结果当成后一个命令的输入。

管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会堵塞,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。

实例:

查看 a.txt 文件5-10行的内容

# 在前面的 head 和 tail 命令中,只能显示前面或后面的连续内容,如果想显示中间的部分内容,就可以使用管道

head -n10 a.txt | tail -n5

查询带有关键字 python 的进程,一条一条列出。

ps -ef | grep python

17、grep

Linux grep命令用于查找文件里符合条件的字符串。

grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为”-“,则grep指令会从标准输入设备读取数据。

语法

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

参数

  • -a或–text 不要忽略二进制的数据。
  • -A<显示列数>或–after-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之后的内容。
  • -b或–byte-offset 在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。
  • -B<显示列数>或–before-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前的内容。
  • -c或–count 计算符合范本样式的列数。
  • -C<显示列数>或–context=<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
  • -d<进行动作>或–directories=<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  • -e<范本样式>或–regexp=<范本样式> 指定字符串做为查找文件内容的范本样式。
  • -E或–extended-regexp 将范本样式为延伸的普通表示法来使用。
  • -f<范本文件>或–file=<范本文件> 指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。
  • -F或–fixed-regexp 将范本样式视为固定字符串的列表。
  • -G或–basic-regexp 将范本样式视为普通的表示法来使用。
  • -h或–no-filename 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
  • -H或–with-filename 在显示符合范本样式的那一列之前,表示该列所属的文件名称。
  • -i或–ignore-case 忽略字符大小写的差别。
  • -l或–file-with-matches 列出文件内容符合指定的范本样式的文件名称。
  • -L或–files-without-match 列出文件内容不符合指定的范本样式的文件名称。
  • -n或–line-number 在显示符合范本样式的那一列之前,标示出该列的列数编号。
  • -q或–quiet或–silent 不显示任何信息。
  • -r或–recursive 此参数的效果和指定”-d recurse”参数相同。
  • -s或–no-messages 不显示错误信息。
  • -v或–revert-match 反转查找。
  • -V或–version 显示版本信息。
  • -w或–word-regexp 只显示全字符合的列。
  • -x或–line-regexp 只显示全列符合的列。
  • -y 此参数的效果和指定”-i”参数相同。
  • –help 在线帮助。

实例

1、在当前目录中,查找后缀有”test”字样的文件中包含”test”字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:

grep test *file

结果如下所示:

$ grep test test* #查找后缀有“test”的文件包含“test”字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 

2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串”update”的文件,并打印出该字符串所在行的内容,使用的命令为:

grep -r update /etc/acpi

输出结果如下:

$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  
#下包含“update”的文件  
/etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)  
Rather than  
/etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  
IO.) Rather than  
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 

3、反向查找。前面各个例子是查找并打印出符合条件的行,通过”-v”参数可以打印出不符合条件行的内容。

查找文件名中包含test 的文件中不包含test 的行,此时,使用的命令为:

grep -v test*

结果如下所示:

$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行  
testfile1:helLinux!  
testfile1:Linis a free Unix-type operating system.  
testfile1:Lin  
testfile_1:HELLO LINUX!  
testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
testfile_1:THIS IS A LINUX TESTFILE!  
testfile_2:HELLO LINUX!  
testfile_2:Linux is a free unix-type opterating system.

18、xargs

给其他命令传递参数的一个过滤器

补充说明

xargs命令 是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转 换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默 认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的 重要组件之一。

xargs命令用法

xargs用作替换工具,读取输入数据重新格式化后输出。

定义一个测试文件,内有多行文本数据:

cat test.txt

a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

多行输入单行输出:

cat test.txt | xargs

a b c d e f g h i j k l m n o p q r s t u v w x y z

-n选项 多行输出:

cat test.txt | xargs -n3

a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

-d选项 可以自定义一个定界符:

echo "nameXnameXnameXname" | xargs -dX

name name name name

结合 -n选项 使用:

echo "nameXnameXnameXname" | xargs -dX -n2

name name
name name

读取stdin,将格式化后的参数传递给命令

假设一个命令为 sk.sh 和一个保存参数的文件arg.txt:

#!/bin/bash
#sk.sh命令内容,打印出所有参数。

echo $*

arg.txt文件内容:

cat arg.txt

aaa
bbb
ccc

xargs的一个 选项-I ,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:

cat arg.txt | xargs -I {} ./sk.sh -p {} -l

-p aaa -l
-p bbb -l
-p ccc -l

复制所有图片文件到 /data/images 目录下:

ls *.jpg | xargs -n1 -I cp {} /data/images

xargs结合find使用

用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0将\0作为定界符。

统计一个源代码目录中所有php文件的行数:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

查找所有的jpg 文件,并且压缩它们:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

xargs其他应用

假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:

cat url-list.txt | xargs wget -c

子Shell(Subshells)

运行一个 shell脚本时会启动另一个命令解释器.,就好像你的命令是在命令行提示下被解释的一样,类似于批处理文件里的一系列命令。每个shell脚本有效地运 行在父shell(parent shell)的一个子进程里。这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程。

cmd1 | ( cmd2; cmd3; cmd4 ) | cmd5

如果cmd2 是cd /,那么就会改变子Shell的工作目录,这种改变只是局限于子shell内部,cmd5则完全不知道工作目录发生的变化。子shell是嵌在圆括号()内部的命令序列,子Shell内部定义的变量为局部变量。

子shell可用于为一组命令设定临时的环境变量:

COMMAND1
COMMAND2
COMMAND3
(
  IFS=:
  PATH=/bin
  unset TERMINFO
  set -C
  shift 5
  COMMAND4
  COMMAND5
  exit 3 # 只是从子shell退出。
)
# 父shell不受影响,变量值没有更改。
COMMAND6
COMMAND7

echo / | xargs ls -ll

[root@node0001 ~]# echo /
/
[root@node0001 ~]# echo / | xargs ls -ll
total 94
dr-xr-xr-x.  2 root root  4096 Oct 23 02:59 bin
dr-xr-xr-x.  5 root root  1024 Oct 23 03:00 boot
drwxr-xr-x  18 root root  3700 Nov 15 16:36 dev
drwxr-xr-x. 61 root root  4096 Nov 15 16:36 etc
drwxr-xr-x.  2 root root  4096 Sep 23  2011 home
dr-xr-xr-x.  8 root root  4096 Oct 23 02:59 lib
dr-xr-xr-x.  9 root root 12288 Oct 23 03:00 lib64
drwx------.  2 root root 16384 Oct 23 02:58 lost+found
drwxr-xr-x.  2 root root  4096 Sep 23  2011 media
drwxr-xr-x.  2 root root  4096 Sep 23  2011 mnt
drwxr-xr-x.  2 root root  4096 Sep 23  2011 opt
dr-xr-xr-x  86 root root     0 Nov 15 16:36 proc
dr-xr-x---.  2 root root  4096 Nov 15 17:33 root
dr-xr-xr-x.  2 root root 12288 Oct 23 03:00 sbin
drwxr-xr-x.  2 root root  4096 Oct 23 02:59 selinux
drwxr-xr-x.  2 root root  4096 Sep 23  2011 srv
drwxr-xr-x  13 root root     0 Nov 15 16:36 sys
drwxrwxrwt.  3 root root  4096 Nov 15 16:36 tmp
drwxr-xr-x. 13 root root  4096 Oct 23 02:59 usr
drwxr-xr-x. 17 root root  4096 Oct 23 02:59 var

请继续关注后面的笔记,还会继续讲解更高级的Linux命令。

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值