文件系统结构
Linux中,所有的文件与目录都由根目录/ 开始。那是所有目录与文件的源头。然后再一个一个分支下来,有点像树状。因此,我们也称这种目录配置方式为:“目录树(directory tree)”。这个目录树主要特性有:
根目录是整个系统最重要的一个目录,因为所有的目录都是由它衍生出来,而且根目录也与开机,还原,系统修复等操作有关。
由于系统开机需要特定的开机软件、内核文件、开机所需要的程序、函数库等文件数据,若系统出现异常时,根目录也要有能够修复文件系统的程序。由此可见根目录的重要性,所以FHS建议,根目录不要放在非常大的分区内,因为越大防止的文件越多,出错的几率也越大,性能也越不好,所以,根目录应该越小越好,且应用程序所安装的软件最好不要与根目录放在一个分区内。
由此我们来说说下面的文件都是什么,又怎么放置才好。
/bin
/bin 基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令;比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。做为基础系统所需要的最基础的命令就是放在这里。
/boot
/boot Linux的内核及引导系统程序所需要的文件。
/dev
/dev 设备文件存储目录,比如声卡、磁盘... ...
/etc
/etc 系统配置文件的所在地,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件;
/home
/home 普通用户家目录默认存放目录;
/lib
/lib 库文件存放目录
/lost+found
/lost+found 在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。 有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。
/media
/media 即插即用型存储设备的挂载点自动在这个目录下创建,比如USB盘系统自动挂载后,会在这个目录下产生一个目录 ;CDROM/DVD自动挂载后,也会在这个目录中创建一个目录,类似cdrom 的目录。这个只有在最新的发行套件上才有,比如Fedora Core 4.0 5.0 等。可以参看/etc/fstab的定义;
/mnt
/mnt 这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。主要看/etc/fstab中怎么定义了;比如光驱可以挂载到/mnt/cdrom 。
/opt
/opt 表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包,比如在Fedora Core 5.0中,OpenOffice就是安装在这里。有些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以通过 ./configure --prefix=/opt/目录 。
/proc
/proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。
/root
/root Linux超级权限用户root的家目录;
/sbin
/sbin 大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin;/usr/X11R6/sbin或/usr/local/sbin目录是相似的; 我们记住就行了,凡是目录sbin中包含的都是root权限才能执行的。
/tmp
/tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。
/usr
/usr 这个是系统存放程序的目录,比如命令、帮助文件等。这个目录下有很多的文件和目录。当我们安装一个Linux发行版官方提供的软件包时,大多安装在这里。如果有涉及服务器配置文件的,会把配置文件安装在/etc目录中。/usr目录下包括涉及字体目录/usr/share/fonts ,帮助目录 /usr/share/man或/usr/share/doc,普通用户可执行文件目录/usr/bin 或/usr/local/bin 或/usr/X11R6/bin ,超级权限用户root的可执行命令存放目录,比如 /usr/sbin 或/usr/X11R6/sbin 或/usr/local/sbin 等;还有程序的头文件存放目录/usr/include。
/var
/var 这个目录的内容是经常变动的,看名字就知道,我们可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地;
/usr/bin
/usr/bin 这个目录是可执行程序的目录,普通用户就有权限执行; 当我们从系统自带的软件包安装一个程序时,他的可执行文件大多会放在这个目录。比如安装gaim软件包时。相似的目录是/usr/local/bin; 有时/usr/bin中的文件是/usr/local/bin的链接文件;
/usr/sbin
/usr/sbin 这个目录也是可执行程序的目录,但大多存放涉及系统管理的命令。只有root权限才能执行;相似目录是/sbin 或/usr/local/sbin或/usr/X11R6/sbin等;
/usr/local
/usr/local 这个目录一般是用来存放用户自编译安装软件的存放目录;一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。这个目录下面有子目录。自己看看吧。
/usr/lib
/usr/lib 和/lib 目录相似,是库文件的存储目录;
/usr/share
/usr/share 系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,是用户都共用的吧。
/usr/share/doc
/usr/share/doc和/usr/share/man帮助文件,也是共用的吧;
usr/src
usr/src 是内核源码存放的目录,比如下面有内核源码目录,比如 linux 、linux-2.xxx.xx 目录等。有的系统也会把源码软件包安装在这里。比如Fedora/Redhat,当我们安装file.src.rpm的时候,这些软件包会安装在/usr/src/redhat相应的目录中。另外Fedhat 4.0 5.0,他的内核源码包的目录位于/usr/src/kernels目录下的某个目录中(只有安装后才会生成相应目录);
/var/adm
/var/adm 比如软件包安装信息、日志、管理信息等,在Slackware操作系统中是有这个目录的。在Fedora中好象没有;自己看看吧。
/var/log
/var/log 系统日志存放,分析日志要看这个目录的东西;
/var/spool
/var/spool 打印机、邮件、代理服务器等假脱机目录;
Linux文件类型
Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。
Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;现在我们进行一个简要的说明;
linux下ll命令列出的文件类型:
Linux下可以用ls –l 命令来判断文件类型,可以根据ll命令列出的前十个字母判断第一列中的10个字符来判断。
-rw-r—r— "-"开头的都是普通文件;
[root@centos7 /app]#ll a
-rw-r--r--. 1 root root 0 Aug 6 11:07 a
drw-r—r— "d"开头的是目录文件;
drwxr-xr-x. 2 root root 6 Aug 6 11:08 2
brw-r—r— "b"开头的文件都是块设备文件;
[root@centos7 ~]#ll /dev/sda
brw-rw----. 1 root disk 8, 0 Aug 5 09:57 /dev/sda
crw-r—r— "c"开头的文件都是字符设备文件;
[root@centos7 ~]#ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Aug 5 09:57 /dev/zero
srw-r—r— "s"开头的文件都是socket文件;
[root@centos7 ~]#ll /dev/log
srw-rw-rw-. 1 root root 0 Aug 5 09:57 /dev/log
prw-r—r— "p"开头的文件都是管道文件;
[root@centos7 /app]#ll /run/dmeventd-client
prw-------. 1 root root 0 Aug 5 09:57 /run/dmeventd-client
lrw-r—r— "l"开头的文件都是软链接文件;
[root@centos7 ~]#ls /bin -dl
lrwxrwxrwx. 1 root root 7 Jul 15 09:42 /bin -> usr/bin
显示当前工作目录
当前路径
[root@centos7 /app]#pwd
/app
绝对路径 在app目录下进入dir2
[root@centos7 /app]#cd /app/dir1/dir2
[root@centos7 /app/dir1/dir2]#
相对路径 返回app目录下
[root@centos7 /app]#cd /app/dir1/dir2
[root@centos7 /app/dir1/dir2]#cd ../../
[root@centos7 /app]#
基名:basename
目录名:dirname
dir2是基名,cd /app/dir1/是目录名
[root@centos7 /app]#cd /app/dir1/dir2
列出目录内容
列出当前目录的内容或指定目录
用法: ls [options] [files_or_dirs]
示例:
ls -a 包含隐藏文件 前面带 "." 都是隐藏文件
[root@centos7 ~]#ls -a
. .bash_profile.swn Desktop .local .tcshrc
.. .bash_profile.swo Documents Music Templates
ls -l 显示额外的信息
ls -R 目录递归通过 显示目录下所有文件
[root@centos7 ~]#ls -R /app/dir1
/app/dir1:
dir2
/app/dir1/dir2:
12345
ls -ld 目录和符号链接信息
ls -1 文件分行显示
ls –S 按从大到小排序
ls –t 按mtime排序
ls –u 配合-t选项,显示并按atime从新到旧排序
ls –U 按目录存放顺序显示
ls –X 按文件后缀排序
文件通配符
- 匹配零个或多个字符
[root@centos7 /app]#cat 22.txt
nihao
[root@centos7 /app]#cat *2.txt
nihao
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[root@centos7 /app]#ls
2 bin erdong.sh f3 nihaoliu.sh somefile2.tar z1
a1 |cut f1 hello.sh Rescue.asd somefile3.tar.xz2
bianliang.sh dir1 f2 liuerdong.sh scp70.sh tmp
[root@centos7 /app]#ls f[0-9]
f1 f2 f3
[a-z]:字母
[A-Z]:字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
[root@centos7 /app/2]#ls
fa.txt fb.txt fc.txt fd.txt fe.txt ff.txt fg.txt
fA.txt fB.txt fC.txt fD.txt fE.txt fF.txt fG.txt
[root@centos7 /app/2]#ls f[^A].txt
fa.txt fB.txt fC.txt fD.txt fE.txt fF.txt fG.txt
fb.txt fc.txt fd.txt fe.txt ff.txt fg.txt
文件通配符
预定义的字符类: #man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[root@centos7 /app/2]#ls f[[:upper:]].txt
fA.txt fB.txt fC.txt fD.txt fE.txt fF.txt fG.txt
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
创建空文件和刷新时间
touch命令:
touch [OPTION]... FILE...
-a 仅改变 atime和ctime
[root@centos7 /app/dir1]#touch f1 创建f1文件
[root@centos7 /app/dir1]#ll
total 0
drwxr-xr-x. 2 root root 36 Aug 6 11:48 dir2
-rw-r--r--. 1 root root 0 Aug 6 14:50 f1 原始时间
[root@centos7 /app/dir1]#touch -a f1 -a 修改时间
[root@centos7 /app/dir1]#ll
total 0
drwxr-xr-x. 2 root root 36 Aug 6 11:48 dir2
-rw-r--r--. 1 root root 0 Aug 6 14:50 f1
[root@centos7 /app/dir1]#stat f1
File: ‘f1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 100678878 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2017-08-06 14:51:18.781898364 +0800 a时间改变
Modify: 2017-08-06 14:50:37.535899292 +0800
Change: 2017-08-06 14:51:18.781898364 +0800 c 时间改变
Birth: -
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
[root@centos7 /app/dir1]#touch -t 202012011830.30 f1
[root@centos7 /app/dir1]#stat f1
File: ‘f1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 100678878 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-12-01 18:30:30.000000000 +0800 a时间改变
Modify: 2020-12-01 18:30:30.000000000 +0800 m时间改变
Change: 2017-08-06 15:00:49.629885517 +0800
Birth: -
指定atime和mtime的时间戳
-c 如果文件不存在,则不予创建
cp常用选项
-i:覆盖前提示 –n:不覆盖,注意两者顺序
[root@centos7 /app/dir1]#ll root管理员 cp=cp- i
total 0
drwxr-xr-x. 2 root root 36 Aug 6 11:48 dir2 -i
-rw-r--r--. 1 root root 0 Dec 1 2020 f1 源文件f1
[root@centos7 /app/dir1]#cp /app/f2 /app/dir1/f1
cp: overwrite ‘/app/dir1/f1’? y 普通用户不提醒覆盖
[root@centos7 /app/dir1]#ll
total 4
drwxr-xr-x. 2 root root 36 Aug 6 11:48 dir2
-rw-r--r--. 1 root root 2586 Aug 6 15:13 f1 文件大小发生改变
-r, -R: 递归复制目录及内部的所有内容
将etc内容全部复制并改名成zzz
[root@centos7 /app/dir1]#cp -r /etc /app/dir1/zzz
[root@centos7 /app/dir1]#rm -rf dev
[root@centos7 /app/dir1]#ll
total 16
drwxr-xr-x. 2 root root 36 Aug 6 11:48 dir2
-rw-r--r--. 1 root root 2586 Aug 6 15:13 f1
drwxr-xr-x. 136 root root 8192 Aug 6 15:38 zzz
-a: 归档,相当于-dR --preserv=all
-d: --no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp:
links
xattr
context
all
-p: 等同--preserv=mode,ownership,timestamp -v: --verbose
-f: --force
zzz文件中已经有issue, 是否覆盖 -f 效果跟i相反
root@centos7 /app/dir1/zzz]#cp /etc/issue /app/dir1/zzz -f
cp: overwrite ‘/app/dir1/zzz/issue’? y
[root@centos7 /app/dir1/zzz]#ll
drwxr-xr-x. 2 root root 52 Aug 6 15:38 iscsi
-rw-r--r--. 1 root root 23 Aug 6 15:51 issue
-rw-r--r--. 1 root root 22 Aug 6 15:38 issue.net
rm命令
选项 -r 递归,删除目录 ;-f 不提示,直接删除;-i 提示
rm命令删除一个大文件技巧
rm删除一个大文件时,如果文件正在使用,即使删除了这个大文件,磁盘空间也无法释放,为了让磁盘空间尽快释放,可以先用> 清空这个文件,再用rm删除这个文件,就可以马上释放磁盘空间。
如何安全的删除一个文件,可以使用如下命令
[root@centos6 app]#shred -zuvn5 f3 #shred相当于碎纸机,z清理;v过程可见;n5重复五次;u最后把文件删除
shred: f3: pass 1/6 (random)...
shred: f3: pass 2/6 (ffffff)...
shred: f3: pass 3/6 (random)...
shred: f3: pass 4/6 (000000)...
shred: f3: pass 5/6 (random)...
shred: f3: pass 6/6 (000000)...
shred: f3: removing
shred: f3: renamed to 00
shred: 00: renamed to 0
shred: f3: removed
rm删除点打头的文件
[root@centos6 app]#touch .a
[root@centos6 app]#ls -a
. .. .a f1 f1.txt.bak f2 f2.txt.bak f3.txt.bak sda1 xxx zero
[root@centos6 app]#rm -f * #不能删除点打头的文件
[root@centos6 app]#ls -a
. .. .a #点打头的文件还在
[root@centos6 app]#rm -f .* #执行这条命令才能删除点打头的文件
[root@centos6 app]#ls -a
rm删除目录
[root@centos6 app]#mkdir f1
[root@centos6 app]#ls
f1
[root@centos6 app]#rm -rf /app #提示要把目录也删除,但/app是个分区挂载点,
无法删除,只把目录里的内容删除
rm: cannot remove `/app': Device or resource busy
[root@centos6 app]#ls
[root@centos6 app]#mkdir f1
[root@centos6 app]#ls
f1
[root@centos6 app]#rm -rf /app/* #不提示删除/app
[root@centos6 app]#ls
总结:分区挂载点无法删除,要想删除一个目录下的文件而不删除目录
的写法为rm -rf /D/* ,如果rm-rf /D 则会连目录也删除。
软连接和硬链接、inode
ln 创建硬链接 ln-s 创建软连接
软连接和硬链接的区别
本质:硬链接本质上是同一个文件,只是一个文件具有两个名字,彼此之间是平等的关系,节点号相同;
软连接本质上不是同一个文件,节点号不同,相当于windows里面的快捷方式。
区别:
硬链接不允许对目录创建,软连接可以,如果要想使目录的链接数增加,可以在当前目录内创建多个子目录来实现;
硬链接不允许跨分区,软链接可以;
创建硬链接后连接数加1,软链接链接数不增长;
删除硬链接后互相不影响,删除软连接源文件后,软连接就失效了;
硬链接文件的大小和属性完全相同,软链接大小、属性和源文件不同,软链接的大小由源文件的名的字符多少决定;
软链接的相对路径不是相对于当前工作目录,而是相对于软连接的当前工作目录,硬链接相对于当前工作目录和相对于硬链接的工作目录都可以。
[root@centos6 app]#ln -s f1 f2 #创建f1文件的软连接
[root@centos6 app]#ll
total 0
-rw-r--r--. 1 root root 0 Jul 19 22:06 f1
lrwxrwxrwx. 1 root root 2 Jul 19 22:06 f2 -> f1 #f2大小为f1的字符数
网友评论