Linux常用命令(四)

在使用UNIX和MS-DOS命令行时,已经引入了一些shell元字符,它们用于扩展文件名。其中,星号(*)用于匹配文件名中的所有字符,问号(?)负责匹配文件中的单个字符,而方括号则匹配文件名中某一组字符中的一个。将这些shell元字符扩展为文件名的过程就称作globbing

which 命令

which - locate a command
在 PATH 变量指定的路径中搜索可执行文件的所在位置

Usage:

which 可执行文件名称

补充知识: 到底什么是Shell命令?

Linux系统中所有的可执行文件都可以作为Shell命令来解释执行

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

  1. 是一个可执行程序:包括Linux命令,存放在 /bin, /sbin目录下; 还包括实用程序,存放在 /usr/bin, /usr/sbin, /usr/local/bin等目录下; 还包括经过编译生成的二进制文件,用C、C++语言写的程序
  2. 是一个内建于 shell 自身的命令:bash 支持若干命令,内部叫做 shell 内部命令 (builtins)
  3. 是一个 shell 函数:这些是小规模的 shell 脚本,它们混合到环境变量中
  4. 是一个命令别名:我们可以定义自己的命令,建立在其它命令之上

whereis 命令

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

whereis 命令查找速度非常快,这是因为它根本不是在磁盘中漫无目的乱找,而是在一个数据库中(/var/lib/mlocate/mlocate.db)查询。这个数据库是 Linux 系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行 updatedb 命令更新一次。也正是因为这个数据库要每天才更新一次,就会使得 whereis 命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到

whereis - locate the binary, source, and manual page files for a command

whereis [-bmsu] [-BMS directory… -f] filename

常用参数:

-b 定位可执行文件
-m 定位帮助文件
-s 定位源代码文件
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件


locate 命令

locate - find files by name

locate 命令跟 whereis 命令类似,且它们使用的是相同的数据库。但 whereis 命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用 locate 命令。

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


find 命令

find - search for files in a directory hierarchy

find 命令主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。
Linux 下 find 命令提供了相当多的查找条件,功能很强大,对应的学习难度也比较大

命令格式:

find 【选项】 【搜索路径】 【表达式】

默认路径是当前目录,默认表达式为-print。
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作。

常用参数:

-print  find 命令将匹配的文件输出到标准输出
-exec command {} \;   find 命令对匹配的文件执行**该参数所给出的 shell 命令**,即command操作,{}是占位符,\;是结束符,但是分号要转义
-ok     和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行

-name   按照文件名查找文件,-iname 选项跟-name 选项作用一样,不同在于-iname 会忽略字母大小写
-type b/d/c/p/l/f   查找某一类型的文件
-size n[c]  查长度为n块[或n字节]的文件
-depth  使查找在进入子目录前先行查找完本目录
-prune  忽略某个目录,使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同时使用-depth 选项,那么-prune 将被 find 命令忽略
-inum  根据 i节点查找

-user username   按照文件所有者来查找文件
-group groupname 按照文件所属组来查找文件
-perm  按执行权限来查找

-mtime [-n | +n] 按照文件的更改时间来查找文件,-n指n天以内,+n指n天以前
-atime [-n | +n] 按文件访问时间来查找,-n指n天以内,+n指n天以前
-ctime [-n | +n] 按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-amin [-n | +n] 访问时间 access -n指n分钟以内,+n指n分钟以前
-cmin [-n | +n] 文件属性 change -n指n分钟以内,+n指n分钟以前
-mmin [-n | +n] 文件内容 modify -n指n分钟以内,+n指n分钟以前

For example:

find . -print 打印当前目录下所有文件的目录列表
find . -name "*.txt" -print 打印当前目录下所有以.txt 结尾的文件名
find ~ \(-name "*.pdf" or -name "*.txt"\) 打印主目录下所有**以.txt 或.pdf 结尾**的文件名

