1 Linux系统目录结构基于FHS(Filesystem Hierarchy Standard)。以CentOS7为例
[root@centos7 ~]#tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── misc
├── mnt
├── net
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
22 directories, 0 files
主要目录及描述
目录 | 描述 |
---|---|
/ | 第一层次结构 的根、 整个文件系统层次结构的根目录。 |
/bin | 需要在单用户模式可用的必要命令(可执行文件);面向所有用户,例如: cat、 ls、 cp。 |
/boot | 引导程序文件,例如: kernel、initrd;时常是一个单独的分区。 |
/dev | 必要设备, 例如:/dev/null。 |
/etc | 特定主机,系统范围内的配置文件。 |
/home | 用户的家目录,包含保存的文件、个人设置等。 |
/lib | /bin/ 和 /sbin/中二进制文件必要的库文件。 |
/meida | 可移除媒体(如CD-ROM)的挂载点 。 |
/mnt | 临时挂载的文件系统。 |
/root | /超级用户的家目录。 |
/sbin | 必要的系统二进制文件,例如: init、 ip、 mount。 |
/tmp | 临时文件。 |
/proc | 虚拟文件系统,将内核与进程状态归档为文本文件。 |
/var | 变量文件——在正常运行的系统中其内容不断变化的文件,如日志,脱机文件和临时电子邮件文件。 |
2 Linux文件元数据信息
使用stat命令查看文件的元数据信息
[root@centos7 ~]#stat initial-setup-ks.cfg
File: ‘initial-setup-ks.cfg’
Size: 1878 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201326681 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-04-18 19:01:52.985006598 +0800
Modify: 2020-04-18 19:01:52.985006598 +0800
Change: 2020-04-18 19:01:52.985006598 +0800
Birth: -
File:文件名
Size:文件大小(单位:byte)
Blocks:文件占用的数据块个数
IO Block:文件所占用数据块的块容量(单位:byte)
regular file:普通文件(文件类型)
Device:设备号(十六进制/十进制)
Inode:索引节点
Links:硬连接数(1代表没有其它的硬连接)
Access:第一个Access,权限(八进制/rwx格式)
Uid:所属主(ID号/名称)
Gid:所属组(ID号/名称)
Access:第二个Access,最近访问时间
Modify:最近数据修改时间
Change:最近元数据修改时间
Birth:创建时间
可以使用touch命令修改文件的时间戳信息
touch [OPTION]… FILE…
-a 改变访问时间
-m 改变数据修改时间
对于普通文件,修改atime和mtime都是修改了元数据信息,所以ctime会变更为当前时间。
[root@centos7 ~]#stat initial-setup-ks.cfg
File: ‘initial-setup-ks.cfg’
Size: 1878 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201326681 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-04-27 22:05:08.273089557 +0800
Modify: 2020-04-27 22:05:08.273089557 +0800
Change: 2020-04-27 22:05:08.273089557 +0800
Birth: -
[root@centos7 ~]#touch -am -t 200808080808.08 initial-setup-ks.cfg ; date ; stat initial-setup-ks.cfg
Mon Apr 27 22:05:34 CST 2020
File: ‘initial-setup-ks.cfg’
Size: 1878 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201326681 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2008-08-08 08:08:08.000000000 +0800
Modify: 2008-08-08 08:08:08.000000000 +0800
Change: 2020-04-27 22:05:34.814091606 +0800
Birth: -
3 Linux软连接和硬连接比较
1.硬连接无法跨分区创建
[root@centos7 data]#ls
f1 f2
[root@centos7 data]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sr0 11:0 1 8.1G 0 rom /mnt
[root@centos7 data]#ln -s /data/f1 /f1_s_link
[root@centos7 data]#ll -h /f1_s_link
lrwxrwxrwx. 1 root root 8 Apr 27 22:30 /f1_s_link -> /data/f1
[root@centos7 data]#ln /data/f2 /f2_h_link
ln: failed to create hard link ‘/f2_h_link’ => ‘f2’: Invalid cross-device link
普通文件f1和f2,/data和/ 属于不同分区,f1再/ 分区创建软连接成功,f2创建硬连接提示不能跨设备创建。
2.硬连接无法针对目录创建
[root@centos7 /]#ln -s /data /data_s_link
[root@centos7 /]#ll /data_s_link
lrwxrwxrwx. 1 root root 5 Apr 27 22:40 /data_s_link -> /data
[root@centos7 /]#ln /data /data_h_link
ln: ‘/data’: hard link not allowed for directory
针对/data目录的软连接/data_s_link创建成功,硬连接提示不允许对目录创建。
3.硬连接inode number和源文件相同
[root@centos7 data]#ls
f1 f2
[root@centos7 data]#ln -s f1 f1_s_link
[root@centos7 data]#ln f2 f2_h_link
67 f1 69 f1_s_link 68 f2 68 f2_h_link
f1源文件inode number为67,软连接inode number为69.
f2源文件inode number为68,硬连接inode number同为68.
4.创建硬连接会使文件链接数增加
[root@centos7 data]#ll -h
total 0
-rw-r--r--. 1 root root 0 Apr 27 22:46 f1
-rw-r--r--. 1 root root 0 Apr 27 22:46 f2
[root@centos7 data]#ln -s f1 f1_s_link
[root@centos7 data]#ln f2 f2_h_link
[root@centos7 data]#ll -h
total 0
-rw-r--r--. 1 root root 0 Apr 27 22:46 f1
lrwxrwxrwx. 1 root root 2 Apr 27 22:54 f1_s_link -> f1
-rw-r--r--. 2 root root 0 Apr 27 22:46 f2
-rw-r--r--. 2 root root 0 Apr 27 22:46 f2_h_link
f1,f2源文件连接数都为1,f1创建软连接后,源文件和软连接文件还是1。f2创建硬连接后,源文件和硬连接文件都变为2。
5.硬连接和源文件是同一文件
[root@centos7 data]#ll -h
total 0
-rw-r--r--. 1 root root 0 Apr 27 22:46 f1
lrwxrwxrwx. 1 root root 2 Apr 27 22:54 f1_s_link -> f1
-rw-r--r--. 2 root root 0 Apr 27 22:46 f2
-rw-r--r--. 2 root root 0 Apr 27 22:46 f2_h_link
f2硬连接文件和f2源文件属性,大小,修改时间完全一致,为同一文件,只是文件名不同。
6.硬连接在源文件删除后仍可访问
[root@centos7 data]#rm -rf f{1,2}
[root@centos7 data]#cat f1_s_link
cat: f1_s_link: No such file or directory
[root@centos7 data]#cat f2_h_link
[root@centos7 data]#
f1源文件删除后,访问软连接文件提示无法找到文件,不能再访问。
f2源文件删除后,访问硬连接文件仍可正常访问。
7.硬链接文件和源文件大小一致
[root@centos7 data]#ll -h
total 0
-rw-r--r--. 1 root root 0 Apr 27 22:46 f1
lrwxrwxrwx. 1 root root 2 Apr 27 22:54 f1_s_link -> f1
-rw-r--r--. 2 root root 0 Apr 27 22:46 f2
-rw-r--r--. 2 root root 0 Apr 27 22:46 f2_h_link
8.创建硬链接和软连接的相对路径写法不同
[root@centos7 data]#ls
dir f1 f2
[root@centos7 data]#ln -s ../f1 ./dir/f1_s_link
[root@centos7 data]#ln f2 dir/f2_h_link
[root@centos7 data]#ll -h dir/
total 0
lrwxrwxrwx. 1 root root 5 Apr 27 23:13 f1_s_link -> ../f1
-rw-r--r--. 2 root root 0 Apr 27 23:09 f2_h_link
创建软连接源文件要写相对于连接文件的相对路径。
创建硬连接可直接写相对于当前所在路径的路径。
4 Linux常用文件管理命令及说明
ls
列出指定目录下的内容
ls(选项)(参数)
-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
-A:显示除影藏文件“.”和“…”以外的所有文件列表;
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
–file-type:与“-F”选项的功能相同,但是不显示“”;
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
–full-time:列出完整的日期与时间;
–color[=WHEN]:使用不同的颜色高亮显示不同类型的。
[root@centos7 ~]#ls
anaconda-ks.cfg initial-setup-ks.cfg
[root@centos7 ~]#ls -a
. anaconda-ks.cfg .bash_logout .bashrc .config .dbus .tcshrc
.. .bash_history .bash_profile .cache .cshrc initial-setup-ks.cfg .viminfo
[root@centos7 ~]#ll -alh
total 36K
dr-xr-x---. 5 root root 221 Apr 27 23:49 .
dr-xr-xr-x. 20 root root 276 Apr 27 23:10 ..
-rw-------. 1 root root 1.9K Apr 18 18:55 anaconda-ks.cfg
-rw-------. 1 root root 482 Apr 27 06:01 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 205 Apr 27 07:47 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwx------. 4 root root 31 Apr 27 03:17 .cache
drwx------. 4 root root 30 Apr 27 03:17 .config
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwx------. 3 root root 25 Apr 18 19:01 .dbus
-rw-r--r--. 1 root root 1.9K Aug 8 2008 initial-setup-ks.cfg
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-rw-------. 1 root root 3.4K Apr 27 23:19 .viminfo
cp
复制
cp(选项)(参数)
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
cp file /usr/men/tmp/file1
cp -r /usr/men /tmp
mv
剪切
mv(选项)(参数)
–backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
–strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
–target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
mv ex1 new1
rm
删除
rm (选项)(参数)
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
–preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
rm -i test example
Remove test ?n(不删除文件test)
Remove example ?y(删除文件example)
rm -r *
cd
切换目录
cd (选项) (参数)
-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
-当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。
mkdir
创建目录
mkdir (选项)(参数)
-Z:设置安全上下文,当使用SELinux时有效;
-m<目标属性>或–mode<目标属性>建立目录的同时设置目录的权限;
-p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
–version 显示版本信息。
mkdir -p /data/test/A/B --在/data目录下递归创建/test/A/B三个目录
rmdir
删除目录
rmdir(选项)(参数)
-p或–parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
–ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息;
-v或-verboes:显示命令的详细执行过程;
–help:显示命令的帮助信息;
–version:显示命令的版本信息。
rmdir -p bin/os
more
分屏显示文本内容
more(语法)(参数)
-<数字>:指定每屏显示的行数;
-d:显示“[press space to continue,‘q’ to quit.]”和“[Press ‘h’ for instructions]”;
-c:不进行滚屏操作。每次刷新这个屏幕;
-s:将多个空行压缩成一行显示;
-u:禁止下划线;
+<数字>:从指定数字的行开始显示。
more -dc file
more -c -10 file
less
分屏显示文本内容
less(选项)(参数)
-e:文件内容显示完毕后,自动退出;
-f:强制显示文件;
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-l:搜索时忽略大小写的差异;
-N:每一行行首显示行号;
-s:将连续多个空行压缩成一行显示;
-S:在单行显示较长的内容,而不换行显示;
-x<数字>:将TAB字符显示为指定个数的空格字符。
less file
head
显示文件开头内容
head(选项)(参数)
-n<数字>:指定显示头部内容的行数;
-c<字符数>:指定显示头部内容的字符数;
-v:总是显示文件名的头信息;
-q:不显示文件名的头信息。
tail
显示文件尾行内容
tail(选项)(参数)
–retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用;
-c或——bytes=:输出文件尾部的N(N为整数)个字节内容;
-f<name/descriptor>或;–follow:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效;
-F:与选项“-follow=name”和“–retry"连用时功能相同;
-n或——line=:输出文件的尾部N(N位数字)行内容。
–pid=<进程号>:与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令;
-q或——quiet或——silent:当有多个文件参数时,不输出各个文件名;
-s<秒数>或——sleep-interal=<秒数>:与“-f”选项连用,指定监视文件变化时间隔的秒数;
-v或——verbose:当有多个文件参数时,总是输出各个文件名;
–help:显示指令的帮助信息;
–version:显示指令的版本信息。
cat
查看文件内容
cat(选项)(参数)
-n或-number:有1开始对所有输出的行数编号;
-b或–number-nonblank:和-n相似,只不过对于空白行不编号;
-s或–squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行;
-A:显示不可打印字符,行尾显示“$”;
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;
tac
倒叙查看文件内容
tac(选项)(参数)
-a或——append:将内容追加到文件的末尾;
-i或——ignore-interrupts:忽略中断信号。
5 复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
复制:cp /etc/profile /tmp
替换:vim profile ex模式:%s/^[[:space:]]\+//
6 设置vim种tab缩进为4个字符
vim ex模式:
set expandtab 设置缩进为空格而不是tab制表符
set ts=4 设置缩进为4个空格