【Linux】Linux常用命令
文章目录
- pwd命令——查看当前的工作目录
- cd命令——切换工作目录
- 绝对路径
- 相对路径
- 相对路径的表现形式
- ls命令——列表显示目录内容
- ls形式
- 结合通配符
- alias命令——设置别名
- 定义别名
- 如何查看别名
- 查看单独命令的别名
- 如何取消别名
- 如何执行命令本身而非别名
- du命令——统计目录及文件空间占用情况
- mkdir命令——创建新目录
- touch命令——创建空文件
- ln命令——创建理解文件
- 链接文件类型
- 软连接
- 硬链接
- 软链接和硬链接区别
- cp命令——复制文件或目录
- rm命令——删除文件或目录
- mv命令——移动文件或目录
- which命令——查找命令文件存放目录
- find命令——查找文件或目录
- 常用查找条件类型
- 查找条件
- find命令实现多个查找
pwd命令——查看当前的工作目录
pwd是用来实现用户查看当前的工作目录。
pwd 命令的基本格式为:
[root@host ~]# pwd
/root
cd命令——切换工作目录
cd:将用户的工作目录更改到其他位置
cd 目标位置
:切换到目标位置
例如:
[root@host ~]# cd /etc/sysconfig/network-scripts/
cd ~
或者cd
:若不指定目标位置,切换到当前用户的宿主目录
例如:
//在/etc/sysconfig/network-scripts/目录下使用cd命令
[root@host network-scripts]# cd
//输入pwd查看是否在当前用户的宿主目录
[root@host ~]# pwd
/root
//进入/etc/sysconfig/network-scripts/目录
[root@host ~]# cd /etc/sysconfig/network-scripts/
//在/etc/sysconfig/network-scripts/目录下使用cd ~命令
[root@host network-scripts]# cd ~
//输入pwd查看是否在当前用户的宿主目录
[root@host ~]# pwd
/root
指定进入指定test用户的家目录
cd ~test
cd -
:切换到上一次执行cd命令之前所在的目录
如
//进入/etc/sysconfig/network-scripts/目录
[root@host ~]# cd /etc/sysconfig/network-scripts/
//切换上一次执行cd命令的目录即root目录
[root@host network-scripts]# cd -
/root
[root@host ~]#
绝对路径
绝对路径是从linux最底层的根(/)开始算。如 cd /home/test
, /home/test
就是绝对路径。
相对路径
相对路径就是相对当前你所在路径开始算。如cd test
, test
就是指当前工作目录下的test目录,也就是相对路径。
相对路径的表现形式
表现形式 | 说明 | 示例 |
---|---|---|
直接使用目录名或文件名 | 表示当前工作目录中的子目录、文件位置 | grub.conf |
以一个点号“.”开头 | 表示以当前的工作目录作为起点 | ./grub.conf |
以两个点号“…”开头 | 表示以当前目录的上一级目录(父目录)作为起点 | …/vmlinuz |
以“~用户名”形式开头 | 表示以指定用户的宿主目录作为起点 | ~teacher |
以“~”形式开头 | 表示以当前用户的宿主目录作为起点 | ~ |
cd 文件名
例如
cd abc
效果如下
cd ./文件
例如
cd ./abc/
效果如下
cd …/文件
例如
//进入上一级目录
cd ../
效果如下
cd ~文件
例如
//进入root目录下的test目录
cd ~/test
效果如下
cd ~用户名/文件
例如
cd ~
效果如下
ls命令——列表显示目录内容
ls,以列表的方式显示目录内容。ls显示目录中内容,包括子目录和文件相关属性信息
ls形式
ls [选项] [文件或目录...]
常用选项:-l -a -A -d -h -R —color
ls -l
以长格式(Long)显示文件和目录的列表,包括权限、大小、最后更新时间等详细信息。ll
命令与ls -l
功能相同。
如图,用ls -l
命令查看某一个目录会得到一个7个字段的列表
drwxr-xr-x. 2 root root 6 3月 27 16:50 abc
第1字段:drwxr-xr-x.
代表文件属性字
第一个字符代表的类型
- “-“表示该文件是一个普通文件
- “d”长示该文件是一个目录
- “l”表示该文件是一个软链接文件。类似于windows下的快捷方式
第一个字符的后面9个字母表示该文件或目录的权限位:
r表示读(查看、下载)、w表示写(添加、更改、删除、上传)、x表示执行(运行文件、切换目录)
其中前三个表示文件拥有者(属主)的权限,中间三个表示文件所属组拥有的权限,最后三个表示其他用户拥有的权限。
第2字段:2
代表文件硬链接数
如果一个文件不是目录,此时这一字段表示这个文件所具有的硬链接数。如果是一个目录,则第2字段表示该目录所含子目录的个数。如果新建一个空目录,这个目录的第二字段就是2,表示该目录下有两个子目录。
第3字段:root
代表文件\目录拥有者
第4字段:root
代表文件\目录拥有者所在的组
第5字段: 6
代表文件所占用的空间(默认以字节为单位)
如果是一个目录,则表示该目录的大小,而不是目录以及它下面的文件的总大小。Linux系统中一切皆文件,因此目录也是一种文件。
第6字段:3月 27 16:50
代表文件\目录最近访问或修改时间
第7字段:abc
代表文件名
如果是一个符号链接(软链接文件),那么会有一个“->”箭头符号,后面根一个它指向的文件名
ls -a
显示所有(All)子目录和文件的信息,包括名称以点号“.”开头的隐藏目录和隐藏文件。
如图,用命令查看
[root@host network-scripts]# ls -a
ls -A
与-a
选项的作用基本类似,但有两个特殊隐藏目录不会显示,即表示当前的“.”和表示父目录的“…”。
如图,用命令查看
[root@host network-scripts]# ls -A
ls -d
显示目录(Directory)本身的属性,而不是显示目录中的内容。
如图,用命令查看abc目录本身的属性
[root@host network-scripts]# ls -l -d abc/
drwxr-xr-x. 2 root root 6 3月 27 16:50 abc/
ls -h
以更人性化(Human)的方式显示目录或文件的大小,默认的大小单位为字节(B),使用-h
选项后将显示KB、MB等单位。此选项需要结合-l
选项一起使用。
如图,用命令更加人性化显示列表格式
[root@host network-scripts]# ls -l -h
ls -R
以递归(Recursive)的方式显示目录及其子目录中的所有内容。
如图,用命令查看test下所有文件的属性
[root@host ~]# ls -l -R test/
ls —color
在字符模式中以颜色区分不同的文件。默认已开启。
通常情况下,深蓝色表示目录,白色表示一般文件,绿色表示可执行的文件,黄色标识设备文件,红色表示压缩文件。
ls -i
显示文件和目录的inode号。一个文件在系统中有特定的ID标识,文件名可能相同,inode号肯定不相同。除了硬链接文件,硬链接文件是别名。
如图,用命令查看所有文件inode号
[root@host ~]# ls -i
ls -t
以时间排序,最新的文件会排在上面。
如图,用命令通过最新时间排序查看
[root@host ~]# ls -lt
ls -r
表示反向排序、倒序输出。
如图:
结合通配符
“?”:代表任意一个字符,有且一个字符
例如
[root@host test]# ls 1?1
121 131 141
如图可知,只有121、131、141符合搜索要求,“?”只代表一个字符。
“*”:代表任意数个字符,可以是0个或者1个或者多个
例如
[root@host test]# ls 1*1
121 131 141 1abc1
如图可知,只有121、131、141、1abc1符合搜索要求,“*”代表任意字符个数。
“[]”:表示可以匹配字符组中的任意一个字符[abc]、[a-f]
[root@host test]# ls 1[234]1
121 131 141
如图可知,搜索1[234]1
只有121、131、141符合要求,会取[]中的任意字符进行匹配。
alias命令——设置别名
alias:通过别名机制简化常用的、比较长的命令
alias命令的基本格式为:
alias 命令别名='命令'
这里需要注意的是:
- 等号(=)前后不能有空格,否则就会出现语法错误了。
- 如果value中有空格或tab,则value一定要使用引号(单、双引号都行)括起来。
定义别名
了解了别名的基础知识之后,我们来看一个定义别名的例子:
[root@host ~]$ alias vi='vim'
这个例子定义了一个 vim 命令的别名,以后,当我们执行 vi 命令时,其实真正执行的是 vim 命令。是不是很简单呢!
如何查看别名
如果太热衷于设置别名,那么你就会面临着要记住很多别名的困扰,因此,学会查看所有已设置的别名,就显得尤为重要了。
查看别名的方法也很简单,直接输入 alias 命令,不加任何选项和参数即可:
[root@host ~]$ alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
可以看到,系统把当前可用的所有的别名都列出来了。仔细找一下,是不是可以看到刚才设置的那个别名了:alias vi='vim'
。
查看单独命令的别名
如果我们只想查看一个单独命令是否设置了别名,那么方法有两个。
方法一:使用 alias 命令加参数
[root@host ~]$ alias vi
alias vi='vim'
方法二:使用快捷键
当在终端中输入一个命令后,按下 Ctrl+Alt+E 组合键,假如设置了别名,那么别名自动会变成实际的命令。
注意:这个快捷键并非在所有终端中都可行,有些终端的快捷键会和这个快捷键冲突,这样的话,该方法就不好使了。
如何取消别名
别名定义的太多了,往往带来的不是方便,而是困扰。所以我们也需要掌握删除别名的方法。
那么,如何删除一个别名呢?可以使用 unalias 命令。比如,我们想删除 vi=‘vim’ 这个别名,可以这样来操作:
//删除别名设置
[root@host ~]$ unalias vi
//再看看, 已经被删除了吧
[root@host ~]$ alias
alias cp='cp -i'
alias dirA='echo work directory is /root'
alias dirB='echo work directory is $PWD'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
经过仔细观察,确实已经找不到刚才定义的 vi 别名了。
如果你想删除所有的别名,直接使用 unalias 命令的-a选项即可,只不过要谨慎使用,避免你设置的所有的别名一下子都被清除了,自己还得一个一个重新设置回来。
//删除所有别名
[root@host ~]$ unalias -a
//空空如也
[root@host ~]$ alias
如何执行命令本身而非别名
别名虽好,但也有它的弊端,比如定义的别名恰好和某个命令重名了,这就麻烦了,Shell 中执行的将永远都是别名。这里,如果我们想执行真正的那个命令而非别名,该怎么办呢?有三种方法可以解决这个问题:
- 方案一:使用命令的绝对路径。
- 方案二:切换到命令所在的目录,执行./command。
- 方案三:在命令前使用反斜线(\)。
下面我们就通过示例来演示这三个方法:
//绝对路径方法
[root@host ~]$ /bin/vi test.sh
//明确指定当前路径的方法
[root@host ~]$ cd /bin
[root@host bin]$ ./vi ~/test.sh
//使用反斜线的方法
[root@host bin]$ cd
[root@host ~]$ \vi test.sh
这里推荐大家使用最后一种方法,因为它既方便又实用。
du命令——统计目录及文件空间占用情况
du:统计指定目录(或文件)所占用磁盘空间的大小.
du 命令的基本格式为:
du [选项] [文件或目录]
常用项
选项 | 说明 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只是统计目录 |
-h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
-s | 只统计所占用空间总的大小,而不是统计每个子目录、文件的大小 |
–max-depth=n | 统计所有小于等于第n层的目录的总大小 |
注意选项-a和-s不可同时使用
du
如图,用命令查看
[root@host evolution]# du
du -a
-a
选项让 du 输出包括文件夹和文件在内的完整统计信息。
如图,用命令查看
[root@host evolution]# du -a
统计磁盘空间占用时包括所有的文件
du -h
-h
选项常常代表“展示帮助信息”,即 —help 的缩写形式。但是,du 命令却不走寻常路,它的-h
选项是 —human-readable 的缩写形式,表示以人类可读的形式展示磁盘使用量的单位名称(K/M/G)。
如图,用命令查看
[root@host evolution]# du -ah
以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果
du -s
-s
选项,是 —summarize 的缩写形式,其作用是对 du 的每一个给定参数计算其磁盘使用量,我们来看例子。
如图,用命令查看
[root@host evolution]# du -sh /root
79M /root
只统计所占用空间总的大小,而不是统计每个子目录、文件的大小
du —max-depth=n
文件夹是可以嵌套的,有的时候,我们只想展示第一级或第二级子文件夹的信息,而不希望 du 统计的层次太深,那么我们可以用 --max-depth
选项来进行控制。
如图,用命令查看/var/log目录中子目录的大小
[root@host ~]# du -h --max-depth=1 /var/log/
mkdir命令——创建新目录
mkdir 命令,是 make directories 的缩写,用于创建新目录,此命令所有用户都可以使用。
mkdir 命令的基本格式为:
mkdir [选项] 目录位置及名称
其中选项我们这里主要介绍-p
选项,-p
选项是递归创建所有目录,以创建 /home/test/demo 为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建/home、/home/test 以及 /home/test/demo。
第一种是直接建立目录
[root@host test]# mkdir cangls
[root@host test]# ls
121 123 1234 12345 131 141 1abc1 222 234 345 a b c cangls
我们建立一个名为 cangls 的目录,通过 ls 命令可以查看到这个目录已经建立。注意,我们在建立目录的时候使用的是相对路径,所以这个目录被建立到当前目录下。
第二种是使用 -p 选项递归建立目录
mkdir -p 11/22/33/44
还有另一种一次性创建多个目录的方式,例如
mkdir {a,b,c}
这里使用了{}
的扩展功能,一次性创建了三个目录
在-p
后面加-v
可以显示目录创建的规则,例如
[root@host test]# mkdir /aa/bb/cc -pv
touch命令——创建空文件
Linux的touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
touch 命令的基本格式为:
touch 文件..
touch文件有三种形式:修改文件时间、创建新的单个文件、创建新的多个文件。
第一种修改文件时间
touch test
如下图可知经过touch命令test的修改时间改变了
第二种创建新的单个文件
touch abc.txt
如下图可知使用touch命令后创建了一个txt文件
第三种创建新的多个文件
其中可以直接创建
touch 1.txt 2.txt 3.txt
如下图可知使用touch命令后同时创建了多个txt文件
还有一种创建多个txt文件
touch {4,5,6}.txt
{}
实现了扩展功能,可以用于一次性创建多个文件
关于{}
用法还有另一种
touch file{10..15}
{}
中间的字符如果是连续的可以用..
代替
ln命令——创建理解文件
ln是linux中一个非常重要命令。它的功能是为某一个文件在另外一个位置建立一个同步的链接。
ln 命令的基本格式为:
ln [-s] 源文件或目录... 链接文件或目标位置
链接文件类型
Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
软连接
软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间
ln [-s] 源文件或目录... 链接文件或目标位置
例如,给文件创建软链接
ln -s log2013.log link2013
说明:为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效
硬链接
硬链接会在你选定的位置上生成一个和源文件大小相同的文件
ln 源文件或目录... 链接文件或目标位置
例如,给文件创建硬链接
ln log2013.txt ln2013
说明:为log2013.txt创建硬链接ln2013,log2013.txt与ln2013的各项属性相同
如果我将删除链接原文件,软链接文件变为不可用,硬链接文件只有硬链接个数发生改变,仍然可以用。
[root@host ~/test]# rm -rf log2013.log
[root@host ~/test]# ll
[root@host ~/test]# rm -rf log2013.txt
[root@host ~/test]# ll
软链接和硬链接区别
文件类型 | 软链接文件 | 硬链接文件 |
---|---|---|
删除源文件后 | 失效 | 仍然可用(文件占用空间与源文件相同) |
使用范围 | 适用于文件和目录 | 仅适用于文件 |
保存位置 | 与源文件可在不同的文件系统中 | 必须与源文件在同一个文件系统(即同一个分区)中 |
与源文件的关系 | 相当于快捷方式 | 相当于给文件起要个别名 |
inode号码 | inode号码不同 | inode号码相同 |
可以用图来表示硬链接和软链接。在Linux中,文件名和文件数据是分开存储的。
这里有两点要注意:
第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
第二,ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
cp命令——复制文件或目录
cp命令的功能是将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令 一样,功能非常强大。
cp 命令的基本格式为:
cp [选项] 源文件或目录 目标文件或目录
常用项
选项 | 说明 |
---|---|
-f | 覆盖目标同名文件或目录时不进行提醒,而直接强制复制 |
-i | 覆盖目标同名文件或目录时提醒用户确认 |
-p | 复制时保持源文件的权限、属主及时间标记等属性不变 |
-r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
注意:复制多个文件或目录时,目标位置必须是目录,且目标目录必须已存在
cp命令基本用法
cp 命令既可以复制文件,也可以复制目录。我们先来看看如何复制文件,例如:
//建立源文件
[root@host ~]# touch cangls
//把源文件不改名复制到 /tmp/ 目录下
[root@host ~]# cp cangls /tmp/
如果需要改名复制,则命令如下:
//改名复制
[root@host ~]# cp cangls /tmp/bols
如果复制的目标位置已经存在同名的文件,则会提示是否覆盖,因为 cp 命令默认执行的是“cp -i”的别名,例如:
//目标位置有同名文件,所以会提示是否覆盖
[root@host ~]# cp cangls /tmp/
cp:是否覆盖"/tmp/cangls"?y
接下来我们看看如何复制目录,其实复制目录只需使用“-r”选项即可,例如:
//建立测试目录
[root@localhost ~]# mkdir movie
//目录原名复制
[root@localhost ~]# cp -r /root/movie/ /tmp/
注意:cp是cp -i的别名,要想不使用cp -i的别名功能,有三种方法:取消别名(alias cp);使用cp这个外部命令的完整路径,进入/usr/bin/cp;\cp也能取消cp的别名功能。
rm命令——删除文件或目录
当 Linux 系统使用很长时间之后,可能会有一些已经没用的文件(即垃圾),这些文件不但会消耗宝贵的硬盘资源,还是降低系统的运行效率,因此需要及时地清理。rm 是强大的删除命令,它可以永久性地删除文件系统中指定的文件或目录。
rm 命令的基本格式为:
rm [选项] 源文件或目录 目标文件或目录
常用项
选项 | 说明 |
---|---|
-f | 强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直接删除目标文件或目录。 |
-i | 和 -f 正好相反,在删除文件或目录之前,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录。 |
-r | 递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件。 |
注意,rm 命令是一个具有破坏性的命令,因为 rm 命令会永久性地删除文件或目录,这就意味着,如果没有对文件或目录进行备份,一旦使用 rm 命令将其删除,将无法恢复,因此,尤其在使用 rm 命令删除目录时,要慎之又慎。
基本用法
rm 命令如果任何选项都不加,则默认执行的是”rm -i 文件名”,也就是在删除一个文件之前会先询问是否删除。例如:
[root@host ~/test]# touch cangls
[root@host ~/test]# rm cangls
//删除前会询问是否删除
rm:是否删除普通空文件"cangls"?y
删除目录
如果需要删除目录,则需要使用”-r”选项。例如:
//递归建立测试目录
[root@host ~/movie]# mkdir -p test/lm/movie/jp
[root@host ~/movie]# rm test
rm:无法删除"/test/": 是一个目录
//#如果不加"-r"选项,则会报错
[root@host ~/movie]# rm -r test
//会分别询问是否进入子目录、是否删除子目录
rm:是否进入目录"test"? y
rm:是否进入目录"test/lm"? y
rm:是否进入目录"test/lm/movie"? y
rm:是否删除目录 "test/lm/movie/jp"?y
rm:是否删除目录 "test/lm/movie"?y
rm:是否删除目录 "test/lm"?y
rm:是否删除目录 "test"?y
大家会发现,如果每级目录和每个文件都需要确认,那么在实际使用中简直是灾难!
强制删除
如果要删除的目录中有 1 万个子目录或子文件,那么普通的 rm 删除最少需要确认 1 万次。所以,在真正删除文件的时候,我们会选择强制删除。例如:
//重新建立测试目录
[root@host ~/movie]# mkdir -p test/lm/movie/jp
//强制删除,一了百了
[root@host ~/movie]# rm -rf test
加入了强制功能之后,删除就会变得很简单,但是需要注意,数据强制删除之后无法恢复,除非依赖第三方的数据恢复工具,如 extundelete 等。但要注意,数据恢复很难恢复完整的数据,一般能恢复 70%~80% 就很难得了。所以,与其想要数据恢复,不如养成良好的操作习惯。
虽然 -rf
选项是用来删除目录的,但是删除文件也不会报错。所以,为了使用方便,一般不论是删除文件还是删除目录,都会直接使用 -rf
选项。
mv命令——移动文件或目录
mv 命令(move 的缩写),既可以在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名。
mv 命令的基本格式为:
mv [选项]... 源文件或目录... 目标文件或目录
常用项
选项 | 作用 |
---|---|
-f | 强制覆盖,如果目标文件已经存在,则不询问, 直接强制覆盖 |
-i | 如果目标文件已经存在,则询问用户 是否覆盖(默认选项) |
-v | 显示文件或目录的移动过程 |
需要注意的是,同 rm 命令类似,mv 命令也是一个具有破坏性的命令,如果使用不当,很可能给系统带来灾难性的后果。
移动文件或目录
//移动之后,源文件会被删除,类似剪切
[root@host ~]# mv file15 /tmp
[root@host ~]# mkdir test
//也可以移动目录。和 rm、cp 不同的是,mv 移动目录不需要加入 "-r" 选项
[root@host ~]# mv test/ /tmp
如果移动的目标位置已经存在同名的文件,则同样会提示是否覆盖,因为 mv 命令默认执行的也是 “mv -i” 的别名,例如:
//重新建立文件
[root@localhost ~]# touch cangls
[root@localhost ~]# mv cangls /tmp
//由于 /tmp 目录下已经存在 cangls 文件,所以会提示是否覆盖,需要手工输入 y 覆盖移动
mv:县否覆盖"tmp/cangls"?y
强制移动
之前说过,如果目标目录下已经存在同名文件,则会提示是否覆盖,需要手工确认。这时如果移动的同名文件较多,则需要一个一个文件进行确认,很不方便。
如果我们确认需要覆盖已经存在的同名文件,则可以使用 -f
选项进行强制移动,这就不再需要用户手工确认了。例如:
//重新建立文件
[root@localhost ~]# touch cangls
//就算 /tmp/ 目录下已经存在同名的文件,由于"-f"选项的作用,所以会强制覆盖
[root@localhost ~]# mv -f cangls /tmp
改名
如果源文件和目标文件在同一目录中,那就是改名。例如:
//把 lmls 改名为 bols
[root@host ~]# mv lmls bols
目录也可以按照同样的方法改名。
which命令——查找命令文件存放目录
which 用于查看给定命令的绝对路径。
which 可指定一个或多个参数。对于它的每个参数,它将可执行文件的完整路径打印到 stdout。它通过使用与 bash(1) 相同的算法在环境变量 PATH 中列出的目录中搜索可执行文件或脚本来实现这一点。
which 命令的基本格式为:
//默认当找到第一个目标后不再继续查找
which 命令|程序名
//在所有搜索路径中查找
which -a 命令|程序名
如果想要知道某个命令所在路径可用用which来查找
[root@host ~]# which cd
/usr/bin/cd
[root@host ~]# which -a touch
/usr/bin/touch
一般情况下,which 是一个别称,可以查看 which 的详细定义
root@host ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/usr/bin/alias
/usr/bin/which
打印帮助信息
[root@host ~]# which --help
find命令——查找文件或目录
find是用来在文件系统上查找复合条件的文件。
find命令有非常强大的灵活性,可以指定丰富的搜索条件(如文件权限、属主、属组、文件类型、日期和大小等)来定位系统中的文件和目录,同时还支持对对搜索的结果进行命令操作。
find 命令的基本格式为:
find [搜索范围] [查找条件表达式]
注意:查找范围是指查找文件或子目录的目标位置;查找条件表达式是指按照条件类型查找。
常用查找条件类型
查找类型 | 关键字 | 说明 |
---|---|---|
按名称查找 | -name | 根据目标文件的名称进行查找,允许使用“*”及“?”通配符 |
按文件大小查找 | -size | 根据目标文件的大小进行查找 一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件常用的容量单位包括kB(注意k是小写)、MB、GB |
按文件属主查找 | -user | 根据文件是否属于目标用户进行查找 |
按文件类型查找 | -type | 根据文件的类型进行查找 文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件©等块设备文件(b):成块读取数据的设备(硬盘,内存,光驱) 字符设备文件©:按单个字符读取数据的设备(键盘,鼠标) |
查找条件
根据文件名查找——name
//查找 movie 目录下所有文件名以 .txt 结尾的文件
[root@host ~]# find /usr -name '[0-9].txt'
//查找 /usr 目录下所有文件名刚好为1个字符的文件
[root@host ~]# find /usr -name '?.txt'
//查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src
[root@host ~]# find /usr -path '*/src/*.txt'
根据文件类型查找——type
//检索 /usr 下所有文件名以 python 开头的目录
[root@host ~]# find /usr -type d -name 'python*'
根据文件大小来查找——size
//查找大于100M的文件
[root@host ~]# find /sys -size +100M
根据文件的所属权来查找——user
//查找/var目录下属主为root,且属组为mail的所有文件或目录
find /var -user root -a -group mail
根据inode号进行查找——inum
//根据33823474查找对应文件为bols
[root@host ~]# find / -inum 33823474
/root/bols
根据修改时间来查找——mtime
//查找20天以前的文件
[root@host ~]# find -mtime +20
find命令实现多个查找
逻辑运算符
find命令支持一些复杂的搜索方式:逻辑与、逻辑或、逻辑非。而我这里主要介绍的是逻辑与(且)、逻辑或(或)。
-a
:and,逻辑与
find命令也支持逻辑运算符选项,其中-a
代表逻辑与运算,也就是-a
的两个条件都成立,find搜索的结果才成立(其中有一个不成立都不行)。
例如
//在当前目录下搜索大于2MB,并且文件类型是普通文件的文件
[root@localhost ~ ] # find . -size +2M -a -type f
-o
:or,逻辑或
-o
选项代表逻辑或运算,也就是-o
的两个条件只要其中一个成立,find命令就可以找到结果。
例如:
//在当前目录下搜索文件要么是大小大于2MB的文件,要么是bols的文件,两个都可以搜索到。
[root@localhost ~ ] # find . -size +2M -o -name bols
./.cache/mozilla/firefox/uzbm9w8w.default-default/startupCache/startupCache.8.little
./.cache/mozilla/firefox/uzbm9w8w.default-default/startupCache/scriptCache-current.bin
./.mozilla/firefox/uzbm9w8w.default-default/places.sqlite
./.mozilla/firefox/uzbm9w8w.default-default/favicons.sqlite
./bols
exec用法
-exec
参数后面跟的是Linux命令,它是以分号“;”为结束标志,由于各个系统中分号会有不同的意义,因此正在分号前面加上反斜杠转义符“\”。
find 命令exec用法的基本格式为:
find 搜索路径 [选项] 搜索内容 -exec 命令 {} \;
注意:
1.{}
代表前面find查找出来的文件文件名
2.基本格式,只要写 -exec
,命令最后一定要写 \;
。
例如
//查找名字中含有“.txt”的普通文件,并使用ls -l命令将它列出来
[root@host ~]# find ./ -type f -a -name "*.txt" -exec ls -l {} \;
xargs命令
当在find命令中利用-exec对查找到的结果进行进一步处理时,有时可能会出现问题。这是因为-exec是将find所找到的结果一次性地送给后面的命令进行处理,有时候find可能会找到大量的文件,超出了后面的命令所能处理的参数范围,这时就会出现溢出错误,错误信息通常是“参数列太长”或“参数列溢出”,这时就可以使用xargs命令。xargs虽然本身是一个独立的Linux命令,但通常都是被用来配合find命令使用。通过xargs,可以将find所找到的结果分批次地送给之后的命令进行处理,从而避免出现溢出问题。
xagrs 命令的基本格式为
find 搜索路径 [选项] 搜索内容 | xargs 命令
例如
//查找名字中以“.cfg”结尾的文件,并使用ls -l命令将它列出来
[root@host ~]# find ./ -name "*.cfg" | xargs ls -l
find命令删除
find 查看删除的三种方式,如删除当前目录下的txt文件:
方法1:xargs rm -f
[root@host ~/movie]# find ./ -type f -name "*txt" | xargs rm -f
方法2:-exec rm -f
[root@host ~/movie]# find ./ -type f -name "*txt" -exec rm -f {} \;
-exec命令是查找到的每个文件调用一次rm命令,因此速度最慢
方法3:-delete
[root@host ~/movie]# find ./ -type f -name "*txt" -delete
如果一次删除大量文件,建议采用第三种方式。经测试在删除千万级文件时,第三种方式比前两种快百倍。
还没有评论,来说两句吧...