1、系统文件目录结构

/bin:bin是Binary的缩写,该目录下存放的是最常用的命令。 /boot:该目录下存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev:dev是Device(设备)的缩写。该目录下存放的是Linux的外部设备。在Linux中,访问设备的方式和访问文件的方式是相同的。 /etc:该目录下存放的是所有系统管理所需要的配置文件和子目录。 /home:这是用户的主目录。在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 /lib和/lib64:这两个目录下存放的是系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。其中/lib64为64位的软件包的库文件所在目录。 /media:系统会自动识别一些设备(如U盘、光驱等),当识别后,Linux会把识别的设备挂载到该目录下。 /mnt:系统提供该目录是为了让用户临时挂载别的文件系统。我们可以将光驱挂载到/mnt/上,然后进入该目录查看光驱里的内容。 /opt:这是给主机额外安装软件所设置的目录,该目录默认为空。比如你要安装一个ORACLE数据库,可以放到该目录下。 /proc:该目录是一个虚拟的目录,是系统内存的映射,我们可以通过直接访问来获取系统信息。该目录的内容在内存里,我们可以直接修改里面的某些文件。比如可以通过下面的命令来屏蔽主机的ping命令,使其他人无法ping你的机器。后续,在日常工作中,你会经常用到类似的用法。 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /root:该目录是系统管理员的用户主目录。 /run:这个目录其实和/var/run是同一个目录,这里面存放的是一些服务的pid,一个服务启动完后,是有一个pid文件的。 /sbin:s就是Super User的意思,该目录存放的是系统管理员使用的系统管理程序。 /srv:该目录存放的是一些服务启动之后需要提取的数据。 /sys:该目录存放的是与硬件驱动程序相关的信息。 /tmp:该目录是用来存放一些临时文件的。 /usr:这是一个非常重要的目录,类似于Windows下的Program Files目录,用户的很多应用程序和文件都存放在该目录下。后面的章节中,我们会多次用到这个目录。 /usr/bin:该目录存放的是系统用户使用的应用程序。 /usr/sbin: 该目录存放的是超级用户使用的比较高级的管理程序和系统守护程序。 /usr/src :该目录是内核源代码默认的放置目录。 /var:该目录存放的是在不断扩充且经常被修改的目录,包括各种日志文件或者pid文件,刚刚提到的/var/run就是在/var目录下面 在Linux系统中,有几个重要的目录需要注意,不要误删除或者随意更改其内部文件。 /etc目录下是系统的配置文件,如果更改了该目录下的某个文件可能会导致系统无法正常启动。 /bin、/sbin、/usr/bin和/usr/sbin目录是系统预设的执行文件的放置目录,其中/bin和/usr/bin目录下是供系统用户使用的指令(除root外的通用账户),而/sbin和/usr/sbin目录下则是供root使用的指令。比如ls指令就存放在/bin/目录下。 /var也是一个非常重要的目录,系统上运行各个程序时所产生的日志都被记录在该目录下(即/var/log目录中),另外mail指令的预设也放置在这里 ldd命令可以查看文件所依赖的库

[root@localhost ~]# ldd /bin/ls
	linux-gate.so.1 =>  (0x00406000)
	libselinux.so.1 => /lib/libselinux.so.1 (0x002c1000)
	librt.so.1 => /lib/librt.so.1 (0x005ca000)
	libcap.so.2 => /lib/libcap.so.2 (0x002fd000)
	libacl.so.1 => /lib/libacl.so.1 (0x00661000)
	libc.so.6 => /lib/libc.so.6 (0x00c9b000)
	libdl.so.2 => /lib/libdl.so.2 (0x003d3000)
	/lib/ld-linux.so.2 (0x00c72000)
	libpthread.so.0 => /lib/libpthread.so.0 (0x00178000)
	libattr.so.1 => /lib/libattr.so.1 (0x00269000)

2、ls命令 ls = list(列出目标目录中所有子目录和文件) 语法: ls [选项] [目录名] 常用选项: -a =all 列出目录下的所有文件,包括以“.”开头的隐藏文件 -l 除了文件名之外还将文件的权限、所有者、文件大小等信息详细列出来 -t 以文件编辑时间就近排序 -i =inode(索引节点号)显示文件的索引节点号 -d directory 只列出目录名称,不显示目录其他信息 注:以上选项均可组合使用!

