一、描述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