到现在为止,我们还不知道自己在系统的什么地方。在浏览器上,我们能够通过导航栏上的url,了解到自己在互联网上的具体坐标。相似的功能,是由pwd命令提供的,它能够输出当前的工作目录。
pwd命令是非常非常常用的命令,尤其是在一些命令提示符设置不太友好的机器上。另外,它也经常用在shell脚本中,用来判断当前的运行目录是否符合需求。
有很多线上事故,都是由于没有确认当前目录所引起的。比如rm -rf *这种危险的命令。在执行一些高危命令时,随时确认当前目录,是个好的习惯。
[root@localhost ~]# pwd
/root
我们使用root用户默认登陆后,就停留在/root目录中。Linux中的目录层次,是通过/进行划分的。
5.2、文件系统用户标准Linux的文件系统,从一开始就有一个规范标准。它还有一个专有缩写名词,叫做FHS (Filesystem Hierarchy Standard)。FHS经过多年的演进,目录结构也越来越清晰。除了一些标准的要求,还有一些使用者之间的约定。
接下来,我们大体看一下linux上的默认目录,对其有一个基本的感觉。
第1层第二层介绍/bin
目录/usr/bin的软链接/sbin
目录/usr/sbin的软链接/lib
目录/usr/lib的软链接/usr/bin存放一些常用的命令/usr/sbin存放一些管理员常用的命令/usr/lib用来存放动态库和一些模块文件/sys
内核中的数据结构的可视化接口/proc
内存映像/run
内存映像/boot
存放引导程序,内核相关文件/dev
存放一些设备文件,比如光盘/etc
用于存储一些全局的、应用的配置文件/var
与/var/run一样,存放的是系统运行时需要的文件,比如mysql的pid等/tmp
非常特殊的临时文件夹,断电丢失/home/**用户目录,比如我的目录是/home/xjjdog/root
root用户的home目录
- home 平常,我们打交道最多的目录,就集中在自己的用户目录,我们可以在里面做任何操作,比如我们现在root用户的/root目录。一些自己的资料,比如视频、音频、下载的文件,或者做测试用的一些数据资料,就可以自行在这些目录下规划。root用户比较特殊,普通用户的私人目录都是在/home下的。
- /etc etc目录是经常要打交道的目录,存放了一些全局的系统配置文件和应用配置文件。比如你安装了php,或者nginx,它们的配置文件就躺在/etc目录下的某个文件夹里。
- /var var目录存放一些运行中的数据,有必须的,也有非必须的。一些黑客入侵之后,会在这里面的某些文件中留下痕迹,他们会着重进行清理。var目录还是一些应用程序的默认数据存放之地,比如mysql的数据文件。
- /tmp 目录是一个特殊的临时目录,文件在断电以后就消失了。但这个目录,所有的用户,都有写入权限,通常用来做文件交换用。
- /proc和/sys目录,是两个神奇的目录。它们两个是一种伪文件系统,可以通过修改其中一些文件的状态和内容,来控制程序的行为(修改后会直接刷到内存上,太酷了)。刚开始的时候,只有proc目录,由于里面内容有多又乱,后面又规划出sys目录,用来控制内核的一些行为。如果你在调优一些系统参数,和这些文件打交道的时间比较多。
- 还有几个空的目录,我们没有列在上面的表格上。比如/srv目录,通常会把一些web服务的资料,比如nginx的,放在这里面。但是,这并不是强制要求的,所以我见过的/srv目录,通常会一直是空的。同样的,/opt目录也是这样一个存在,你就当它不存在就行。这都属于使用者规划的范畴,自定义性非常强。
- 在使用Linux系统的时候,也可以创建自己的目录。比如,我就喜欢自己创建一个叫做/data的目录,用来存放一些数据库相关的内容。举个例子,/data/mysql存放mariadb的数据,而/data/es/存放elasticsearch的索引内容。
linux上的文件类型有很多,它们大部分都分门别类的存放在相应的目录中,比如/dev目录下,就是一些设备文件;/bin文件下,是一些可以执行命令。通常都好记的很。
5.3、查看文件列表所以,上面的表格内容,我是怎么看到的呢,靠记忆么?ls命令,能够列出相关目录的文件信息。可以被评为linux下最勤劳的命令标兵。
现在的终端,都能够输出彩色的信息,非常的直观。oh-my-zsh和oh-my-bash等项目,可以让你的终端更加的漂亮。把它加入到你的研究清单里吧。
[root@localhost /]# ls /
# 注意:ls可以接受路径参数,你不用先跳转,就可以输出相关信息
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@localhost /]# ls -l /
# 带上 -l参数,可以查看一些更加详细的信息。
total 20
lrwxrwxrwx. 1 root root 7 Nov 3 20:24 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Nov 3 20:34 boot
drwxr-xr-x. 19 root root 3080 Nov 3 21:19 dev
drwxr-xr-x. 74 root root 8192 Nov 3 20:34 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 home
lrwxrwxrwx. 1 root root 7 Nov 3 20:24 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Nov 3 20:24 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
dr-xr-xr-x. 108 root root 0 Nov 3 21:19 proc
dr-xr-x---. 2 root root 135 Nov 4 07:53 root
drwxr-xr-x. 24 root root 740 Nov 3 21:20 run
lrwxrwxrwx. 1 root root 8 Nov 3 20:24 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Nov 3 21:19 sys
drwxrwxrwt. 9 root root 4096 Nov 4 03:40 tmp
drwxr-xr-x. 13 root root 155 Nov 3 20:24 usr
drwxr-xr-x. 19 root root 267 Nov 3 20:34 var
ls最常用的,就是加参数l或者参数a。
5.3.1、详细信息加上参数l,能够看到文件的一些权限信息已经更新日期等。但我们还看到了一些更有意思的东西。比如:
lib -> usr/lib
上面表示的,是软链接信息。
就如同我们上面表格所展示的一样,lib目录,是/usr/lib的快捷方式,它们之中的内容,没有什么两样。
关于ls -l展示的更加详细的内容,可以参照我下面的这张图。我们将在了解后面小节的内容后,再次对这张图进行回顾。
5.3.2 隐藏文件直接在你的/root目录里,执行ls -al,你会看到更多东西。这些额外的隐藏文件,都是以.开头,以配置文件居多。这就是参数a的作用。
[root@localhost ~]# ls -al
total 28
dr-xr-x---. 2 root root 135 Nov 4 07:53 .
dr-xr-xr-x. 17 root root 224 Nov 3 20:28 ..
-rw-------. 1 root root 1273 Nov 3 20:28 anaconda-ks.cfg
-rw-------. 1 root root 246 Nov 4 11:41 .bash_history
-rw-r--r--. 1 root root 18 Dec 28 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 28 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 28 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 28 2013 .cshrc
-rw-r--r--. 1 root root 129 Dec 28 2013 .tcshrc
细心的同学,应该会注意到两个特殊的目录。.和..。前者表示的是当前目录,而后者表示的是上层目录。
使用cd命令,将在这些目录中,自由穿梭。
5.4、切换目录小技巧:如果你对英文日期阅读困难,可以使用ls -al --full-time查看可读的日期。