[root@localhost ~]# ls -ltr /root
总用量 24
-rw-r--r--. 1 root root  3482 4月  22 00:05 install.log.syslog
-rw-r--r--. 1 root root 12360 4月  22 00:06 install.log
-rw-------. 1 root root   974 4月  22 00:06 anaconda-ks.cfg

3、文件类型 LINUX中的七种文件类型 d 目录文件。 l 符号链接(指向另一个文件,类似于win下的快捷方式)。 s 套接字文件。socket文件 b 块设备文件,二进制文件。 c 字符设备文件。 p 命名管道文件。

  • f 普通文件 可以通过ls -l 命令查看文件的具体信息看到文件的类型
[root@localhost ~]# ls -l /var/run/rpcbind.sock 
srw-rw-rw-. 1 root root 0 5月  12 23:56 /var/run/rpcbind.sock

4、alias命令 alias 设置指令的别名 语法: alias [别名]=[指令名称] 输入alias可以查看系统预设的别名

[root@localhost ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

设置别名的办法和系统预设别名一样,用户alias设置别名仅对当前shell有效,若要使得该别名永久生效,可以编辑 .profile 或 .bashrc文件

5、绝对路径和相对路径 cd、pwd、mkdir、rmdir、rm命令 绝对路径:路径的写法一定由根目录 ‘/’写起,例如 /root/.ssh/authorized_keys这就是绝对路径。

相对路径:路径的写法不是由根目录 ‘/’写起,例如,首先用户进入到/, 然后再进入到home ,命令为 cd /home 然后 cd test 此时用户所在的路径为 /home/test 第一个cd命令后跟 ‘/home’ 第二个cd命令后跟 ‘test’, 并没有斜杠,这个 ‘test’ 是相对于 ‘/home’ 目录来讲的,所以叫做相对路径

cd命令 cd=change directory更改目录 cd - 进入上次所在目录 cd ~ 进入当前用户的家目录 cd . 进入当前目录 cd .. 进入当前目录的上一级目录 cd /tmp/ 进入指定目录

pwd命令 pwd = Print Working Directory 指印工作的目录 作用: 显示工作目录的路径名称 语法: pwd [选项]

[root@localhost ~]# pwd 
/root

目录设有链接时,pwd -P显示其实际路径

[root@localhost ~]# cd /etc/init.d/
[root@localhost init.d]# pwd -P
/etc/rc.d/init.d

mkdir命令 mkdir=make directory创建目录 语法: mkdir [-mp] [目录名称] ,其中-m,-p为其选项。 -m =mod 指定目录的权限

[root@localhost tmp]# mkdir -m 700 /123
[root@localhost tmp]# ll -d /123
drwx------. 2 root root 4096 5月  13 01:37 /123

-p 创建级联目录,当上一级目录不存在时帮你直接创建,这个选项还有一个好处,那就是当你创建一个已经存在的目录时,不会报错

[root@localhost tmp]# mkdir /tmp/123/111/
mkdir: 无法创建目录"/tmp/123/111": 没有那个文件或目录
[root@localhost ~]# mkdir -p /tmp/123/111/
[root@localhost ~]# tree /tmp
/tmp
├── 123
│   └── 111

rmdir命令 删除空目录 rmdir 有一个和mkdir同样的选项 ‘-p’, 可以级联删除一大串目录,但是级联的目录中其中一个目录里还有目录或者文件时就不好用了。

rm命令 rm=remove rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 语法: rm (选项) (参数) 选项: -r 删除目录用的选项 -f 强制删除文件或目录 -d 直接把欲删除的目录的硬连接数据删除成0,删除该目录 -i 删除已有文件或目录之前先询问用户 -v =visual显示指令的详细执行过程 注: -rf可以组合使用。使用rm命令要格外小心,因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除

环境变量PATH PATH路径的变量,当输入命令的时候LINUX会去查找PATH里面记录的路径(系统预设的命令除外,例如:ls、cd等等)。为什么我们输入很多命令时是直接打出了命令,而没有去使用这些命令的绝对路径?这就是因为环境变量PATH在起作用了,可以输入echo $PATH查看默认的路径

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

添加一个路径

[root@localhost ~]# PATH=$PATH:/tmp
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/tmp

cp命令 copy的简写,拷贝文件或目录。格式为 cp [选项] [ 来源文件 ] [目的文件] 常用的选项: -r : 如果你要拷贝一个目录,必须要加-r选项,否则你是拷贝不了目录的, 和 ‘rm’ 类似。

[root@localhost tmp]# cp /123 /tmp
cp: 略过目录"/123"
[root@localhost tmp]# cp -r /123 /tpm
[root@localhost tmp]# ls /tmp
123  yum.log

-i 安全选项,类似于rm命令,如果遇到一个存在的文件,会询问是否覆盖。系统默认cp=cp -i。 注: 当目标目录已存在的时候,cp命令会把源目录放到目标目录下面;当目标目录不存在的时候,cp命令会把源目录重命名后放到目标目录的位置

命令: mv

‘mv’ 是move的简写。格式为 mv [ 选项 ] [源文件] [目标文件] 下面介绍几个常用的选项。

-i : 和cp的-i 一样,当目标文件存在时会问用户是否要覆盖。在Redhat/CentOS系统中,我们使用的mv其实是mv -i

该命令有几种情况:

1) 目标文件是目录,而且目标文件不存在;

