Linux学习(4)--目录与路径

相对路径与绝对路径:
绝对路径:路径的写法一定由根目录 / 写起,例如 /usr/share/doc 这个目录;
相对路径:不是由 / 写起,例如由 /usr/share/doc 到 /usr/share/man 下这个目录,可以写 cd ../man。指的是当前工作目录下的路径

目录的相关操作

一些特殊的目录,可以帮助我们快速操作:

.       代表此层目录
..      代表上层目录
-       代表前一个工作目录
~       代表“目前用户身份”所在的主文件夹
~YXH    代表“YXH”这个用户的主文件夹(YXH是个账户名称)

#要注意,根目录下其实也有“.”和“..”目录,但是仔细去看发现,都指向的是自己

介绍一些简单的命令:

  • cd(Change Directory)
[root@VM_174_157_centos ~]# cd [相对路径或绝对路径]
实例:
[root@VM_174_157_centos ~]# cd ~
[root@VM_174_157_centos ~]# cd /var/spool/mail

#cd是 Change Directory 的缩写,用来切换工作目录。多用[Tab]快速补齐可以避免打错,是一个好的习惯。
  • pwd(Print Working Directory)
#输出当前工作目录
[root@VM_174_157_centos ~]# pwd

#显示实际的工作目录,而非文件本身的目录名
[root@VM_174_157_centos ~]# pwd
/var/mail
[root@VM_174_157_centos ~]# pwd -P
/var/spool/mail              <== 加了-P发现不一样
[root@VM_174_157_centos ~]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail  ->  spool/mail
#看到这里应该知道原因了吧,因为/var/mail是连接文件,链接到/var/spool/mail
#所以加上pwd -P后,会不以连接文件的数据显示,而是正确的完整路径
  • mkdir(make directory):即使目录本来就存在,系统也不会显示错误信息
这里写代码片[root@VM_174_157_centos ~]# mkdir [-mp] 目录名称
选项与参数:
-m:配置文件案的权限!直接设定,不需要看默认权限(umask)
-p:帮助你直接将所需要的目录(包含上层目录)递归创建起来

#创建新目录
[root@VM_174_157_centos ~]# cd /tmp
[root@VM_174_157_centos tmp]# mkdir test
[root@VM_174_157_centos tmp]# mkdir test1/test2/test3/test4
mkdir:cannot create directory 'test1/test2/test3/test4': No such file or directory
[root@VM_174_157_centos tmp]# mkdir -p test1/test2/test3/test4
#加了这个-p选项,可以自行帮你建立多层目录
  • rmdir(remove directory):仅能删除空的目录
[root@VM_174_157_centos ~]# rmdir [-p] 目录名称
参数:
-p:连通上层空的目录也一起删除
[root@VM_174_157_centos ~]# rmdir test1
rmdir: 'test1': Directory not empty
#同理,-p可以递归删除

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

在了解FHS之后,我们知道查看文件属性的命令 ls 的完整文件名为:/bin/ls(这是绝对路径),我们之所以在任何目录下输入ls都可以执行,而不会提示找不到该指令,就是有环境变量PATH的帮助。

当我们执行一个命令,比如说 ls ,系统会依照PATH的设定去每个PATH定义的目录下搜寻文件名为 ls 的可执行文件,如果PATH定义的目录中含有多个文件名为 ls 的可执行文件,那么先搜寻到的同名指令先被执行。

我们可以通过echo $PATH来查看哪些目录被定义了:

#先用root身份搜索
[root@VM_174_157_centos ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

#再用YXH身份搜索
[root@VM_174_157_centos ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin

PATH(一定是大写)这个变量的内容是一堆目录,用冒号隔开,每个目录是有顺序的。通过上面的,我们可以看到,无论是root还是其他的账户,都有bin这个目录在PATH 变量内,当然可以执行。

  • 1.请问我们能不能用一般身份使用者下达ifconfig eth0 这个指令?

如上面所示,用YXH这个行号执行ifconfig时,会出现[-bash: ifconfig: command not found]的字样,因为这个命令是放在/sbin下面的,但是YXH的PATH没有设置,所以无法执行。

但是我们同样可以通过[/sbin/ifconfig eth0]这个命令来执行,绝对路径也是可以的嘛!

  • 2.假如你是root,如果你将 ls 由/bin/ls 移动成为 /root/ls ,然后你自己也在/root目录下,请问(1)你能不能通过直接输入ls来执行?(2)若不能,你该如何执行 ls 这个指令?(3)如要直接输入 ls 即可执行,又该如何执行?

(1)当我们移动了之后,无论你在哪个目录下输入都没有办法顺利执行了。因为/root这个目录不在PATH指定的目录中。
(2)因为 ls 是确实存在的,只是位子变了,所以我们可以通过绝对路径来执行这个文件名,如下所示:

[root@VM_174_157_centos ~]# /root/ls
[root@VM_174_157_centos ~]# .ls    <==因为在/root目录下,所以直接用.ls指定

(3)如果想让root在任何目录都执行,只需要将/root加入PATH当中即可。加入方法如下:

[root@VM_174_157_centos ~]# PATH="$PATH":/root
  • 3.为什么PATH查询的目录不加入本目录(.)?
    如果在PATH中加入本目录(.)后,确实我们就能够在命令所在目录进行命令的执行了。但是由于你的工作目录并非固定(经常会使用cd来切换到不同的目录),因此能够执行的命令会有所变动,这并不是什么好事。
    另外,如果有不怀好心的用户在/tmp下做了一个命令,因为/tmp是大家都可以写入的环境。假如这个命令可以窃取用户的一些数据,当你用root去执行这个命令,岂不是很可怕。如果它将名称改为经常用到的 ls 时,那就更惨了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值