Linux系统文件目录结构功能、元数据信息、链接、文件管理命令

一、描述Linux发行版的系统目录名称命名规则以及用途

标准Linux文件系统(如:ext4),文件名称大小写敏感,文件名最长255个字节,包括路径在内文件名称最长4095个字节,Linux的文件系统分层结构:FHS Filesystem Hlerachy Standard.

Linux 系统目录名称及功能:

/bin -> usr/bin :所有用户使用的基本命令,binary二进制文件;不能关联至独立分区,OS启动会用到的程序,centos7之后软连接到/usr/bin.
/sbin -> usr/sbin:管理类的基本命令;不能关联至独立分区,OS启动会用到的程序,centos7之后软连接到/usr/sbin.
/boot:存放系统引导文件,内核kernel文件vmlinuz,引导加载器grub,bootloader。
/dev:device,设备文件及特殊文件存储位置,比如/dev/null、/dev/tty、/dev/pts/、/dev/sd[a-z] 设备文件分为两种:快设备文件(b),字符设备文件(c)
/etc:来源于拉丁语全称etcetera,意思是等等零星杂物,主要存放各种配置文件,比如/ect/passwd
/home:普通用户加目录
/lib -> usr/lib:library,启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules),centos7之后软连接到/usr/lib.
/lib64 -> usr/lib64:存放x86_64位系统上辅助共享库文件
/media:便携式移动设备挂载点
/mnt:mount,临时文件系统挂载点
/opt:optional,第三方应用程序安装位置,类似windows的program files
/proc:文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制(所以叫做/proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取有关进程的有用信息。比如:/proc/self/fd、/proc/cpuinfo
/root:管理员用户的家目录
/run:运行中的进程相关数据,通常用于存储进程pid文件
/srv:系统上运行的服务用到的数据
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/tmp:存放临时文件数据
/usr:universal shared,read-only data,操作系统文件;全局共享的只读数据目录。
/var:variable data files,存放经常发生变化的文件,比如日志log文件。
/misc  : misc device 杂项设备
/selinux: security enhanced linux,selinux相关的安全策略等信息的存储位置

二、描述文件的元数据信息有哪些,分别表示什么含义,如何查看,如何修改文件的时间戳信息?

[root@localhost ~]# stat ./anaconda-ks.cfg 
  File: ‘./anaconda-ks.cfg’
  Size: 1584            Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 201326670   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-12-29 15:02:41.373008092 +0800
Modify: 2020-12-19 10:33:41.376509872 +0800
Change: 2020-12-19 10:33:41.376509872 +0800
Birth: -
     
#各项参数解释:
File 文件名称;
Size 文件大小;
Blocks 占用的磁盘块数;
IO Block IO块大小;
regular file 这里是显示文件的类型,这是一个普通文件(文件类型-)
Device 所在设备;
Inode  Inode节点号;
Links  被链接的次数;(硬链接次数)
Access (0600/-rw-------) 文件的访问权限;
Uid   uid号和属主;
Gid   gid号和属组;
Access: 2020-12-29 15:02:41.373008092 +0800 文件最近一次的访问时间;(atime)
Modify: 2020-12-19 10:33:41.376509872 +0800 文件的修改时间,修改文件内容(数据);(mtime)
Change: 2020-12-19 10:33:41.376509872 +0800 文件的改变时间,修改文件的元数据。(ctime)

使用touch命令修改文件时间戳信息

touch 命令可以用来创建空文件或者刷新文件的时间

格式:

touch [OPTION] ... FILE...

选项说明:

  • -a 仅改变atime 和 ctime

  • -m 仅改变mtime 和 ctime

  • -t 将时间修改为参数指定的日期,[[CC]YY]MMDDhhmm[.ss]

  • -c 如果文件已经存在,就不创建

  [root@localhost ~]# touch -t 201912191111 ./anaconda-ks.cfg 
  [root@localhost ~]# stat ./anaconda-ks.cfg                  
    File: ‘./anaconda-ks.cfg’
    Size: 1584            Blocks: 8          IO Block: 4096   regular file
  Device: 802h/2050d      Inode: 201326670   Links: 2
  Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
  Context: system_u:object_r:admin_home_t:s0
  Access: 2019-12-19 11:11:00.000000000 +0800
  Modify: 2019-12-19 11:11:00.000000000 +0800
  Change: 2020-12-29 15:29:58.258023568 +0800
  Birth: -

三、总结软链接和硬链接区别,并用实例操作说明

区别点 符号(symbolic)链接或软(soft)链接 硬(hard)链接
存储空间 不同的文件,类似快捷方式,文件很小 对应同一个物理文件
inode号 不同 相同
跨分区 支持 不支持
链接数 不会根据文件数量改变 随文件数量改变
文件夹 支持用文件夹做链接 只支持文件做链接
元数据 链接文件,和源文件无关 元数据完全相同
删除源文件 无法访问文件 可以访问文件
相对路径 原文件的相对路径是相对软链接的路径 相对于当前目录的路径

实例:

#创建a文件的硬链接b,和软链接文件a.link,查看inodes、权限、大小,如下:
[root@localhost data]# ln a b
[root@localhost data]# ln -s a a.link
[root@localhost data]# ll
total 8
-rw-r--r--. 2 root root 1819 Dec 29 15:57 a
lrwxrwxrwx. 1 root root    1 Dec 29 19:01 a.link -> a
-rw-r--r--. 2 root root 1819 Dec 29 15:57 b
[root@localhost data]# stat a
  File: ‘a’
  Size: 1819            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 67          Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2020-12-29 15:57:09.392038991 +0800
Modify: 2020-12-29 15:57:09.392038991 +0800
Change: 2020-12-29 19:01:13.588143413 +0800
 Birth: -
[root@localhost data]# stat b
  File: ‘b’
  Size: 1819            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 67          Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2020-12-29 15:57:09.392038991 +0800
Modify: 2020-12-29 15:57:09.392038991 +0800
Change: 2020-12-29 19:01:13.588143413 +0800
 Birth: -
[root@localhost data]# stat a.link 
  File: ‘a.link’ -> ‘a’
  Size: 1               Blocks: 0          IO Block: 4096   symbolic link
Device: 803h/2051d      Inode: 68          Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2020-12-29 19:01:32.421143591 +0800
Modify: 2020-12-29 19:01:27.809143548 +0800
Change: 2020-12-29 19:01:27.809143548 +0800
 Birth: -

#跨分区创建硬链接,系统报错
[root@localhost data]# ln /etc/passwd /data/pass
ln: failed to create hard link ‘/data/pass’ => ‘/etc/passwd’: Invalid cross-device link
#垮分区创建软链接
[root@localhost data]# ln -s /etc/passwd /data/passwd.link
[root@localhost data]# ll
lrwxrwxrwx. 1 root root   11 Dec 29 19:05 passwd.link -> /etc/passwd

#创建硬链接时,连接数会改变
[root@localhost data]# ln a c
[root@localhost data]# ln a d
[root@localhost data]# ln a e
[root@localhost data]# ll
total 20
-rw-r--r--. 5 root root 1819 Dec 29 15:57 a
-rw-r--r--. 5 root root 1819 Dec 29 15:57 b
-rw-r--r--. 5 root root 1819 Dec 29 15:57 c
-rw-r--r--. 5 root root 1819 Dec 29 15:57 d
-rw-r--r--. 5 root root 1819 Dec 29 15:57 e
#删除源文件时,软连接无法访问,硬链接可以访问
[root@localhost data]# rm -rf a
[root@localhost data]# cat a.link 
cat: a.link: No such file or directory
[root@localhost data]# cat b
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

#相对路径,软链接原文件的相对路径是相对软链接的路径,硬链接是相对于当前目录的路径
[root@localhost data]# ln -s f1.txt dir/f1.txt.link //是相对于软链接的路径,而不是当前目录的
[root@localhost data]# ll dir/f1.txt.link 
lrwxrwxrwx. 1 root root 6 Dec 29 19:32 dir/f1.txt.link -> f1.txt // 连接不存在
[root@localhost data]# ln -s ../f1.txt dir/f2.txt.link //正确的写法,相对于dir/f2.txt.link,f1.txt在他的上级目录
[root@localhost data]# ll !*
ll -s ../f1.txt dir/f2.txt.link
ls: cannot access ../f1.txt: No such file or directory
0 lrwxrwxrwx. 1 root root 9 Dec 29 19:40 dir/f2.txt.link -> ../f1.txt //链接正常

[root@localhost ~]# ln /data/f1.txt ../data/dir/f11.txt //硬链接是相对于当前目录的路径
[root@localhost ~]# ll !*
ll /data/f1.txt ../data/dir/f11.txt
-rw-r--r--. 2 root root 5 Dec 29 19:25 ../data/dir/f11.txt
-rw-r--r--. 2 root root 5 Dec 29 19:25 /data/f1.txt

四、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示

文件目录管理类命令:cd 、ls 、mkdir、rmdir、tree、mv 、cp 、rm、cat、tail、head

cd:改变目录(change directory)

cd: usage: cd [-L|[-P [-e]]] [dir]

命令选项:

-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录

-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。

- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。

相关的环境变量:

  • PWD:当前目录路径
  • OLDPWD:上一次目录路径
使用绝对或相对路径:
[root@localhost ~]# cd /data/
[root@localhost data]# 
[root@localhost data]# cd dir
[root@localhost dir]# pwd  //print work directory
/data/dir
切换至父目录: cd ..
切换至当前用户主目录: cd
切换至以前的工作目录: cd -

ls : 列出当前目录的内容或指定目录

用法:ls [options] [files_or_dirs]

命令选项:

  • ls -a 包含隐藏文件
  • ls -l 显示额外的信息
  • ls -R 目录递归
  • ls -ld 目录和符号链接信息
  • ls -1 文件分行显示
  • ls –S 按从大到小排序
  • ls –t 按mtime排序
  • ls –u 配合-t选项,显示并按atime从新到旧排序
  • ls –U 按目录存放顺序显示
  • ls –X 按文件后缀排序
  • ls -i 显示inode
  • l --time=atime 查看读取文件时间

范例:

[root@localhost data]# ls -al
total 4
drwxr-xr-x.  3 root root  31 Dec 29 20:43 .
dr-xr-xr-x. 18 root root 236 Dec 19 10:33 ..
drwxr-xr-x.  3 root root  88 Dec 29 20:49 dir
-rw-r--r--.  1 root root 847 Dec 29 20:43 f1.txt
[root@localhost ~]# ls -d .* --color=auto //等同于l.,只列出隐藏文件
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .cshrc  .lesshst  .tcshrc
[root@localhost ~]# ls -l --color=auto // 等同于ll命令
total 8
-rw-r--r--. 1 root root    0 Dec 29 21:38 1
-rw-r--r--. 1 root root    0 Dec 29 21:38 2
-rw-------. 2 root root 1584 Dec 19  2019 anaconda-ks.cfg

mkdir :创建指定的名称的目录

用法:mkdir [OPTION]... DIRECTORY...

rmdir:用来删除空目录。

Usage: rmdir [OPTION]... DIRECTORY...

注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。

tee:以树状图列出目录的内容。

Usage: tee [OPTION]... [FILE]...
[root@localhost data]# tree 
.
├── dir
│   ├── f2.txt.link -> ../f1.txt
│   ├── f3.txt.link -> ./f1.txt
│   └── f4.txt.link -> ../f1.txt
└── f1.txt

1 directory, 4 files

mv:(move)文件或目录的移动或改名

Usage: mv [OPTION]... [-T] SOURCE DEST
  or:  mv [OPTION]... SOURCE... DIRECTORY
  or:  mv [OPTION]... -t DIRECTORY SOURCE...

常用选项:

  • -i 交互式
  • -f 强制
  • -b 目标存在,覆盖前先备份

范例:

#移动文件
[root@localhost data]# ll
total 4
drwxr-xr-x. 2 root root 63 Dec 29 19:44 dir
-rw-r--r--. 1 root root  5 Dec 29 19:25 f1.txt
[root@localhost data]# mv f1.txt dir/
    
#修改文件名
[root@localhost data]# mv file.txt f1.txt

cp:(copy)复制文件到指定路径

Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

常用选项:

  • -i:交互式

  • -r:递归复制目录及目录内的所有内容

  • -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 显示详细信息

  • -t:原和目标可以放反

  • -f:–force 强制

  • -u :只复制比目标文件更加新的文件,或者不存在的文件

  • -b : 覆盖前先复制(只保留最新的一个备份,如果用过--backup=numbered,默认-b就是--backup=numbered)

范例:

===========-i 选项实例========

[root@localhost ~]# alias cp 
alias cp='cp -i'
[root@localhost ~]# \cp  anaconda-ks.cfg /data/ //默认为交互式,可以使用反斜杠\+命令使用原始命令

=========-p 选项实例==========
[root@localhost ~]# su - hunter  //切换到hunter用户根目录
Last login: Tue Dec 29 22:16:42 CST 2020 on pts/0
[hunter@localhost ~]$ cp /etc/profile ./
[hunter@localhost ~]$ ll 
total 7
-rw-r--r--. 1 hunter hunter 1819 Dec 29 22:19 profile //属组属主为hunter
[hunter@localhost ~]$ exit //退出hunter用户
[root@localhost ~]# cp /home/hunter/profile /data/profile_bak
[root@localhost ~]# cp -p /home/hunter/profile /data/profile_bak2 //使用-p选项保留文件元数据,如果换成-a 相当于 -p -R -d
[root@localhost ~]# ll /data/profile*
-rw-r--r--. 1 root   root   1819 Dec 29 22:25 /data/profile
-rw-r--r--. 1 root   root   1819 Dec 29 22:25 /data/profile_bak
-rw-r--r--. 1 hunter hunter 1819 Dec 29 22:19 /data/profile_bak2 

=========-d 选项实例,可以复制链接==========
[root@localhost ~]# cp /bin /data/
cp: omitting directory ‘/bin’
[root@localhost ~]# cp -d /bin /data/ 
[root@localhost ~]# ll /data/
total 12
lrwxrwxrwx. 1 root   root      7 Dec 29 22:28 bin -> usr/bin

=========-b 选项实例,覆盖前备份==========
# 使用过一次--backup=numbered 后,再使用-b 命令,也会按照数字后缀形式保存备份文件。
[root@localhost data]# cp -b /etc/profile /data/
[root@localhost data]# ll
total 8
-rw-r--r--. 1 root root 1819 Dec 29 22:39 profile
-rw-r--r--. 1 root root 1819 Dec 29 22:38 profile~
[root@localhost data]# cp --backup=numbered /etc/profile /data/ 
cp: overwrite ‘/data/profile’? yes
[root@localhost data]# cp --backup=numbered /etc/profile /data/
cp: overwrite ‘/data/profile’? yes
[root@localhost data]# ll
total 16
-rw-r--r--. 1 root root 1819 Dec 29 22:41 profile
-rw-r--r--. 1 root root 1819 Dec 29 22:40 profile~
-rw-r--r--. 1 root root 1819 Dec 29 22:40 profile.~1~
-rw-r--r--. 1 root root 1819 Dec 29 22:41 profile.~2~
[root@localhost data]# cp -b /etc/profile /data/
cp: overwrite ‘/data/profile’? yes
[root@localhost data]# ll
total 20
-rw-r--r--. 1 root root 1819 Dec 29 22:42 profile
-rw-r--r--. 1 root root 1819 Dec 29 22:40 profile~
-rw-r--r--. 1 root root 1819 Dec 29 22:40 profile.~1~
-rw-r--r--. 1 root root 1819 Dec 29 22:41 profile.~2~
-rw-r--r--. 1 root root 1819 Dec 29 22:41 profile.~3~

rm:删除文件

Usage: rm [OPTION]... FILE...

常用选项:

  • -i 交互式
  • -f 强制删除
  • -r 递归
  • --no-preserve-root 删除/
[root@localhost data]# rm -rf /*  //删根跑路专用,建议忘记这个命令
[root@localhost data]# rm -rf .*  //只能删除.开头的隐藏文件,也包含.和..,而不删除普通文件
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘..’
[root@localhost data]# rm -rf .[^.]* //正确的删除隐藏文件方法
[root@localhost data]# rm -rf * /删除普通文件,不包括隐藏文件,因为*号不能代替.

五、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

[root@localhost data]# cp -a /etc/profile /tmp/
#方案一,使用vim命令
[root@localhost data]# vim /tmp/profile
#全文搜索,将空白字符开头的行首都删除掉
:%s/^[[:blank:]]\+//g
#方案二,使用tr命令替换空格
[root@localhost tmp]# cat profile|tr -d [:blank:]
[root@localhost tmp]# cat profile|tr -d " "

六、在vim中设置tab缩进为4个字符

[root@CentOS7 ~]#vim /etc/vimrc 
在末尾添加文本内容
 set et                                                                                                                 
 set ts=4

你可能感兴趣的:(Linux系统文件目录结构功能、元数据信息、链接、文件管理命令)