find . -type l -name "*.txt" 以.txt 结尾的符号链接
find . -type f -name "*.php" -perm 777 所有权限为 777 的 php 文件
find . -type f -user root 当前目录下 root 用户拥有的所有文件
find . -type f \( ! -perm 777 -and ! -perm 644 \) 当前目录下权限不是 777 和 664 的所有文件
find /etc -cmin -5 在/etc下查找5分钟内被修改过属性的文件和目录

find / -size +204800 在根目录下查找大于100MB的文件


注意:默认单位是b,而它代表的是512字节,所以2表示1K,1M则是2048,如果不想自己转换,可以使用其他单位,如c、K、M等。

查找当前目录下文件大小为2048(2k)字节的文件
find . -size 4
find . -size 2048c
find . -size 2K
find / -size +10M -a -size -20M 在根目录下查找大于10M小于20M的文件

find /etc -perm 777 -exec ls -l {} \; 在/ect目录下查找权限为777的文件,并显示其详细信息
find /work -name "*.c" -exec cat {} \; > all_c_file 先查找到所有的 c 语言代码文件,然后将这些文件内容写入到一个文件中

默认下,-exec 后面只能使用单个命令,如果想要多个命令,可以将多个命令写入脚本文件中,然后在-exec 中使用这个脚本,可以使用如下命令:

find . -name “*.c” -exec sh ./command.sh {} \;

脚本内容:

#! /bin/bash
ls -l $1    # $1表示传进来的第一个参数
cat $1


wc 命令

wc 命令是一个统计的工具,主要用来显示文件所包含的行、字和字节数。

wc 命令是 word count 的缩写

命令格式:

wc [选项] [文件]

常用参数:

-l 统计行数
-w 统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串
-c 统计字节数
-m 统计字符数,注意中文字符,不能与 -c 标志一起使用
-L 打印最长行的长度

注意每行结尾的换行符也算一个字符,空格也算一个字符。另外,由于系统采用 UTF-8 编码,所以一个汉字为 3 字节,9 个汉字加上一个换行,一共 28 个字节

统计/bin 目录下的命令个数,可以使用如下命令: ls /bin | wc -l


grep 命令

grep - global search regular expression and print lines matching a pattern

grep 是个很强大的命令,用来找到文件中的匹配文本,并且能够接受正则表达式和通配符,同时可以用多个 grep 命令选项来生成各种格式的输出。

grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep 可用于 shell 脚本,因为 grep 通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回 0,如果搜索不成功,则返回 1,如果搜索的文件不存在,则返回 2。我们利用这些返回值就可进行一些自动化的文本处理工作。

命令格式:

grep 【选项】 pattern [file]

常用参数:

-c 计算找到 ‘搜寻字符串’(即 pattern) 的次数
-i 忽略大小写的不同,所以大小写视为相同
-n 输出行号
-v 反向选择,打印不匹配的行
-r 递归搜索
–color=auto 将找到的关键词部分加上颜色显示

常用范例:

将/etc/passwd 文件中出现 root 的行取出来,关键词部分加上颜色显示
grep "root" /etc/passwd [--color=auto]
cat /etc/passwd | grep "root"

验证固定电话,打印符合条件的电话
grep “^0[0-9]{2,3}-[0-9]{7,8}(-[0-9]{3,4})?$” telphone.txt

grep 与正则表达式


xargs 命令

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

这时 xargs 就可以发挥它的作用了,xargs命令可以从标准输入接收输入,并把输入转换为一个特定的参数列表。

命令格式:

command | xargs [选项] [command]

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

常用参数:

-n  指定每行最大的参数数量
-d  指定分割符

常用范例:

cat a.txt | xargs 
将多行输入转换为单行输出

echo "1 2 3 4 5 6 7" | xargs -n 3
将单行输入转换为多行输出

cat b.txt | xargs -d i -n 3
将单行输入转换为多行输出,指定分隔符为 i

find . -type f -name "*.c" | xargs wc -l
查找当前目录下所有 c 代码文件,统计总行数

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. which 命令
  2. 2. 补充知识: 到底什么是Shell命令?
  3. 3. whereis 命令
  4. 4. locate 命令
  5. 5. find 命令
  6. 6. wc 命令
  7. 7. grep 命令
  8. 8. xargs 命令
,