查看档案
『ls 』可查看档案权限!以 root 的身份登入 Linux 后,下达『ls -Al 』看
看,会看到底下的几个咚咚:
[root@localhost ~]# ls -Al
总用量 92
-rw-------. 1 root root 1749 1月 6 2017 anaconda-ks.cfg
-rw-------. 1 root root 19934 5月 25 18:04 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r-- 1 root root 2031 5月 23 2017 .bashrc
drwxr-xr-x. 3 root root 17 1月 6 2017 .cache
-rw-r--r-- 1 root root 2573 12月 6 2016 Centos-7.repo
drwxr-xr-x. 3 root root 17 1月 6 2017 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwx------ 2 root root 24 1月 7 2017 .docker
-rw-r--r-- 1 root root 12 3月 22 14:05 index.html?release=7
drwxr-xr-x 3 root root 18 12月 4 20:36 .java
-rw------- 1 root root 12495 5月 22 13:43 .mysql_history
drwxr-xr-x 2 root root 39 1月 18 2017 .oracle_jre_usage
drwxr-----. 3 root root 18 1月 7 2017 .pki
-rw------- 1 root root 786 5月 25 16:50 .rediscli_history
drwx------ 2 root root 24 1月 8 2017 .ssh
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw------- 1 root root 9462 5月 29 11:30 .viminfo
-rw-r--r--. 1 root root 5052 1月 6 2017 wget-log
ls 是『list』的意思,重点在显示档案的文件名的相关属性。而选顷『-Al』则表示列出所有的档案详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为『. 』的档案)。如上所示,在你第一次以 root身份登入 Linux 时, 如果你输入上述命令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思:
-
第一栏代表这个档案的类型与权限(permission)。
这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字符:
- 第一个字符代表这个档案是『目录价、档案或链接文件等等』:
当为[ d ]则是目录,例如上表档名为『.cache』的那一行;
当为[ - ]则是档案,例如上表档名为『.bash_logout』那一行;
若是[ l ]则表示为链接文档link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口讴备,例如键盘、鼠标(一次怅读取装置)。 - 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、 [ w ]代表可写(write)、 [ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
- 第一组为『档案拥有者的权限』,以『bash_logout.log』那个档案为例, 该档案的拥有者可以读写,但不可执行;
- 第事组为『同群组的权限』;
- 第三组为『其他非本群组的权限』。
- 第二栏表示有多少文档名连结到此节点(i-node):
每个档案都会将他的权限与属性记录到文件系统的 i-node 中,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个 i-node 啰!这个属性记录的,就是有多少不同的档名连结到相同的一个 i-node 号码去就是了。 - 第三栏表示这个档案(或目彔)的『拥有者账号』。
- 第四栏表示这个档案的所属群组。
- 第五栏为这个档案的容量大小,默讣单位为 bytes。
- 第六栏为这个档案的建档日期或者是最近的修改日期。
[root@localhost ~]# ls -Al --full-time
总用量 92
-rw-------. 1 root root 1749 2017-01-06 09:01:50.976973219 +0800 anaconda-ks.cfg
-rw-------. 1 root root 19934 2018-05-25 18:04:26.548241405 +0800 .bash_history
-rw-r--r--. 1 root root 18 2013-12-29 10:26:31.000000000 +0800 .bash_logout
-rw-r--r--. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bash_profile
-rw-r--r-- 1 root root 2031 2017-05-23 11:08:50.942009054 +0800 .bashrc
drwxr-xr-x. 3 root root 17 2017-01-06 17:33:20.578862846 +0800 .cache
-rw-r--r-- 1 root root 2573 2016-12-06 20:36:59.000000000 +0800 Centos-7.repo
drwxr-xr-x. 3 root root 17 2017-01-06 17:33:20.592862945 +0800 .config
-rw-r--r--. 1 root root 100 2013-12-29 10:26:31.000000000 +0800 .cshrc
drwx------ 2 root root 24 2017-01-07 12:31:19.645243987 +0800 .docker
-rw-r--r-- 1 root root 12 2018-03-22 14:05:10.846946486 +0800 index.html?release=7
drwxr-xr-x 3 root root 18 2017-12-04 20:36:04.875727278 +0800 .java
-rw------- 1 root root 12495 2018-05-22 13:43:06.878454015 +0800 .mysql_history
drwxr-xr-x 2 root root 39 2017-01-18 11:20:54.304297351 +0800 .oracle_jre_usage
drwxr-----. 3 root root 18 2017-01-07 10:36:27.540588216 +0800 .pki
-rw------- 1 root root 786 2018-05-25 16:50:36.418229328 +0800 .rediscli_history
drwx------ 2 root root 24 2017-01-08 14:40:42.877009418 +0800 .ssh
-rw-r--r--. 1 root root 129 2013-12-29 10:26:31.000000000 +0800 .tcshrc
-rw------- 1 root root 9462 2018-05-29 11:30:26.335407337 +0800 .viminfo
-rw-r--r--. 1 root root 5052 2017-01-06 23:04:00.781524184 +0800 wget-log
- 第七栏为这个档案的名称
这个字段就是档名了。比较特殊的是:如果档名前多一个『. 』,则代表这个档案为『隐藏档』 。
改变文件属性与权限
我们现在知道档案权限对一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性,那么如何修改一个档案的属性与权限呢?又!有多少档案的权限我们可以修改呢? 我们先介绍几个常用于群组、拥有者、各种身份的权限修改的命令,如下所示:
chgrp :改变档案所属群组
chown :改变档案拥有者
chmod :改变档案的权限, SUID, SGID, SBIT 等等的特性
下面着重说明改变档案权限的用法,即chmod命令:
权限的设定方法有两种, 分别可以使用数字或者是符号改变权限。
- 数字类型改变档案权限
Linux 档案的基本权限就有九个,分别是 owner/group/others 三种身份各有自己的read/write/execute 权限, 先复习一下刚刚上面提到的数据:档案的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4
w:2
x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
所以等一下我们设定权限的变更时,该档案的权限数字就是 770 啦!变更权限的命令 chmod 的用法是这样的:
[root@www ~]# chmod [-R] xyz 档案或目彔
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 迚行递归(recursive)的持续变更,亦即连同次目彔下的所有档案都会变更
- 符号类型改变档案权限
还有一个改变权限的方法呦!前面的介绍中我们可以发现,基本上就九个权限分别是(1)user(2)group (3)others 三种身份啦!那举我们就可以藉由 u, g, o 来代表三种身份的权限!此外,a 则代表 all 亦即全部的身份!那么读写的权限就可以写成 r, w, x 啰!也就是可以使用底下的方式来看:
chmod | u\g\o\a(全部) | +(加入)\-(除去)\=(设定) | r\w\x | 档案或目录 |
---|
来实操一下吧!假如我们要『设定定』一个档案的权限成为『-rwxr-xr-x』时,基本上就是:
user (u):具有可读、可写、可执行的权限;
group 与 others (g/o):具有可读不执行的权限
[root@localhost wwwroot]# chmod u=rwx,go=rx data_run.sh
[root@localhost wwwroot]# ls -Al data_run.sh
-rwxr-xr-x 1 root root 352 2月 3 2017 data_run.sh
此外,如果我不知道原先的文件属性,而我只想要增加data_run.sh这个档案的每个人均可写入的权限, 那举我就可以使用:
[root@localhost wwwroot]# chmod a+w data_run.sh
[root@localhost wwwroot]# ls -Al data_run.sh
-rwxrwxrwx 1 root root 352 2月 3 2017 data_run.sh
而如果是要将权限去掉而不更改其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
[root@localhost wwwroot]# chmod a-x data_run.sh
[root@localhost wwwroot]# ls -Al data_run.sh
-rw-rw-rw- 1 root root 352 2月 3 2017 data_run.sh
特别说明:
x (access directory):
目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的 x 代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入 Linux 时, 你所在的家目录就是你当下的工作目录。而变换目录的命令是『cd』 (change directory)啰。
Linux 档案种类
我们一直强调一个概念,那就是:任何装置在 Linux 底下都是档案, 不仅如此,连数据沟通的接口也有专属的档案在负责。所以,Linux 的档案种类真的很多, 除了前面提到的一般档案(-)与目录档案(d)外,还有哪些种类的档案呢?
- 正规档案(regular file ):
在由 ls -al 所显示出来的属性方面,第一个字符为 [-],例如 [-rwxrwxrwx ]。另外,依照档案的内容,又大致可以分为:
纯文本档(ASCII)
二进制文件(binary)
数据格式文件(data) - 目录(directory)
- 连结档(link):
就是类似 Windows 系统底下的快捷方式啦! 第一个属性为 [ l ](英文 L 的小写)。 - 讴备与装置文件(device):
与系统周边及储存等相关的一些档案, 通常都集中在/dev 这个目彔下!通常又分为两种:
第一、 区块(block)设备档 :就是一些储存数据,以提供系统随机存取的接口设备,距离来说,硬盘与软盘等就是啦! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备啰!你可以自行查一下/dev/sda 看看, 会发现第一个属怅为[ b ]喔!
喔!
第二、 字符(character)设备文件:亦即是一些串行端口的接口讴备, 例如键盘、鼠标等等!这些讴备的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑动』到另一个地方啊!第一个属性为 [ c ]。 - 资料接口文件(sockets):
既然被称为数据接口文件,这种类型的档案通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求,而客户端就可以透过这个 socket 进行数据的沟通。第一个属性为 [ s ], 最常在/var/run 这个目录中看到这种文件类型了。 - 数据输送文件(FIFO, pipe):
FIFO 也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。 FIFO 是 first-in-first-out 的缩写。第一个属怅为[p] 。
Linux文件扩展名
基本上,Linux 的档案是没有所谓的『扩展名』的,我们刚刚就谈过,一个 Linux 档案能不能被执行,与他的第一栏的十个属怅有关,与文件名根本一点关系也没有。这个观念跟 Windows 的情况不同喔!在 Windows 底下, 能被执行的档案扩展名通常是 .com .exe .bat 等等,而在 Linux 底下,只要你的权限当中具有 x 的话,例如[ -rwx-r-xr-x ] 即代表这个档案可以被执行喔!
虽然如此,我们仍然希服可以藉由扩展名来了解档案是什么东西,所以, 通常我们还是会以适当的扩展名来表示该档案是什么种类的。底下有数种常用的扩展名:
- *.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用 shell 写成的,所以扩展名就编成 .sh ;
- *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等,由于不同的压缩软件,而取其相关的扩展名啰!
- *.html, *.php:网页相关档案,分别代表 HTML 语法与 PHP 语法的网页档案!.html 的档案可使用网页浏觅器来直接打开,至于 .php 的档案, 则可以透过 client 端的浏觅器来 server 端浏觅,以得到运算后的网页结果呢!
基本上,Linux 系统上的文件名真的只是了解该档案可能的用途而已, 真正的执行与否仍然需要权限的规范才行!
Linux 目录配置的依据--FHS
可分享的(shareable) | 丌可分享的(unshareable) | |
---|---|---|
不变的(static) | /usr (软件放置处) | /etc (配置文件) |
/opt (第三方协议软件) | /boot (开机不核心档) | |
可变劢的(variable) | /var/mail (使用者邮件信箱) | /var/run (程序相关) |
/var/spool/news (新闻组) | /var/lock (程序相关) |
因为利用 Linux 来开发产品或distributions 的社群/公司不个人实在太多了, 如果每个人都用自己的想法来配置档案放置的目录,那么将可能造成很多管理上的困扰。 你能想象,你进入一个企业后,所接触到的 Linux 目录配置方法竟然跟你以前学的完全不同吗? 所以,后来就有所谓的Filesystem Hierarchy Standard (FHS)标准的出炉了。
事实上,FHS是根据过去的经验一直再持续的改版的,FHS 将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:
可分享的(shareable) | 丌可分享的(unshareable) | |
---|---|---|
不变的(static) | /usr (软件放置处) | /etc (配置文件) |
/opt (第三方协议软件) | /boot (开机不核心档) | |
可变劢的(variable) | /var/mail (使用者邮件信箱) | /var/run (程序相关) |
/var/spool/news (新闻组) | /var/lock (程序相关) |
上表中的目录就是一些代表性的目录,什么是那四个类型?
- 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
- 不可分享的:自己机器上面运作的装置档案或者是与程序有关的 socket 档案等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
- 不变的:有些数据是不会经常变动的,跟随着 distribution 而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机朋务配置文件等等;
- 可变动的:经常改变的数据,例如登彔文件、一般用户可自行收受的新闻组等。
事实上,FHS 针对目彔树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
/ (root, 根目彔):与开机系统有关;
/usr (unix software resource):与软件安装/执行有关;
/var (variable):与系统运作过程有关。
根目录 (/) 的意义与内容:
FHS 标准建议:根目录(/)所在分割槽应该越小越好, 且应用程序所安装的软件最好与要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。
鉴于上述说明,因此 FHS 定义出根目录(/)底下应该要有这些次目录的存在才好:
目录 | 应放置档案内容 |
---|---|
/bin | 系统有很多放置执行文件的目录,但/bin比较特殊。因为/bin 放置的是在单人维护模式下还能够被操作的命令。 在/bin 底下的命令可以被 root与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash 等等常用的挃令。 |
/root | 这个目录主要放置开机会使用到的档案,包括 Linux 核心档案以及开机选单与开机所需配置文件等等。Linux kernel 常用的档名为vmlinuz,如果使用的是 grub 这个开机管理程序, 则还会存在/boot/grub/这个目彔喔! |
/dev | 在 Linux 系统上,任何装置与接口设备都是以档案的型态存在这个目录当中的。 你只要透过存取这个目录底下的某个档案,就等于存取某个装置啰~ 比要重要的档案有/dev/null, /dev/zero, /dev/tty, /dev/lp, /dev/hd, dev/sd*等等 |
/etc | 系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启动文档等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有 root 有权力修改。 FHS 建议不要放置可执行文件(binary)在这个目彔中喔。比较重要的档案有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/,/etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目录有: 1. /etc/init.d/:所有朋务的预设启动script 都是放在这里的,例如要启动或者关闭 iptables 的话:『/etc/init.d/iptables start』、『/etc/init.d/iptables stop』 2. /etc/xinetd.d/:这就是所谓的 super daemon 管理的各项服务的配置文件目录。 3. /etc/X11/:与X Window有关的各种配置文件都在这里,尤其是 xorg.conf这个 X Server 的配置文件。 |
/home | 这是系统默认的用户家目录(home directory)。在你新增一个一般使用者账号时, 默认的用户家目录都会规范到这里来。比较重要的是,家目录有两种代号喔: ~:代表目前这个用户的家目彔. ~dmtsai :则代表 dmtsai 的家目彔! |
/lib | 系统的函式库非常的多,而/lib 放置的则是在开机时会用到的函式库, 以及在/bin或/sbin 底下的命令会呼叫的函式库而已。什么是函式库呢?妳可以将他想成是『外挂』,某些命令必项要有这些『外挂』才能够顺利完成程序的执行。 尤其重要的是/lib/modules/这个目录, 因为该目录会放置核心相关的模块(驱动程序)喔! |
/media | media 是『媒体』的英文,这个/media 底下放置的就是可移除的装置啦! 包括软盘、光盘、 DVD 等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom 等等。 |
/mnt | 如果你想要暂时挂载某些额外的装置,一般建议你可以放置到这个目录中。 在更早的时候,这个目录的用途与/media 相同啦!只是有了/media 之后,这个目录就用来暂时挂载用了。 |
/opt | 这个是给第三方协力软件放置的目彔。什么是第三方协力软件啊? 举例来说,KDE这个桌面管理系统是一个独立的计划,不过他可以安装到 Linux 系统中,因此 KDE的软件就建议放置到此目录下了。 另外,如果你想要自行安装额外的软件(非原本的distribution 提供的),那么也能够将你的软件安装到这里来。 在以前的 Linux 系统中,我们还是习惯放置在/usr/local 目彔下呢! |
/root | 系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有 root 的家目录,所以我们会希服 root 的家目录与根目录放置在同一个分割槽中。 |
/sbin | Linux 有非常多命令用来设定系统环境的,这些命令只有 root 能够利用来『设定』系统,其他用户最多只能用来『查询』而已。 放在/sbin 底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的命令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。本机自行安装的软件所产生的系统执行文件(system binary), 则放置到/usr/local/sbin/当中了。常见的命令包括:fdisk, fsck,ifconfig, init, mkfs 等等。 |
/srv | srv 可以规为『service』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如 WWW, FTP 等等。举例来说,WWW 服务器需要的网页资料就可以放置在/srv/www/里面。 |
/tmp | 这是让一般用户或正在执行的程序暂时放置档案的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录! 因为FHS 甚至建议在开机时,应该要将/tmp 下的数据都删除! |
事实上 FHS 针对根目录所定义的标准就仅有上面的咚咚,不过我们的 Linux 底下还有讲多目录你也需要了解一下的。 底下是几个在 Linux 当中也是非常重要的目录喔:
目录 | 应放置档案内容 |
---|---|
/lost+found | 这个目录是使用标准的 ext2/ext3 文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下。这个目录通常会在分割槽的最顶层存在, 例如你加装一颗硬盘于/disk 中,那在这个系统下就会自动产生一个这样的目彔『/disk/lost+found』 |
/porc | 这个目录本身是一个『虚拟文件系统(virtual filesystem)』喔!他放置的数据都是在内存当中, 例如系统核心、进程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的档案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts,/proc/ioports, /proc/net/* 等等。 |
/sys | 这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录与核心相关的信息。 包括目前已加载的内核模块与内核侦测到的硬件装置信息等等。这个目录同样不占硬盘容量喔! |
因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开
机过程有关的目录, 就不能够与根目彔放到不同的分割槽去!那哪些目录不可与根目录分开呢?有底下这些:
- /etc:配置文件
- /bin:重要执行档
- /dev:所需要的装置档案
- /lib:执行档所需的函式库不核心所需的模块
- /sbin:重要的系统执行文件
这五个目录千万不可与根目录分开在不同的分割槽!请背下来啊! 好了,谈完了根目录,接下来我们就来谈谈/usr 以及/var 啰!先看/usr 里面有些什么东西:
usr 是 Unix Software Resource 的缩写, 也就是『Unix操作系统软件资源』所放置的目录,而不是用户的数据啦!这点要注意。 FHS 建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。
如果/usr 是安装时会占用较大硬盘容量的目录,那么/var 就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的档案,包括快取(cache)、登录档(log file)以及某些软件运作所产生的档案, 包括程序档案(lock file, run file),戒者例如 MySQL 数据库的档案等等。
如果我们将整个目录树以图标的方法来显示,将较为重要的档案数据列出来的话,那举目录树架构有点像这样: