Linux目录结构
Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图:
/(根目录)
每一个文件和目录从根目录开始。
只有root用户具有该根目录下的写权限。
请注意,/root是root用户的主目录,这与/.不一样。即/root是root用户目录,而/.是根目录。
bin(二进制可执行文件)
包含基本的用户命令,可被所有用户使用。
/bin 包含能够同时被用户和系统管理员使用的命令(二进制程序),并且要能够在不挂载其他任何文件系统的情况下可用。/bin 也可以包含脚本。
/bin 中不能存在子文件夹,以下的命令是必须有的(或者提供一个符号链接,总之这些命令需要可用):
cat chgrp chmod chown cp date dd df dmesg echo false hostname kill ln login ls
mkdir mknod more mount mv ps pwd rm rmdir sed sh stty su sync trye umount uname
如果系统中存在特定的子系统,那么以下的命令必须存在:
csh ed tar cpio gzip gunzip zcat netstat ping
boot(引导加载程序文件)
该目录中存放系统的内核文件和引导装载程序文件。
BOOT目录下的文件
vmlinuz
vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz。
vmlinuz的建立有两种方式。
一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。
二是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。
如果内核比较小,那么可以采用zImage或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。
initrd-x.x.x.img
initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。
System.map
System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。
dev(设备文件目录)
设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备。其用来存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件,包括字符设备和块设备等。
关于设备文件,详细可参考:
https://blog.csdn.net/sinat_36184075/article/details/71598834
etc(配置文件)
包含所有程序所需的配置文件。
也包含了用于启动/停止单个程序的启动和关闭shell脚本。
home(家目录)
所有用户用home目录来存储他们的文件及配置。
如home/zhangsan home/lisi
lib(系统库)
包含支持位于/bin和/sbin下的二进制文件的库文件。有点像Windows下的Program Files。
库文件名为 ld*或lib*.so.*
例如:ld-2.11.1.so,libncurses.so.5.7
media(媒体文件)
用于挂载可移动设备的临时目录。
举例来说,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy。
mnt(挂载目录)
临时安装目录,系统管理员可以挂载文件系统。
opt(可选的附加应用程序)
opt代表可选的。包含从个别厂商的附加应用程序。
附加应用程序应该安装在/opt/或者/opt/的子目录下。
root(root用户的家目录)
sbin(系统二进制文件)
就像/bin,/sbin同样也包含二进制可执行文件。
但是,在这个目录下的linux命令通常由系统管理员使用,对系统进行维护。例如:iptables、reboot、fdisk、ifconfig、swapon等命令。
srv(服务数据)
srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/里面。
usr(用户目录/unix系统资源)
包含二进制文件、库文件、文档和二级程序的源代码。
/usr/bin中包含用户程序的二进制文件。如果你在/bin中找不到用户二进制文件,到/usr/bin目录看看。例如:at、awk、cc、less、scp。
/usr/sbin中包含系统管理员的二进制文件。如果你在/sbin中找不到系统二进制文件,到/usr/sbin目录看看。例如:atd、cron、sshd、useradd、userdel。
/usr/lib中包含了/usr/bin和/usr/sbin用到的库。
/usr/local中包含了从源安装的用户程序。例如,当你从源安装Apache,它会在/usr/local/apache2中。
可参考:http://www.jb51.net/LINUXjishu/451993.html
var(变量文件)
这个目录下可以找到内容可能增长的文件。
这包括:系统日志文件(/var/log),包和数据库文件(/var/lib),电子邮件(/var/mail),打印队列(/var/spool),锁文件(/var/lock),多次重新启动需要的临时文件(/var/tmp)。
补充:
proc目录
Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
详情可参考:https://blog.csdn.net/hiyun9/article/details/51967742
Linux文件类型
文件类型包括:
d:文件夹
-:普通文件
l:链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如猫等串口设备)
s:套接口文件/数据接口文件(例如启动一个MySql服务器时会产生一个mysql.sock文件)
补充
链接分为两种:硬链接和软链接,关于他们的特点和区别,可参考:
https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html
改变文件权限:命令chmod
可通过权限字符或权限数字的形式来改变文件权限
| u | “user”的简写,意思是文件或目录的所有者。 |
| g | 用户组。 |
| o | “others”的简写,意思是其他所有的人。 |
| a | “all”的简写,是”u”, “g”和“ o” 三者的联合。 |
如:chmod u +x filename
改变文件所有者权限:命令chown
新版的Unix系统,chown 命令被用来更改文件或目录的所有者和用户组。
命令:chown 用户名:用户组名 文件
例如:chown work test.txt
(将test.txt的拥有者变更为work)
参数 | 结果 |
---|---|
bob | 把文件所有者从当前属主更改为用户 bob。 |
bob:users | 把文件所有者改为用户 bob,文件用户组改为用户组 users。 |
:admins | 把文件用户组改为组 admins,文件所有者不变。 |
bob: | 文件所有者改为用户 bob,文件用户组改为,用户 bob 登录系统时,所属的用户组。 |
改变文件所有者权限:命令chgrp
命令:chgrp 群组名称 文件
例如:chgrp named test
(将test的所属群组变更为named)
umask 设置默认权限
当创建一个文件时,umask 命令控制着文件的默认权限。 umask 命令使用八进制表示法来表达从文件模式属性中删除一个位掩码。
运行umask:
[me@linuxbox ~]$ umask
0002
接着我们创建一个文件:
[me@linuxbox ~]$ > foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw-rw-r-- 1 me me 0 2008-03-06 14:53 foo.txt
我们可以看到文件所有者和用户组都得到读权限和写权限,而其他人只是得到读权限。其他人没有得到写权限的原因是由掩码值决定的。重复我们的实验,这次自己设置掩码值:
[me@linuxbox ~]$ rm foo.txt
[me@linuxbox ~]$ umask 0000
[me@linuxbox ~]$ > foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw-rw-rw- 1 me me 0 2008-03-06 14:58 foo.txt
当掩码设置为0000(实质上是关掉它)之后,我们看到其他人能够读写文件。为了弄明白这是怎么回事,我们需要看一下掩码的八进制形式。 把掩码展开成二进制形式,然后与文件属性相比较,看看有什么区别:
Original file mode | — rw- rw- rw |
---|---|
Mask | 000 000 000 010 |
Result | — rw- rw- r– |
此刻先忽略掉开头的三个零,注意掩码中若出现一个数字1,则删除文件模式中和这个1在相同位置的属性,在这是指其他人的写权限。 这就是掩码要完成的任务。 掩码的二进制形式中,出现数字1的位置,相应地关掉一个文件模式属性。
umask 命令设置的掩码值只能在当前 shell 会话中生效,若当前shell 会话结束后,则必须重新设置。
对于只有只读权限的文件的写操作
对于只有只读权限的文件进行操作,在用vim打开文件后,进行了修改,此时,在想保存文件,若输入:wq
会提示'readonly' option is set (add ! to override)
,此时很简单,就按照它的提示,输入:wq!
即可。或者,你不想保存修改,就直接输入:q!
即可。
在vim中,:q
在vim中表示退出 :wq
表示保存并退出 :q!
表示强制不保存退出
参考:
1.https://www.linuxidc.com/Linux/2016-08/134701.htm
2.http://www.jb51.net/LINUXjishu/151820.html
3.https://www.linuxidc.com/Linux/2017-02/140371.htm