2) 目标文件是目录,而且目标文件存在;

3) 目标文件不是目录不存在;

4) 目标文件不是目录存在;

目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中。否则,就直接移动了,相当于重命名。例如: 目标文件为目录,并且目标目录不存在,相当于把 ‘dira’ 重命名为 ‘dirc’

[root@localhost ~]# mkdir dira dirb
[root@localhost ~]# ls
anaconda-ks.cfg  dira  dirb  install.log  install.log.syslog
[root@localhost ~]# mv dira dirc
[root@localhost ~]# ls
anaconda-ks.cfg  dirb  dirc  install.log  install.log.syslog

目标文件为目录,且目标目录存在,则会把 ‘dirc’ 移动到 ‘dirb’ 目录里

[root@localhost ~]# mv dirc dirb
[root@localhost ~]# ls
anaconda-ks.cfg  dirb  install.log  install.log.syslog
[root@localhost ~]# ls dirb
dirc

目标文件不是目录,且不存在,则会重命名文件

[root@localhost ~]# touch filed
[root@localhost ~]# ls
anaconda-ks.cfg  dirb  filed  install.log  install.log.syslog
[root@localhost ~]# mv filed filee
[root@localhost ~]# ls
anaconda-ks.cfg  dirb  filee  install.log  install.log.syslog
[root@localhost ~]# mv filee dirb
[root@localhost ~]# ls
anaconda-ks.cfg  dirb  install.log  install.log.syslog
[root@localhost ~]# ls dirb
dirc  filee

几个和文档相关的命令 cat tac more less head tail 命令: cat 比较常用的一个命令,即查看一个文件的内容并显示在屏幕上, 后面可以不加任何选项直接跟文件名,两个常用的选项: -n : 查看文件时,把行号也显示到屏幕上

[root@localhost tmp]# cat -n /etc/passwd
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin

-A : 显示所有东西出来,包括特殊字符

[root@localhost tmp]# cat -A /etc/passwd
root:x:0:0:root:/root:/bin/bash$
bin:x:1:1:bin:/bin:/sbin/nologin$
daemon:x:2:2:daemon:/sbin:/sbin/nologin$
adm:x:3:4:adm:/var/adm:/sbin/nologin$

命令: tac 倒序显示文件的内容 和 ‘cat’ 一样,用来把文件的内容显示在屏幕上,只不过是先显示最后一行,然后是倒数第二行,最后显示的是第一行。

命令: more

也是用来查看一个文件的内容,后面直接跟文件名,当文件内容太多,一屏幕不能占下,而你用 ‘cat’ 肯定是看不前面的内容的,那么使用 ‘more’ 就可以解决这个问题了。当看完一屏后按空格键继续看下一屏。但看完所有内容后就会退出。如果你想提前退出,只需按 ‘q’ 键即可。

命令: less

作用跟more一样,后面直接跟文件名,但比more好在可以上翻,下翻。空格键同样可以翻页,而按 ‘j’ 键可以向下移动(按一下就向下移动一行),按 ‘k’ 键向上移动。在使用more和less查看某个文件时,你可以按一下 ‘/’ 键,然后输入一个word回车,这样就可以查找这个word了。如果是多个该word可以按 ‘n’ 键显示下一个。另外你也可以不按 ‘/’ 而是按 ‘?’ 后边同样跟word来搜索这个word,唯一不同的是, ‘/’ 是在当前行向下搜索,而 ‘?’ 是在当前行向上搜索。

