Linux 之旅 4:文件与目录管理

本文详细介绍了Linux系统中的文件与目录管理,包括相对路径与绝对路径的概念、目录的相关操作如cd、pwd、mkdir、rmdir命令的使用,以及环境变量$PATH的作用。文章还讲解了文件和目录的管理,如ls、cp、rm、mv命令的用法,以及文件内容的查看方法。此外,还探讨了文件与目录的权限、隐藏属性、特殊权限设置和文件搜索工具的使用。
摘要由CSDN通过智能技术生成

Linux 之旅 4:文件与目录管理

目录与路径

相对路径与绝对路径

这个相当基础,所以这里不过多阐述,不了解的可以搜索其他资料学习。

目录的相关操作

在Linux中有这么几个目录相关的特殊符号需要留意:

  • .表示当前目录
  • ..表示上层目录
  • -表示之前所在的目录
  • ~表示当前用户的家目录
  • ~account表示用户account的家目录

和目录相关的命令主要有:

  • cd:将当前的工作目录切换到指定目录
  • pwd:打印当前工作目录的完整路径
  • mkdir:新建目录
  • rmdir:删除目录
cd

我们看cd命令(change directory)的实际使用示例:

[icexmoon@xyz ~]$ su -
密码:
上一次登录:一 89 16:16:12 CST 2021pts/0 上
ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1628496972
[root@xyz ~]# pwd
/root
[root@xyz ~]# cd ~icexmoon
[root@xyz icexmoon]# pwd
/home/icexmoon
[root@xyz icexmoon]# cd -
/root
[root@xyz ~]# pwd
/root
[root@xyz ~]# cd /
[root@xyz /]# exit
登出
pwd

pwd对应的英文是print working directory,即打印工作目录,我们看实例:

[icexmoon@xyz ~]$ cd /var/mail
[icexmoon@xyz mail]$ pwd
/var/mail
[icexmoon@xyz mail]$ pwd -P
/var/spool/mail
[icexmoon@xyz mail]$ ls -ald /var/mail
lrwxrwxrwx. 1 root root 10 724 14:33 /var/mail -> spool/mail

需要注意的是,如果使用-P参数,如果当前工作目录是一个符号链接,则会显示其指向的真实路径,这点我们通过ls命令可以证实。

mkdir

mkdir(make directory)的用途是创建一个新目录:

[icexmoon@xyz mail]$ mkdir /tmp/test2
[icexmoon@xyz mail]$ ls -ald /tmp/test2
drwxrwxr-x. 2 icexmoon icexmoon 6 89 19:40 /tmp/test2
[icexmoon@xyz mail]$ mkdir /tmp/test2/test3/test4/test5
mkdir: 无法创建目录"/tmp/test2/test3/test4/test5": 没有那个文件或目录
[icexmoon@xyz mail]$ mkdir -p /tmp/test2/test3/test4/test5
[icexmoon@xyz mail]$ ls -ald /tmp/test2/test3/test4/test5
drwxrwxr-x. 2 icexmoon icexmoon 6 89 19:41 /tmp/test2/test3/test4/test5

命令本身没有什么值得说的,只要权限正确,就可以创建相应的目录。

需要注意的是默认状态是无法创建多个“级联”目录的,即你只能在一个已经存在的目录下创建一个新目录,如果你想一次性创建多层本来不存在的目录,可以使用-p参数。

rmdir

rmdir(remove directory)的用途是删除一个空目录,需要注意的是必须是空目录才能用这个命令删除。

[icexmoon@xyz mail]$ rmdir /tmp/test2/test3/test4/test5
[icexmoon@xyz mail]$ ls -al /tmp/test2/test3/test4/
总用量 0
drwxrwxr-x. 2 icexmoon icexmoon  6 89 19:45 .
drwxrwxr-x. 3 icexmoon icexmoon 19 89 19:41 ..
[icexmoon@xyz mail]$ sudo rmdir -p /tmp/test2/test3/test4
rmdir: 删除目录 "/tmp" 失败: 设备或资源忙
[icexmoon@xyz mail]$ ls -al /tmp/test*
总用量 4
drwxrwxr-x.  2 icexmoon icexmoon    6 88 17:28 .
drwxrwxrwt. 22 root     root     4096 89 19:47 ..
[icexmoon@xyz mail]$

默认情况下这个命令仅会删除目标目录,如果你想将目标目录层级中的所有空目录一起删除的话,可以使用-p参数,虽然在实例中执行rmdir -p显示删除/tmp失败,但实际上/tmp/test2/tmp/test2/test3等中间层级的空目录都被删除了,而/tmp不是空目录,所以没有删除,这显然是复合我们期望的。

实际上这个命令使用频率并不高,因为大多数情况下我们需要删除的目录都不是空目录,此时我们需要执行的命令是rm -r 目录,当然执行这个命令要慎重,删除了关键文件会导致系统无法开机,这也是为什么不推荐使用root用户进行日常工作。

关于可执行文件夹路径的变量:$PATH

和Windows一样,Linux同样是借助环境变量来实现对可执行命令的检索,甚至变量名也同样是PATH,我们可以通过echo命令来进行查看当前用户的该变量:

[icexmoon@xyz mail]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/icexmoon/.local/bin:/home/icexmoon/bin

不同的路径使用:进行分割。

