Linux文件与目录管理
- 1.目录与路径
- 1.1 cd
- 1.2 pwd
- 1.3 mkdir
- 1.4 rmdir
- 1.5 ls
- 1.6 cp
- 1.7 rm
- 1.8 mv
- 2.可执行文件路径的变量:$PATH
- 3.从字符串中获取目录名称和文件名称
- 4.文件内容读取
- 4.1 cat与tac
- 4.2 nl
- 4.3 more和less
- 4.4 head与tail
- 4.5 od
- 5 使用touch来改变文件的时间
- 6 文件的隐藏属性
- 7.文件的搜索
- 7.1 指令文件的搜索
- 7.2 普通文件的搜索
1.目录与路径
几种特殊的目录:
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前使用者身份”所在的主文件夹
~account 代表 account 这个使用者的主文件夹( account是个帐号名称)
[fle@CentOS7 ~]$ pwd
/home/fle
[fle@CentOS7 ~]$ cd .
[fle@CentOS7 ~]$ cd ..
[fle@CentOS7 home]$ cd ~
[fle@CentOS7 ~]$ cd -
/home
[fle@CentOS7 home]$ pwd
/home
[fle@CentOS7 home]$
根目录的.
和..
其实都是根目录本身:
[fle@CentOS7 home]$ cd /
[fle@CentOS7 /]$ ls -al
总用量 28
dr-xr-xr-x. 17 root root 244 6月 21 16:56 .
dr-xr-xr-x. 17 root root 244 6月 21 16:56 ..
-rw-r--r-- 1 root root 0 6月 21 16:56 .autorelabel
lrwxrwxrwx. 1 root root 7 5月 18 20:57 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 5月 18 21:03 boot
drwxr-xr-x 20 root root 3400 9月 30 09:21 dev
drwxr-xr-x. 179 root root 12288 10月 12 19:47 etc
drwxr-xr-x. 7 root root 73 9月 29 16:55 home
lrwxrwxrwx. 1 root root 7 5月 18 20:57 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 5月 18 20:57 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 media
drwxr-xr-x. 2 root root 6 4月 11 2018 mnt
drwxr-xr-x. 3 root root 16 5月 18 21:00 opt
dr-xr-xr-x 243 root root 0 9月 28 21:04 proc
dr-xr-x---. 7 root root 247 10月 13 20:14 root
drwxr-xr-x 58 root root 1600 10月 13 06:31 run
lrwxrwxrwx. 1 root root 8 5月 18 20:57 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 4月 11 2018 srv
dr-xr-xr-x 13 root root 0 9月 28 21:04 sys
drwxrwxrwt. 18 root root 4096 10月 13 20:14 tmp
drwxr-xr-x. 13 root root 155 5月 18 20:57 usr
drwxr-xr-x. 24 root root 4096 5月 18 21:15 var
可以看到.
和..
的属性都是一样的。
下面介绍四种最常见的目录操作方式:cd、pwd、mkdir、rmdir
1.1 cd
cd是Change Directory的缩写, 这是用来变换工作目录的指令。看一个例子:
[fle@CentOS7 ~]$ pwd //显示当前目录,登录之后的终端就是登录账号的主文件夹
/home/fle
[fle@CentOS7 ~]$ su //切换root身份,目录不变
密码:
[root@CentOS7 fle]# pwd //显示当前目录,其实[root@CentOS7 fle]中的fle的位置就是表示了目前所处的文件夹
/home/fle
[root@CentOS7 fle]# cd ~ //由于当前的账号是root,所以~表示的是/root,也就是root账号的主文件夹
[root@CentOS7 ~]# pwd
/root
[root@CentOS7 ~]# cd - //cd -表示去上一次的目录,就是/home/fle,身份是不会变的
/home/fle
[root@CentOS7 fle]# pwd
/home/fle
[root@CentOS7 fle]#
1.2 pwd
pwd是Print Working Directory的缩写, 也就是显示目前所在目录的指令。
[fle@CentOS7 /]$ cd /lib
[fle@CentOS7 lib]$ pwd
/lib
[fle@CentOS7 lib]$ pwd -P
/usr/lib
pwd 命令的 -P 选项用于显示物理路径,即解析符号链接后的实际路径。当你在符号链接目录中运行 pwd 命令时,使用 -P 选项会返回该符号链接所指向的真实物理路径。根目录下的lib目录是一个链接目录,实际的内容存放在/usr/lib中。
1.3 mkdir
mkdir用于创建新的空目录。
[fle@CentOS7 lib]$ mkdir --help
用法:mkdir [选项]... 目录...
Create the DIRECTORY(ies), if they do not already exist.Mandatory arguments to long options are mandatory for short options too.-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask-p, --parents no error if existing, make parent directories as needed-v, --verbose print a message for each created directory-Z set SELinux security context of each created directoryto the default type--context[=CTX] like -Z, or if CTX is specified then set the SELinuxor SMACK security context to CTX--help 显示此帮助信息并退出--version 显示版本信息并退出GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告mkdir 的翻译错误
要获取完整文档,请运行:info coreutils 'mkdir invocation'
重上面可以看到mkdir有4哥可选的参数:
①-m
设定目录的权限
②-p
当所创建的目录中存在多层目录结构时不会报错,如mkdir ./test1/test2/test3
这样,这样的写法在创建的时候是先创建test3目录,而./test1/test2
目录不存在,所以会报错,加-p就不会报错。
③-v
在每创建一个目录时打印信息,告诉你创建了哪个目录。
④-Z
为每个创建的目录设置默认的 SELinux 安全上下文。
其中常用的是-m和-p:
[fle@CentOS7 桌面]$ mkdir -m 777 test1
[fle@CentOS7 桌面]$ mkdir ./test1/test2/test3
mkdir: 无法创建目录"./test1/test2/test3": 没有那个文件或目录
[fle@CentOS7 桌面]$ mkdir -p ./test1/test2/test3
[fle@CentOS7 桌面]$ cd ./test1
[fle@CentOS7 test1]$ tree
.
└── test2└── test32 directories, 0 files
[fle@CentOS7 test1]$ cd ..
[fle@CentOS7 桌面]$ ls -l test1
总用量 0
drwxrwxr-x 3 fle fle 19 10月 13 21:34 test2
1.4 rmdir
删除空的目录,非空的目录不能用rmdir来删除。
[fle@CentOS7 test1]$ rmdir --help
用法:rmdir [选项]... 目录...
删除指定的空目录。--ignore-fail-on-non-empty忽略仅由目录非空产生的所有错误-p, --parents remove DIRECTORY and its ancestors; e.g., 'rmdir -p a/b/c' issimilar to 'rmdir a/b/c a/b a'-v, --verbose output a diagnostic for every directory processed--help 显示此帮助信息并退出--version 显示版本信息并退出GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告rmdir 的翻译错误
要获取完整文档,请运行:info coreutils 'rmdir invocation'
下面的例子先创建目录再删除目录:
[fle@CentOS7 桌面]$ rm -r test1
[fle@CentOS7 桌面]$ mkdir -p test1/test2/test4 test1/test3
[fle@CentOS7 桌面]$ touch test1/test3/file
[fle@CentOS7 桌面]$ tree test1
test1
├── test2
│ └── test4
└── test3└── file3 directories, 1 file
[fle@CentOS7 桌面]$ rmdir -p test1/test2/test4
rmdir: 删除目录 "test1" 失败: 目录非空
[fle@CentOS7 桌面]$ tree test1
test1
└── test3└── file1 directory, 1 file
从上面的结果可以看出,rmdir的-p选项会一直删除空目录直到遇到非空的父目录。对于非空的目录,使用rm -r
命令来删除。
1.5 ls
ls用来列举目录。
其中常用的是-l -a -d
。注意ls命令后面是可以跟目录的,列出指定目录的文件。
[fle@CentOS7 ~]$ ls -a /
. .autorelabel boot etc lib media opt root sbin sys usr
.. bin dev home lib64 mnt proc run srv tmp var
[fle@CentOS7 ~]$ ls -l /
总用量 28
lrwxrwxrwx. 1 root root 7 5月 18 20:57 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 5月 18 21:03 boot
drwxr-xr-x 20 root root 3360 10月 14 21:34 dev
drwxr-xr-x. 179 root root 12288 10月 14 21:34 etc
drwxr-xr-x. 7 root root 73 9月 29 16:55 home
lrwxrwxrwx. 1 root root 7 5月 18 20:57 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 5月 18 20:57 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 media
drwxr-xr-x. 2 root root 6 4月 11 2018 mnt
drwxr-xr-x. 3 root root 16 5月 18 21:00 opt
dr-xr-xr-x 241 root root 0 10月 14 21:33 proc
dr-xr-x---. 7 root root 247 10月 14 20:58 root
drwxr-xr-x 58 root root 1600 10月 14 22:08 run
lrwxrwxrwx. 1 root root 8 5月 18 20:57 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 4月 11 2018 srv
dr-xr-xr-x 13 root root 0 10月 14 21:33 sys
drwxrwxrwt. 19 root root 4096 10月 14 22:08 tmp
drwxr-xr-x. 13 root root 155 5月 18 20:57 usr
drwxr-xr-x. 24 root root 4096 5月 18 21:15 var
[fle@CentOS7 ~]$ ls -ld /
dr-xr-xr-x. 17 root root 244 6月 21 16:56 /
1.6 cp
用于复制。
下面使用常用的-a -i -p -r
进行实验。
(1)使用-i来提示是否覆盖
[root@CentOS7 ~]# ls -a
. .bash_logout .config .local .xautheLKGRv
.. .bash_profile .cshrc .pki .xauthWSzuls
anaconda-ks.cfg .bashrc .dbus .tcshrc
.bash_history .cache initial-setup-ks.cfg .viminfo
[root@CentOS7 ~]# cd .bashrc
-bash: cd: .bashrc: 不是目录
[root@CentOS7 ~]# cp -i ~/.bashrc /tmp/.bashrc
[root@CentOS7 ~]# cp -i ~/.bashrc /tmp/.bashrc
cp:是否覆盖"/tmp/.bashrc"? n
[root@CentOS7 ~]# cd /tmp
[root@CentOS7 tmp]# ls -a
.
..
.bashrc
.esd-1000
.font-unix
.ICE-unix
ssh-lzD8MBGwfOho
systemd-private-02ca80909c574bad90e53ac0130e9364-bolt.service-uuHLVh
systemd-private-02ca80909c574bad90e53ac0130e9364-chronyd.service-PgzlPF
systemd-private-02ca80909c574bad90e53ac0130e9364-colord.service-zZD2Mw
systemd-private-02ca80909c574bad90e53ac0130e9364-cups.service-tH2JOm
systemd-private-02ca80909c574bad90e53ac0130e9364-fwupd.service-uEKbie
systemd-private-02ca80909c574bad90e53ac0130e9364-named.service-EIEAvA
systemd-private-02ca80909c574bad90e53ac0130e9364-rtkit-daemon.service-74xmIZ
.Test-unix
tracker-extract-files.1000
VMwareDnD
vmware-root_767-4256479648
vmware-root_785-4282170929
.X0-lock
.X11-unix
.XIM-unix
yum_save_tx.2024-10-14.06-31.ojtghv.yumtx
yum_save_tx.2024-10-15.06-09.9E4H_u.yumtx
yum_save_tx.2024-10-22.11-29.PJ1x7e.yumtx
yum_save_tx.2024-10-23.06-29.YZom6B.yumtx
(2)不加任何选项的复制
cp不加任何选项的情况下,是不会复制文件的User、Group的,文件的创建时间也会不一样。
[root@CentOS7 tmp]# cp /var/log/wtmp .
[root@CentOS7 tmp]# ls -l /var/log/wtmp ./wtmp
-rw-rw-r--. 1 root utmp 63360 10月 23 10:11 /var/log/wtmp
-rw-r--r-- 1 root root 63360 10月 23 16:45 ./wtmp
从上面可以看到,使用cp命令时,如果没有加任何的选项,则复制后的文件权限和所属User、Group是会变的。另外,复制的文件的创建时间也会是cp命令的执行时间。
[fle@CentOS7 ~]$ su
密码:
[root@CentOS7 fle]# touch fle
[root@CentOS7 fle]# ls -l fle
-rw-r--r-- 1 root root 0 10月 23 18:24 fle
[root@CentOS7 fle]# su fle
[fle@CentOS7 ~]$ cp fle fle_copy
[fle@CentOS7 ~]$ ls -l fle fle_copy
-rw-r--r-- 1 root root 0 10月 23 18:24 fle
-rw-r--r-- 1 fle fle 0 10月 23 18:24 fle_copy
从上面的结果可以看出,使用fle账号进行复制时,文件的User和Group都是fle,这是因为cp命令希望的是用什么账号进行复制操作后,这个复制的文件应该是属于这个账号的。
(3)使用-a
选项来保持完全的复制
[root@CentOS7 tmp]# cp -a /var/log/wtmp .
cp:是否覆盖"./wtmp"? y
[root@CentOS7 tmp]# ls -l /var/log/wtmp ./wtmp
-rw-rw-r--. 1 root utmp 63360 10月 23 10:11 /var/log/wtmp
-rw-rw-r--. 1 root utmp 63360 10月 23 10:11 ./wtmp
可以看到,使用-a
选项可以复制文件的权限和User、Group。
对于一些没有读取权限的文件,使用-a
来复制其实也是无效的:
[fle@CentOS7 tmp]$ cp -a /etc/shadow /tmp
cp: 无法打开"/etc/shadow" 读取数据: 权限不够
Tips:由于fle的身份并不能随意修改文件的拥有者与群组,与拥有者、 群组相关的, 原本fle身份无法进行的动作, 即使加上 -a 选项, 也是无法达成完整复制权限的
(4)使用-r
来递归复制,用于复制目录
[fle@CentOS7 桌面]$ ls
dir familyOfWang familyOfZhu file file.txt fle.txt test1
[fle@CentOS7 桌面]$ tree test1
test1
├── fle
└── test3└── file1 directory, 2 files
[fle@CentOS7 桌面]$ cp -r test1 test1_copy
[fle@CentOS7 桌面]$ tree test1_copy
test1_copy
├── fle
└── test3└── file1 directory, 2 files
(5)使用-s -l
来创建链接复制文件
使用-l
:复制的是文件本身
使用-s
:复制的是文件的链接
[fle@CentOS7 桌面]$ touch file
[fle@CentOS7 桌面]$ vim file
[fle@CentOS7 桌面]$ cp -l file file_l
[fle@CentOS7 桌面]$ cp -s file file_s
[fle@CentOS7 桌面]$ ls -l file*
-rw-rw-r-- 2 fle fle 191511 10月 23 22:38 file
-rw-rw-r-- 2 fle fle 191511 10月 23 22:38 file_l
lrwxrwxrwx 1 fle fle 4 10月 23 22:39 file_s -> file
此外,如果对链接文件在进行复制:
[fle@CentOS7 桌面]$ cp file_s file_s1
[fle@CentOS7 桌面]$ cp -l file_s file_s2
[fle@CentOS7 桌面]$ cp -d file_s file_s3
[fle@CentOS7 桌面]$ ls -l file_s*
lrwxrwxrwx 1 fle fle 4 10月 23 22:39 file_s -> file
-rw-rw-r-- 1 fle fle 191511 10月 23 22:42 file_s1
-rw-rw-r-- 3 fle fle 191511 10月 23 22:38 file_s2
lrwxrwxrwx 1 fle fle 4 10月 23 22:43 file_s3 -> file
如果要复制的是链接文件,那么如果希望复制的是链接文件本身,那就要使用-d
选项了。
1.7 rm
删除文件/目录
[fle@CentOS7 桌面]$ ls
dir familyOfZhu file_l file_s1 file_s3 test1
familyOfWang file file_s file_s2 fle.txt test1_copy
[fle@CentOS7 桌面]$ rm file*
[fle@CentOS7 桌面]$ ls
dir familyOfWang familyOfZhu fle.txt test1 test1_copy
[fle@CentOS7 桌面]$ rm test1 test1_copy
rm: 无法删除"test1": 是一个目录
rm: 无法删除"test1_copy": 是一个目录
[fle@CentOS7 桌面]$ rm -r test1 test1_copy
[fle@CentOS7 桌面]$ ls
dir familyOfWang familyOfZhu fle.txt
[fle@CentOS7 桌面]$ rm test1 test1_copy
rm: 无法删除"test1": 没有那个文件或目录
rm: 无法删除"test1_copy": 没有那个文件或目录
[fle@CentOS7 桌面]$ rm -f test1 test1_copy
[fle@CentOS7 桌面]$ ls
dir familyOfWang familyOfZhu fle.txt
[fle@CentOS7 桌面]$ rm -i fle.txt
rm:是否删除普通空文件 "fle.txt"?y
[fle@CentOS7 桌面]$ ls
dir familyOfWang familyOfZhu
1.8 mv
移动文件/目录
[fle@CentOS7 桌面]$ ls
dir familyOfWang familyOfZhu fle new
[fle@CentOS7 桌面]$ mv dir familyOfWang familyOfZhu fle new
[fle@CentOS7 桌面]$ tree
.
└── new├── dir│ └── file├── familyOfWang│ ├── WangDamao│ ├── WangErmao│ └── WangSanmao├── familyOfZhu│ └── ZhangXiaozhu└── fle8 directories, 2 files
[fle@CentOS7 桌面]$ mv new new2
[fle@CentOS7 桌面]$ ls
new2
要注意的是,mv是没有-r选项的。
2.可执行文件路径的变量:$PATH
指令ls完整文件名为: /bin/ls( 这是绝对路径) , 那你会不会觉得很奇怪: “为什么我可以在任何地方执行/bin/ls这个指令呢? ” 为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH 的帮助所致呀!
当我们在执行一个指令的时候, 举例来说“ls”好了, 系统会依照PATH的设置去每个PATH定义的目录下搜寻文件名为ls的可可执行文件, 如果在PATH定义的目录中含有多个文件名为ls的可可执行文件, 那么先搜寻到的同名指令先被执行!
①不同账号的PATH是不同的
[fle@CentOS7 桌面]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/fle/.local/bin:/home/fle/bin
[fle@CentOS7 桌面]$ su
密码:
[root@CentOS7 桌面]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/fle/.local/bin:/home/fle/bin
[root@CentOS7 桌面]# su -
上一次登录:日 10月 13 23:00:31 CST 2024pts/0 上
[root@CentOS7 ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PATH是以:
作为间隔的。切换时要使用su -
才不会继承fle账号的一些环境变量。
②PATH是可以修改的
从上面可以知道/bin
对于root账户来说是属于PATH的。以ls
为例,将ls命令由/bin/ls
搬移到/root/ls
。由于此时PATH中没有/root
,所以找不到ls命令,当把/root
添加到PATH中就可以使用ls了。
[root@CentOS7 ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@CentOS7 ~]# mv /bin/ls /root
[root@CentOS7 ~]# ls
bash: ls: 未找到命令...
相似命令是: 'lz'
[root@CentOS7 ~]# PATH="${PATH}:/root"
[root@CentOS7 ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root
[root@CentOS7 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg ls
[root@CentOS7 ~]# mv /root/ls /bin
[root@CentOS7 ~]# ls
-bash: /root/ls: 没有那个文件或目录
[root@CentOS7 ~]# exit
登出
[root@CentOS7 桌面]# su -
上一次登录:日 10月 13 23:03:30 CST 2024pts/0 上
[root@CentOS7 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
3.从字符串中获取目录名称和文件名称
[fle@CentOS7 桌面]$ cd new2
[fle@CentOS7 new2]$ tree
.
├── dir
│ └── file
├── familyOfWang
│ ├── WangDamao
│ ├── WangErmao
│ └── WangSanmao
├── familyOfZhu
│ └── ZhangXiaozhu
└── fle7 directories, 2 files
[fle@CentOS7 new2]$ basename ./dir/file
file
[fle@CentOS7 new2]$ dirname ./dir/file
./dir
4.文件内容读取
4.1 cat与tac
tac就是将cat的顺序反过来。cat和tac并不常用,因为文件内容太多时不好用。
[fle@CentOS7 new2]$ touch file
[fle@CentOS7 new2]$ vim file
[fle@CentOS7 new2]$ cat file
11111111111
22222222222
33333333333
[fle@CentOS7 new2]$ tac file
33333333333
22222222222
11111111111
4.2 nl
4.3 more和less
more和less都是用于显示的命令,只不过可以进行分页显示。页的大小取决于终端显示窗口的大小。
more:
less:
more或者less最有用的功能就是用于搜索:
[fle@CentOS7 桌面]$ more file
搜索111:此时如果使用/111
是找不到东西的,因为more的/是往下找,而除了目前显示的这一页,后面已经没有111了,改用less进行前向搜索:
[fle@CentOS7 桌面]$ less file
按下回车后:
4.4 head与tail
假如我想要显示 ./file 的第 4 到第 5 行呢? 答: 这个应该不算难, 想一想, 在第 4 到第 5行, 那么我取前 5 行, 再取后2行, 所以结果就是: “ head -n 5 file | tail -n 2 ”, 这样就可以得到第 4 到第 5行之间的内容了!这两个指令中间有个管线 (|) 的符号存在, 这个管线的意思是: “前面的指令所输出的讯息, 请通过管线交由后续的指令继续使用”的意思。
创建file文件并写入如下内容:
[fle@CentOS7 桌面]$ touch file
[fle@CentOS7 桌面]$ vim file
[fle@CentOS7 桌面]$ head -n 5 file | tail -n 2
4
5
[fle@CentOS7 桌面]$
4.5 od
对于可执行文件来说,使用上面的命令直接读取内容会导致乱码,这时候可以使用od
命令来显示
5 使用touch来改变文件的时间
文件的时间有三种:
其中,最常关注的就是mtime。
[fle@CentOS7 桌面]$ ll /etc/man_db.conf
-rw-r--r--. 1 root root 5171 10月 31 2018 /etc/man_db.conf
[fle@CentOS7 桌面]$ ll --time=atime /etc/man_db.conf
-rw-r--r--. 1 root root 5171 10月 25 03:50 /etc/man_db.conf
[fle@CentOS7 桌面]$ ll --time=ctime /etc/man_db.conf
-rw-r--r--. 1 root root 5171 5月 18 20:58 /etc/man_db.conf
[fle@CentOS7 桌面]$ date
2024年 10月 25日 星期五 21:32:39 CST
ll
相当于ls -l
,从上面可以看到,ll默认输出的时间是mtime。
6 文件的隐藏属性
chattr指令只能在Ext2/Ext3/Ext4的 Linux 传统文件系统上面完整生效, 其他的文件系统可能就无法完整的支持这个指令了, 例如 xfs 仅支持部份参数而已。
7.文件的搜索
7.1 指令文件的搜索
搜索指令文件ls
和history
的位置
[fle@CentOS7 桌面]$ which ls
alias ls='ls --color=auto'/bin/ls
[fle@CentOS7 桌面]$ which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'/bin/alias/usr/bin/which
[fle@CentOS7 桌面]$ which history
/usr/bin/which: no history in (/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/fle/.local/bin:/home/fle/bin)
上面举了三个例子:ls可以搜索到,which搜索到两个结果,history搜索不到。
之所以which有两个结果的原因:alias表示的是命令的别名,也就是说/bin/alias
等价于/bin/alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde
[fle@CentOS7 桌面]$ /bin/alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde ls
/bin/ls
而history之所以搜索得不到是因为which命令搜索的是PATH,而history是bash内置的命令,所以找不到。另外,which是显示找到的第一个位置,加上-a
选项后可以显示所有找到的位置。
[fle@CentOS7 桌面]$ which -a ls
alias ls='ls --color=auto'/bin/ls/usr/bin/ls
[fle@CentOS7 桌面]$ which ls
alias ls='ls --color=auto'/bin/ls
7.2 普通文件的搜索
搜索一般的命令有find、whereis、locate
。效率:locate > whereis > find。
(1)whereis
(2)locate
(3)find