命令: head

‘head’后直接跟文件名,则显示文件的前十行。如果加 -n 选项则显示文件前n行。‘-n’后可以有空格也可以无空格

[root@localhost ~]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
[root@localhost ~]# head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

命令: tail

和head一样,后面直接跟文件名,则显示文件最后十行。如果加-n 选项则显示文件最后n行

[root@localhost ~]# tail /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:'Saslauthd user':/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
[root@localhost ~]# tail -n2 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

-f : 动态显示文件的最后十行,如果文件是不断增加的,则用-f 选项。如:tail -f /var/log/messages 该选项特别特别常用

[root@localhost tmp]# tail -f /var/log/messages
May 12 23:56:42 localhost kernel: EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: 
May 12 23:56:42 localhost kernel: Adding 2097144k swap on /dev/sda3.  Priority:-1 extents:1 across:2097144k 
May 12 23:56:42 localhost kernel: NET: Registered protocol family 10
May 12 23:56:42 localhost kernel: lo: Disabled Privacy Extensions
May 12 23:56:42 localhost kernel: ip6_tables: (C) 2000-2006 Netfilter Core Team
May 12 23:56:42 localhost kernel: nf_conntrack version 0.5.0 (16102 buckets, 64408 max)
May 12 23:56:42 localhost kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
May 12 23:56:42 localhost kernel: eth1: link up
May 12 23:56:43 localhost rpc.statd[924]: Version 1.2.3 starting
May 12 23:56:43 localhost sm-notify[925]: Version 1.2.3 starting

文件的所属主以及所属组

一个linux目录或者文件,都会有一个所属主和所属组。所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。Linux这样设置文件属性的目的是为了文件的安全。例如,test文件的所属主是user0 而test1文件的所属主是user1,那么user1是不能查看test文件的,相应的user0也不能查看test1文件。有时我们也会有这样的需求,让一个文件同时让user0和user1来查看,这怎么实现呢? 这时 ‘所属组’ 就派上用场了。即,创建一个群组users,让user0和user1同属于users组,然后建立一个文件test2,且其所属组为users,那么user0和user1都可以访问test2文件。Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user)、所属组(group)以及其他用户(others)对该文件的权限。可以通过ls -l 来查看这些属性。

[root@localhost ~]# ls -l
总用量 40
-rw-------. 1 root root   980 5月   7 18:00 anaconda-ks.cfg
drwxr-xr-x. 3 root root  4096 5月  10 05:10 dirb

linux文件属性

用ls –l 查看当前目录下的文件时,共显示了9列内容(用空格划分列)

第1列,包含的东西有该文件类型和所属主、所属组以及其他用户对该文件的权限。第一列共11位有的文件是10位,没有最后面的一位。 其中第一位用来描述该文件的类型。上例中,我们看到的类型有 ‘d’, ‘-‘ ,其实除了这两种外还有 ‘l’, ‘b’, ‘c’, ‘s’ 等。

‘d’ 表示该文件为目录;

‘-‘ 表示该文件为普通文件;

‘l’ 表示该文件为链接文件(linux file),上边提到的软链接即为该类型;

[root@localhost ~]# ls -l /etc/rc.local
lrwxrwxrwx. 1 root root 13 5月   7 17:54 /etc/rc.local -> rc.d/rc.local

上例中,第一列第一位是 ‘l’ 表示该文件为链接文件,稍后阿铭详细介绍。

‘b’ 表示该文件为块设备,比如 /dev/sda 就是这样的文件。

‘c’ 表示该文件为串行端口设备,例如键盘、鼠标。

‘s’ 表示该文件为套接字文件(socket),用于进程间通信。

后边的9位,每三个为一组。均为rwx 三个参数的组合。其中r 代表可读,w代表可写,x代表可执行。前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。下面拿一个具体的例子来述说一下。

一个文件的属性为 ‘-rwxr-xr–.’ ,它代表的意思是,该文件为普通文件,文件拥有者可读可写可执行,文件所属组对其可读不可写可执行,其他用户对其只可读。对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有x权限才能打开并查看该目录。例如一个目录的属性为 ‘drwxr–r–.’ 其所属主为root,那么除了root外的其他用户是不能打开这个目录的。