可以看到,就像之前说的,FHS规定常用的应用会放在/usr/bin以及/usr/sbin,而这两个目录都在环境变量PATH中,所以我们是可以在命令行下直接执行的,此外可以看到用户的家目录下的.local/binbin也已经被写入PATH,所以用户自己安装的应用可以放在这两个地方,就可以直接执行。

此外,如果我们需要把某个目录加入PATH变量,可以这样:

[icexmoon@xyz mail]$ PATH="${
    PATH}:/root"
[icexmoon@xyz mail]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/icexmoon/.local/bin:/home/icexmoon/bin:/root

文件与目录管理

ls

ls命令用于查看目录和文件的信息:

[icexmoon@xyz mail]$ ls -al ~
总用量 48
drwx------. 15 icexmoon icexmoon 4096 89 14:58 .
drwxr-xr-x.  3 root     root       22 724 14:45 ..
-rw-------.  1 icexmoon icexmoon 5373 89 16:43 .bash_history
-rw-r--r--.  1 icexmoon icexmoon   18 41 2020 .bash_logout
-rw-r--r--.  1 icexmoon icexmoon  193 41 2020 .bash_profile
-rw-r--r--.  1 icexmoon icexmoon  231 41 2020 .bashrc
drwx------. 19 icexmoon icexmoon 4096 89 15:01 .cache
drwxr-xr-x. 16 icexmoon icexmoon 4096 729 16:16 .config
drwx------.  3 icexmoon icexmoon   25 724 14:49 .dbus

这是最常用的方式,可以查看所有文件(包括.开头的隐藏文件)的信息。

[icexmoon@xyz mail]$ ls -alF --color=never ~
总用量 48
drwx------. 15 icexmoon icexmoon 4096 89 14:58 ./
drwxr-xr-x.  3 root     root       22 724 14:45 ../
-rw-------.  1 icexmoon icexmoon 5373 89 16:43 .bash_history
-rw-r--r--.  1 icexmoon icexmoon   18 41 2020 .bash_logout
-rw-r--r--.  1 icexmoon icexmoon  193 41 2020 .bash_profile
-rw-r--r--.  1 icexmoon icexmoon  231 41 2020 .bashrc
drwx------. 19 icexmoon icexmoon 4096 89 15:01 .cache/
drwxr-xr-x. 16 icexmoon icexmoon 4096 729 16:16 .config/
drwx------.  3 icexmoon icexmoon   25 724 14:49 .dbus/
-rw-------.  1 icexmoon icexmoon   16 724 14:49 .esd_auth
-rw-------.  1 icexmoon icexmoon 3414 89 14:58 .ICEauthority
-rw-------.  1 icexmoon icexmoon   35 729 17:48 .lesshst
drwx------.  3 icexmoon icexmoon   19 724 14:49 .local/

通常bash终端都可以用颜色区分ls输出的文件和目录,使用--color=never可以屏蔽颜色,使用-F可以让输出的目录结尾加上/以和文件区分。

[icexmoon@xyz mail]$ ls -al --full-time ~
总用量 48
drwx------. 15 icexmoon icexmoon 4096 2021-08-09 14:58:40.156100279 +0800 .
drwxr-xr-x.  3 root     root       22 2021-07-24 14:45:46.681888462 +0800 ..
-rw-------.  1 icexmoon icexmoon 5373 2021-08-09 16:43:06.356025666 +0800 .bash_history
-rw-r--r--.  1 icexmoon icexmoon   18 2020-04-01 10:17:30.000000000 +0800 .bash_logout
-rw-r--r--.  1 icexmoon icexmoon  193 2020-04-01 10:17:30.000000000 +0800 .bash_profile
-rw-r--r--.  1 icexmoon icexmoon  231 2020-04-01 10:17:30.000000000 +0800 .bashrc
drwx------. 19 icexmoon icexmoon 4096 2021-08-09 15:01:45.238097720 +0800 .cache
drwxr-xr-x. 16 icexmoon icexmoon 4096 2021-07-29 16:16:38.468976492 +0800 .config
drwx------.  3 icexmoon icexmoon   25 2021-07-24 14:49:22.547003130 +0800 .dbus

加上--full-time参数可以输出完整时间。

此外很多Linux发行版为了方便设定了alias命令ll,其实就是ls -al

cp

cp(copy)命令的用途是复制目录或文件,需要注意的是Linux下的目录和文件不仅内容重要,其属性也很重要,所以执行cp命令的用户不同,效果也可能不同。

[root@xyz tmp]# cp /var/log/wtmp .
[root@xyz tmp]# ls -ald /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 33408 89 19:30 /var/log/wtmp
-rw-r--r--. 1 root root 33408 89 20:19 wtmp

可以看到复制后的目录的权限是与源目录不同的。

[root@xyz tmp]# cp -a /var/log/wtmp wtmp2
[root@xyz tmp]# ls -ald /var/log/wtmp wtmp2
-rw-rw-r--. 1 root utmp 33408 89 19:30 /var/log/wtmp
-rw-rw-r--. 1 root utmp 33408 89 19:30 wtmp2

要和原文件完全一样的话可以使用-a参数。

此外还有一个细节,如果复制的是目录,目标目录如果已经存在,被复制的目录会被添加到目标目录下边,成为子目录,如果目标目录不存在,则会直接复制过去,并命名为该目录名。

如果要将一个目标目录下的文件拷贝到一个已有目录下,就要这样:

[root@xyz tmp]# cp -ar /etc/* /tmp/etc2
[root@xyz tmp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值