1 Linux 系统目录结构

Linux 系统目录结构.png

1.1 系统启动项

  • /boot:
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /etc:
    etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /lib
    lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
  • /sys
    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统  sysfs 。
    sysfs 文件系统集成了下面 3 种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
    该文件系统是内核设备树的一个直观反映。
    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

1.2 外部挂载项

  • /dev
    dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
  • /media
    linux 系统会自动识别一些设备,例如U 盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
  • /mnt
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

1.3 指令集合

  • /bin
    bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令
  • /sbin
    s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
  • /usr
     usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
  • /usr/bin:
    系统用户使用的应用程序。
  • /usr/sbin:
    超级用户使用的比较高级的管理程序和系统守护程序。

1.4 临时文件

  • /run
    是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
  • /lost+found
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /tmp
    tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

1.5 账户相关

  • /root
    该目录为系统管理员,也称作超级权限者的用户主目录。
  • /home
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
  • /usr/src:
    内核源代码默认的放置目录。

1.6 运行时状态

  • /proc
    proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的 ping 命令,使别人无法 ping 你的机器:
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /var
    var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

1.7 其他内容

  • /opt
    opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个 ORACLE 数据库则就可以放到这个目录下。默认是空的。
  • /selinux
      这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放 selinux 相关的文件的。
  • /srv
      该目录存放一些服务启动之后需要提取的数据。

2 Linux 文件基本属性

在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

  • chown (change owner) : 修改所属用户与组。
  • chmod (change mode) : 修改用户的权限。

2.1 查看文件的权限属性

[root@www /]# ls -l
total 64
dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot
……
  1. 第一列有 10 个字符代表这个文件/文件夹的属性。
    1. 第 1 字符,文件类型。- 普通文件,d 目录,l 符号链接,c 字符设备文件,b 块设备文件,s 套接字文件,p 管道文件。
    2. 后面 9 字符,3 个一组,分别代表所有者/所属组/其他用户的权限。一组内为 rwx 权限,读取-写入-执行权限。
  2. 第二列表示链接数,表示有多少个文件链接到 inode 号码。
  3. 第三列表示拥有者
  4. 第四列表示所属群组
  5. 第五列表示文档容量大小,单位字节
  6. 第六列表示文档最后修改时间,注意不是文档的创建时间哦
  7. 第七列表示文档名称。以点(.)开头的是隐藏文档

2.2 更改文件属性

# chgrp:更改文件属组
chgrp [-R] 属组名 文件名
 
# chown:更改文件属主,也可以同时更改文件属组
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
 
# chmod:更改文件9个属性
# r-4 w-2 x-1
[root@www ~]# ls -al .bashrc
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc
 
- 数字格式
 
// chmod [-R] xyz 文件名
// -R 代表递归,即目录下所有文件都会更改属性
// x 代表属主权限
// y 代表属组权限
// z 代表其他权限
 
- 符号格式
 
chmod [-R] u=rwx,g=rwx,o-rwx 文件名
// -R 代表递归,即目录下所有文件都会更改属性
// u 代表属主
// g 代表属组
// o 代表其他

使用  u, g, o  来代表三种身份的权限。

此外, a  则代表  all,即全部的身份。读写的权限可以写成  r, w, x,也就是可以使用下表的方式来看:

chmodu
g
o
a
+(加入)
-(除去)
=(设定)
r
w
x
文件或目录

3 Linux 链接概念

Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln  命令产生硬链接。

硬连接

硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软连接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

[oracle@Linux]$ touch f1          # 创建一个测试文件f1
[oracle@Linux]$ ln f1 f2          # 创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3       # 创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li            # -i 参数显示文件的inode节点信息
total 0
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号连接 f3 文件无效

  • 1).删除符号连接 f3,对 f1,f2 无影响;
  • 2).删除硬连接 f2,对 f1,f3 也无影响;
  • 3).删除原文件 f1,对硬连接 f2 没有影响,导致符号连接 f3 失效;
  • 4).同时删除原文件 f1,硬连接 f2,整个文件会真正的被删除。

4 特殊文件目录

4.1 /dev/shm 目录

linux 中 /dev 目录下一般都是一些设备文件,例如磁盘、内存、摄像头等。

/dev/shm 这个目录是 linux 下一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中,而不是磁盘上。其大小是非固定的,即不是预先分配好的内存来存储的。(shm == shared memory)

因为这个目录的文件都是保存在内存中的,所以断电后,目录下的文件在断电后就会不见了!

4.1.1 简要说明

/dev/shm 的容量默认最大为内存的一半大小,使用 df -h 命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是 0 字节。

通过下面的命令,我们可以看到 /dev/shm 的文件系统为 tmpfs,即为临时文件系统。其他的几个 tmpfs 的挂载目录,其实质上于 /dev/shm 是一致的。

> df -h
文件系统        容量  已用  可用 已用% 挂载点
dev             3.9G     0  3.9G    0% /dev
run             3.9G  656K  3.9G    1% /run
/dev/sda2        58G   12G   43G   22% /
tmpfs           3.9G  1.0G  2.9G   26% /dev/shm
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
tmpfs           3.9G     0  3.9G    0% /tmp
/dev/sdb1        58G   24G   32G   44% /mnt/data
/dev/sda1       488M   26M  463M    6% /boot
tmpfs           791M     0  791M    0% /run/user/1000

4.1.2 文件测试

执行下面命令

> ls /dev/shm
> free -m
              total        used        free      shared  buff/cache   available
Mem:           7901         249        2217           1        5434        7595
Swap:             0

我们可以看到当前 /dev/shm 目录为空。当前系统使用的内存为 249MB,可用内存为 7595MB,而 buff/cache 缓存了 5434 MB 的内容在内存中,并且 shared 部分仅为 1MB 大小。
这个缓存的数据可以通过修改 /proc/sys/vm/ drop_caches 文件的内容为 3 来清理掉。这里就不做了。

现在我们在 /dev/shm 目录中创建一个大小为 1G 的文件

> dd if=/dev/zero of=/dev/shm/123.random bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,0.322718 秒,3.3 GB/秒

看看操作后的结果

> free -m
              total        used        free      shared  buff/cache   available
Mem:           7901         248        1191        1025        6461        6571
Swap:             0           0           0

可以看到,现在 shared 部分的内存已经有了 1025MB,并且 buff/cache 部分也增加了 1G 多,可用内存减少了 1G。

4.1.3 容量修改

如果需要使用到这个目录,并且默认的大小不够使用,而其他程序占用的内存又比较少的时候,可以修改器最大占用内存的大小,来达到自己的目的。
其实修改它的原理很简单,对其进行重新挂载即可,挂载的时候指定挂载参数。

> sudo mount -o size=5128M  -o remount /dev/shm

上面对 /dev/shm 进行了重新挂载,并修改其大小为 5G。使用下面的命令查看,可以看到确实已经修改为了 5G。

> df -h
文件系统        容量  已用  可用 已用% 挂载点
dev             3.9G     0  3.9G    0% /dev
run             3.9G  656K  3.9G    1% /run
/dev/sda2        58G   12G   43G   22% /
tmpfs           5.1G  1.0G  4.1G   20% /dev/shm
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
tmpfs           3.9G     0  3.9G    0% /tmp
/dev/sdb1        58G   24G   32G   44% /mnt/data
/dev/sda1       488M   26M  463M    6% /boot
tmpfs           791M     0  791M    0% /run/user/1000

可以通过修改 /etc/fstab 文件,来修改默认的参数。