关于第一列的最后一位的 .,之前的CentOS 5 是没有这个点的,这主要是因为新版本的ls把selinux或者acl的属性加进来了,当文件或者目录只使用了selinux context的属性,这里是一个点。如果设置了acl,后面将是一个加号 ‘+’. 。

第2列,表示为链接占用的节点(inode), [1] 为目录时,通常与该目录底下还有多少目录有关系。

第3列,表示该文件的所属主。

第4列,表示该文件的所属组。

第5列,表示该文件的大小。

第6列、第7列和第8列为该文件的最近的修改日期,分别为月份日期以及时间,也就是所谓的mtime.

第9列,文件名。

更改文件的权限

更改所属组 chgrp 语法:chgrp [组名] [文件名]

[root@localhost ~]# groupadd testgroup
[root@localhost ~]# touch test1
[root@localhost ~]# ls -l test1
-rw-r--r-- 1 root root 0 5月  10 08:41 test1
[root@localhost ~]# chgrp testgroup test1
[root@localhost ~]# ls -l test1
-rw-r--r-- 1 root testgroup 0 5月  10 08:41 test1

这里用到了 ‘groupadd’ 命令,其含义为增加一个用户组。除了更改文件的所属组,还可以更改目录的所属组。

[root@localhost ~]# ls -l dirb/
总用量 8
drwxr-xr-x. 2 root root 4096 5月  10 05:08 dirc
-rw-r--r--. 1 root root   20 5月  10 05:37 filee
[root@localhost ~]# ls -ld dirb/
drwxr-xr-x. 3 root root 4096 5月  10 05:10 dirb/
[root@localhost ~]# chgrp testgroup dirb
[root@localhost ~]# ls -ld dirb/
drwxr-xr-x. 3 root testgroup 4096 5月  10 05:10 dirb/
[root@localhost ~]# ls -l dirb/
总用量 8
drwxr-xr-x. 2 root root 4096 5月  10 05:08 dirc
-rw-r--r--. 1 root root   20 5月  10 05:37 filee

‘chgrp’命令也可以更改目录的所属组,但是只能更改目录本身,而目录下面的目录或者文件没有更改,要想级联更改子目录以及子文件,有个选项-R可以实现:

[root@localhost ~]# chgrp -R testgroup dirb
[root@localhost ~]# ls -l dirb
总用量 8
drwxr-xr-x. 2 root testgroup 4096 5月  10 05:08 dirc
-rw-r--r--. 1 root testgroup   20 5月  10 05:37 filee

‘chgroup’ 命令使用的不多,因为还有一个命令可以替代。

更改文件的所属主 chown 语法: chown [ -R ] 账户名 文件名 chown [ -R ] 账户名:组名 文件名

这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改。

[root@localhost ~]# mkdir test // 创建 'test' 目录
[root@localhost ~]# useradd user1 // 创建用户 'user1', 关于 'useradd' 命令会在后续章节介绍。
[root@localhost ~]# touch test/test2 // 在test目录下创建test2文件
[root@localhost ~]# chown user1 test
[root@localhost ~]# ls -l test
总用量 0
-rw-r--r-- 1 root root 0 5月  10 09:00 test2
[root@localhost ~]# ls -ld test   // test目录所属主已经由 'root' 改为 'user1'.
drwxr-xr-x 2 user1 root 4096 5月  10 09:00 test
[root@localhost ~]# ls -l test  // 但是test目录下的test2文件所属主依旧是 'root'.
总用量 0
-rw-r--r-- 1 root root 0 5月  10 09:00 test2
[root@localhost ~]# chown -R user1:testgroup test
[root@localhost ~]# ls -l test
总用量 0
-rw-r--r-- 1 user1 testgroup 0 5月  10 09:00 test2
chown -R user1:testgroup test //把test目录以及目录下的文件都修改成所属主为user1, 所属组为testgroup

改变用户对文件的读写执行权限 chmod 在linux中为了方便更改这些权限,linux使用数字去代替rwx, 具体规则为 ‘r’ 等于4, ‘w’ 等于2, ‘x’ 等于1, ‘-‘ 等于0. 举个例子: ‘-rwxrwx—’ 用数字表示就是 ‘770’, 具体是这样来的: ‘rwx’ = 4+2+1=7; ‘rwx’ = 4+2+1=7; ‘- - -‘ = 0+0+0=0.

chmod 语法: chmod [-R] xyz 文件名 (这里的xyz,表示数字)

‘-R’ 选项作用同chown,级联更改。

值得提一下的是,在linux系统中,默认一个目录的权限为 755,而一个文件的默认权限为644.

[root@localhost ~]# ls -ld test
drwxr-xr-x 2 user1 testgroup 4096 5月  10 09:00 test
[root@localhost ~]# ls -l test
总用量 0
-rw-r--r-- 1 user1 testgroup 0 5月  10 09:00 test2
[root@localhost ~]# chmod 750 test
[root@localhost ~]# ls -ld test
drwxr-x--- 2 user1 testgroup 4096 5月  10 09:00 test
[root@localhost ~]# ls -l test/test2
-rw-r--r-- 1 user1 testgroup 0 5月  10 09:00 test/test2
[root@localhost ~]# chmod 700 test/test2
[root@localhost ~]# chmod -R 700 test
[root@localhost ~]# ls -ld test
drwx------ 2 user1 testgroup 4096 5月  10 09:00 test
[root@localhost ~]# ls -l test
总用量 0
-rwx------ 1 user1 testgroup 0 5月  10 09:00 test2

如果你创建了一个目录,而该目录不想让其他人看到内容,则只需设置成 ‘rwxr—–’ (740) 即可。’chmod’ 还支持使用rwx的方式来设置权限。基本上就九个属性分别是(1)user (2)group (3)others, 我们可以使用u, g, o 来代表它们三个的属性,此外, a 则代表 all 亦即全部。例如:

[root@localhost ~]# chmod u=rwx,og=rx test/test2
[root@localhost ~]# ls -l test/test2
-rwxr-xr-x 1 user1 testgroup 0 5月  10 09:00 test/test2

这样可以把 ‘test/test2’ 文件权限修改为 ‘rwxr-xr-x’. 另外还可以针对u, g, o, a增加或者减少某个权限(读,写,执行),例如:

[root@localhost ~]# chmod u-x test/test2
[root@localhost ~]# ls -l test
总用量 0
-rw-r-xr-x 1 user1 testgroup 0 5月  10 09:00 test2
[root@localhost ~]# chmod a-x test/test2
[root@localhost ~]# ls -l test/test2
-rw-r--r-- 1 user1 testgroup 0 5月  10 09:00 test/test2
[root@localhost ~]# chmod u+x test/test2
[root@localhost ~]# ls -l test/test2
-rwxr--r-- 1 user1 testgroup 0 5月  10 09:00 test/test2

命令: umask

默认情况下,目录权限值为755, 普通文件权限值为644, 那么这个值是由谁规定呢?追究其原因就涉及到了 ‘umask’. umask语法: umask xxx (这里的xxx代表三个数字) 查看umask值只要输入 ‘umask’ 然后回车。

[root@localhost ~]# umask
0022

umask预设是0022,其代表什么含义?先看一下下面的规则:

1)若用户建立为普通文件,则预设 ‘没有可执行权限’, 只有’rw’两个权限。最大为666 (‘-rw-rw-rw-‘).

2)若用户建立为目录,则预设所有权限均开放,即777 (‘drwxrwxrwx’).

umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限。所以目录的权限为 'rwxrwxrwx' - '----w--w-' = 'rwxr-xr-x',普通文件的权限为 'rw-rw-rw-' - '----w--w-' = 'rw-r--r--'. umask的值是可以自定义的,比如设定umask 为 002,你再创建目录或者文件时,默认权限分别为 'rwxrwxrwx' - '-------w-' = 'rwxrwxr-x' 和 'rw-rw-rw-' - '-------w-' = 'rw-rw-r--'.

[root@localhost ~]# umask 002
[root@localhost ~]# mkdir test2
[root@localhost ~]# ls -ld test2
drwxrwxr-x 2 root root 4096 5月  10 09:44 test2
[root@localhost ~]# touch test3
[root@localhost ~]# ls -l test3
-rw-rw-r-- 1 root root 0 5月  10 09:45 test3

可以看到创建的目录权限默认变为775, 而文件默认权限变为664. 然后再把umask改回来。

[root@localhost ~]# umask 022
[root@localhost ~]# touch test4
[root@localhost ~]# ls -l test4
-rw-r--r-- 1 root root 0 5月  10 09:45 test4

注:umask 可以在 /etc/bashrc 里面更改,预设情况下,root的umask为022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限