1、文件系统目录结构
1.1、文件系统的目录结构
- 文件和目录被组织成一个单根倒置树结构
- 文件系统从根目录下开始,用“/“表示
- 根文件系统(rootfs):root filesystem
- 以.开头的文件为隐藏文件
- 路径分隔为/
- 文件名最长255个字节
- 包括路径在内的文件名称最长4095字节
- 蓝色–>目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其他文件
- 除了斜杠和NUL,所有字符都有效,但使用特殊字符的目录名称和文件不推荐使用,有些字符需要用引号来引用
- 每个文件都有两类相关数据:元数据 metadata,即属性,数据:data,即文件内容
Linux的文件系统分层结构:FHS===Filesystem Hierarchy Standard
参考文档:http://www.pathname.com/fhs/
1.2 常见的文件系统目录功能
/boot: 引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared, read-only data
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置
bin, sbin, lib, lib64, etc, share
/var: variable data files
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置
1.3 应用程序的组成部分
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man,
/usr/local/share/doc
1.4 CentOS 7 以后版本目录结构变化
- /bin 和 /usr/bin
- /sbin 和 /usr/sbin
- /lib 和 /usr/lib
- /lib64和 /usr/lib64
[root@centos8 ~]#ls /bin /sbin /lib /lib64 -ld
lrwxrwxrwx. 1 root root 7 May 11 2019 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 May 11 2019 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 11 2019 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 May 11 2019 /sbin -> usr/sbin
[root@centos6 ~]#ls /bin /sbin /lib /lib64 -ld
dr-xr-xr-x. 2 root root 4096 Mar 20 09:14 /bin
dr-xr-xr-x. 11 root root 4096 Dec 12 2018 /lib
dr-xr-xr-x. 9 root root 12288 Mar 20 09:13 /lib64
dr-xr-xr-x. 2 root root 12288 Mar 20 09:14 /sbin
[root@ubuntu1804 ~]#ll /bin /usr/bin -d
drwxr-xr-x 2 root root 4096 Jan 12 18:41 /bin/
drwxr-xr-x 2 root root 24576 Jan 12 18:42 /usr/bin/
1.5 Linux下的文件类型
- - 普通文件
- d 目录文件
- l 符号链接文件
- b 块设备
- c 字符设备
- p 管道文件
- s 套接字文件
[root@centos7 ~]#ls -l /run/
total 52
drwxr-xr-x 2 root root 100 Dec 9 20:41 abrt
-rw------- 1 root root 11 Dec 9 20:41 alsactl.pid
-rw-r--r-- 1 root root 5 Dec 9 20:41 atd.pid
-rw-r--r-- 1 root root 4 Dec 9 20:41 auditd.pid
prw------- 1 root root 0 Dec 9 20:41 autofs.fifo-misc
prw------- 1 root root 0 Dec 9 20:41 autofs.fifo-net
drwxr-xr-x 2 avahi avahi 80 Dec 9 20:41 avahi-daemon
drwxr-xr-x 2 root root 40 Dec 9 20:41 certmonger
drwxr-x--- 2 chrony chrony 80 Dec 9 20:41 chrony
drwxr-xr-x 2 root root 40 Dec 9 20:41 console
-rw-r--r-- 1 root root 5 Dec 9 20:41 crond.pid
---------- 1 root root 0 Dec 9 20:41 cron.reboot
drwx------ 2 root root 40 Dec 9 20:41 cryptsetup
drwxr-xr-x 3 root lp 80 Dec 9 20:41 cups
drwxr-xr-x 2 root root 60 Dec 9 20:41 dbus
-rw-r--r-- 1 root root 4 Dec 9 20:41 dhclient-eth0.pid
prw------- 1 root root 0 Dec 9 20:40 dmeventd-client
prw------- 1 root root 0 Dec 9 20:40 dmeventd-server
drwxr-xr-x 2 root root 40 Dec 9 20:41 faillock
-rw------- 1 root root 4 Dec 9 20:41 gssproxy.pid
srw-rw-rw- 1 root root 0 Dec 9 20:41 gssproxy.sock
drwxr-xr-x 4 root root 100 Dec 9 20:40 initramfs
-rw-r--r-- 1 root root 4 Dec 9 20:41 ksmtune.pid
drwxr-xr-x 8 root root 220 Dec 9 20:41 lock
drwxr-xr-x 3 root root 60 Dec 9 20:40 log
drwxrwxr-x 3 root libstoragemgmt 60 Dec 9 20:41 lsm
drwx------ 2 root root 80 Dec 9 20:40 lvm
-rw-r--r-- 1 root root 4 Dec 9 20:40 lvmetad.pid
drwx--x--- 2 root root 40 Dec 9 20:41 mdadm
drwxr-xr-x 2 root root 40 Dec 9 20:40 mount
drwxrwxr-x 2 root root 40 Dec 9 20:41 netreport
drwxr-xr-x 3 root root 120 Dec 9 20:41 NetworkManager
drwxr-xr-x 2 root root 40 Dec 9 20:41 plymouth
drwxr-xr-x 2 root root 40 Dec 9 20:41 ppp
drwxr-xr-x 2 radvd radvd 40 Dec 9 20:41 radvd
drwx------ 2 rpc rpc 40 Dec 9 20:41 rpcbind
-r--r--r-- 1 root root 0 Dec 9 20:41 rpcbind.lock
srw-rw-rw- 1 root root 0 Dec 9 20:41 rpcbind.sock
-rw-r--r-- 1 rpcuser rpcuser 5 Dec 9 20:41 rpc.statd.pid
2、文件操作命令
2.1 显示当前工作目录
每个shell 和系统进程都有一个当前的工作目录
显示当前shell 当前工作路径的绝对路径
pwd
- -P 显示真实物理路径
- -L 显示链接路径 (默认)
2.2 绝对路径和相对路径(面试常见问题)
- 绝对路径
以正斜杠/ 根目录开始
完整的文件位置路径
可用于任何向指定一个文件名的时候 - 相对路径名
不以斜线开始
一般情况下,是指对于当前工作目录的路径,特殊场景下,是相对于某目录的位置上可以作为一个简短的形式指定一个文件名
基名:basename,只取文件名而不要路径
目录名:dirname,只取路径,不要文件名
[root@centos8 bin]#basename /etc/sysconfig/network
network
[root@centos8 bin]#dirname /etc/sysconfig/network
/etc/sysconfig
[root@centos8 ~]#dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts
[root@centos8 ~]#basename /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0
2.3 更改目录
cd 改变目录
- -P 切换至物理路径,而非软连接目录
可以使用绝对或相对路径 - 切换至父目录: cd …
- 切换至当前用户主目录: cd
- 切换至以前的工作目录: cd -
[root@centos8 ~]#cd /etc/sysconfig
[root@centos8 sysconfig]#pwd
/etc/sysconfig
[root@centos8 sysconfig]#cd ../../data
[root@centos8 data]#pwd
/data
[root@centos8 data]#cd /bin
[root@centos8 bin]#pwd
/bin
[root@centos8 bin]#cd -P /bin
[root@centos8 bin]#pwd
/usr/bi
相关的环境变量:
PWD:当前目录路径
OLDPWD:上一次目录路径
[root@centos8 ~]#echo $OLDPWD
/etc/sysconfig
[root@centos8 ~]#cd -
/etc/sysconfig
[root@centos8 sysconfig]#pwd
/etc/sysconfig
[root@centos8 sysconfig]#
2.4 文件通配符模式
文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件
通配符采有特定的符号,表示特定的含义,此特符号称为元 meta 字符
常见的通配符如下:
* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
? 匹配任何单个字符,一个汉字也算一个字符
~ 当前用户家目录
~mage 用户mage家目录
. 和 ~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 一个字母
[A-Z] 一个字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
[^a-z] 匹配列表中的所有字符以外的字符
另外还有在Linux系统中预定义的字符类:man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
2.5 复制文件和目录
利用 cp(copy)命令可以实现文件或目录的复制
常用选项
-i 如果目标已存在,覆盖前提示是否覆盖
-n 不覆盖,注意两者顺序
-r, -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
-f --force
-u --update 只复制源比目标更新文件或目标不存在的文件
-b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份
--backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多
个版本
2.6 目录操作
2.6.1 显示目录树tree
常见选项:
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定wild-card pattern匹配到的路径
2.6.2 创建目录 mkir
常见选项:
-p: 存在于不报错,且可自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限
2.6.3 删除非空目录rmdir
常见选项:
-p 递归删除父空目录
-v 显示详细信息
注意:rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r 命令,递归删除目录树
alias rm='DIR=/data/backup`date +%F%T`;mkdir $DIR;mv -t $DIR'
3 文件元数据和节点表结构
3.1 inode表结构
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这些元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息
每一个inode表记录对应的保存了以下信息:
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
3.2 目录
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
- 文件引用一个是 inode号
- 人是通过文件名来引用一个文件
- 一个目录是目录下的文件名和文件inode号之间的映射
3.3 cp和inode
cp 命令:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
3.4 rm和inode
rm 命令:
- 链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
3.5 mv和inode
- 如果mv命令的目标和源在相同的文件系统,作为mv 命令用新的文件名创建对应新的目录项 删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动! - 如果目标和源在一个不同的文件系统, mv相当于cp和rm
删除大文件
[root@centos8 ~]#cat /dev/null > /var/log/huge.log
3.6 硬链接
硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
硬链接特性:
- 创建硬链接会在对应的目录中增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数递增
- 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
- 不能跨越驱动器或分区
- 不支持对目录创建硬链接
3.7 符号链接或软连接
一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件
软链接特点:
- 一个符号链接的内容是它引用文件的名称
- 可以对目录创建软链接
- 可以跨分区的文件实现
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
- 在创建软链接时, 如果源文件使用相对路径,是相对于软链接文件的路径,而非相对于当前工作目录,但是软链接的路径如果是相对路径,则是相对于当前工作目录
#绝对路径
ln -s /data/dir /data/dirlink
#相对路径
cd /data
ln -s ../data/dir /root/dirlink
rm -rf /data/dirlink #删除软链接本身,不会删除源目录内容
rm -rf /data/dirlink/ #删除源目录的文件,不会删除链接文件
#查看链接文件指向的原文件
readlink /data/dirlink
[root@centos8 ~]#readlink /proc/$$/exe
/usr/bin/bash
3.8 硬链接和软连接区别(面试题重点)
1. 本质:
硬链接:本质是同一个文件
软链接:本质不是同一个文件
2. 跨设备
硬链接:不支持
软链接:支持
3. inode
硬链接:相同
软链接:不同
4. 链接数
硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
软链接:创建或删除,链接数不会变化
5. 文件夹
硬链接:不支持
软链接:支持
6. 相对路径
硬链接:原始文件相对路径是相对于当前工作目录
软链接:原始文件的相对路径是相对于链接文件的相对路径
7. 删除源文件
硬链接:只是链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问
8. 文件类型
硬链接:和源文件相同
软链接:链接文件,和源文件无关
9. 文件大小
硬链接: 和源文件相同
软链接: 源文件的路径的长度
4、IO重定向和管道
4.1 标准输入和输出
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd: file descriptor (文件描述符)
Linux给程序提供三种 I/O 设备
- 标准输入(STDIN) -0 默认接受来自终端窗口的输入
- 标准输出(STDOUT)-1 默认输出到终端窗口
- 标准错误(STDERR) -2 默认输出到终端窗口
4.2 I/O重定向
I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标
4.2.1 标准输出和错误重定向
STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端
1> 或 > 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把标准输出和错误都重定向
>& 和上面功能一样,建议使用上面方式
以上如果文件已存在,文件内容会被覆盖
set -C 禁止将内容覆盖已有文件,但可追加, 利用 >| 仍可强制覆盖
set +C 允许覆盖,默认
追加
\>>可以在原有内容基础上,追加内容
把输出和错误重新定向追加到文件
>> 追加标准输出重定向至文件
2>> 追加标准错误重定向至文件
标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
&> 覆盖重定向
&>> 追加重定向
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>&1
将标准输出和错误都重定向到同一个文件
[root@centos8 ~]#ls /data /xxx > /data/all.log 2>&1
[root@centos8 ~]#ls /data /xxx 2> /data/all.log 1>&2
[root@centos8 ~]#ls /data /xxx &> /data/all.log
[root@centos8 ~]#ls /data /xxx >& /data/all.log
[root@centos8 ~]#ls /data /xxx 2>&1 > /data/all.log
4.2.2 标准输入重定向
从文件中导入STDIN,代替当前终端的输入设备,使用 < 来重定向标准输入某些命令能够接受从文件中导入的STDIN
4.2.3 tr命令
tr 转换和删除字符
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示,即去重
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
-c –C --complement:取字符集的补集
\NNN character with octal value NNN (1 to 3 octal digits)
\\ backslash
\a audible BEL
\b backspace
\f form feed
\n new line
\r return
\t horizontal tab
\v vertical tab
[:alnum:]:字母和数字
[:alpha:]:字母
[:digit:]:数字
[:lower:]:小写字母
[:upper:]:大写字母
[:space:]:空白字符
[:print:]:可打印字符
[:punct:]:标点符号
[:graph:]:图形字符
[:cntrl:]:控制(非打印)字符
[:xdigit:]:十六进制字符
#该命令会把/etc/issue中的小写字符都转换成大写字符
tr ‘a-z’ ‘A-Z’< /etc/issue
#删除fstab文件中的所有abc中任意字符
tr –d abc < /etc/fstab
4.2.2.4 把多行重定向
使用 “<<终止词” 命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,有时被称为就地文本(here documents)
其中终止词可以是任何一个或多个符号,比如:!,@,$,EOF(End Of File),magedu等,其中EOF比较常用
mail -s "Please Call" admin@magedu.com <<EOF
> Hi Wang
>
> Please give me a call when you get in. We may need
> to do some maintenance on server1.
>
> Details when you're on-site
> Zhang
> EOF
4.3、管道
4.3.1 管道
管道(使用符号“|”表示)用来连接多个命令
功能说明:
- 将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
- 所有命令会在当前shell进程的子shell进程中执行
- 组合多种工具的功能
注意:STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现,格式如下
命令1 2>&1 | 命令2
命令1 |& 命令2
[root@centos8 ~]#passwd --stdin wang
Changing password for user wang.
magedu
passwd: all authentication tokens updated successfully.
[root@centos8 ~]#cat pass.txt
centos
[root@centos8 ~]# passwd --stdin wang < pass.txt
Changing password for user wang.
passwd: all authentication tokens updated successfully.
[root@centos8 ~]#cat pass.txt | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.
[root@centos8 ~]#echo magedu | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.
[root@centos8 ~]#echo magedu | passwd --stdin wang &> /dev/null
#转换为大写字母
ls | tr ‘a-z’ ‘A-Z’
#less实现分页地查看输入
ls -l /etc | less
#mail通过电子邮件发送输入
echo "test email" | mail -s "test" wang@example.com
#算术运算
echo "2^3" |bc
4.3.2 tee 命令
利用 tee 命令可以重定向到多个目标,经常配合管道符一起使用
命令1 | tee [-a ] 文件名 | 命令2
以上可以把命令1的STDOUT保存在文件中,做为命令2的输入
-a 追加
功能:
- 保存不同阶段的输出
- 复杂管道的故障排除
- 同时查看和记录输出
计算1+...100的和
[root@centos8 ~]#echo {1..100}|tr ' ' +|bc
5050
[root@centos8 ~]#echo {1..100..2} | tr ' ' + | bc
2500
[root@centos8 ~]#seq -s + 1 100 |bc
5050
[root@centos8 ~]#seq -s+ 1 2 100 | bc
2500
发送邮件
[root@centos8 ~]#cat <<EOF | tee .mailrc
> set from=29308620@qq.com
> set smtp=smtp.qq.com
> set smtp-auth-user=29308620@qq.com
> set smtp-auth-password=esvnhbnqocirbicf
> set smtp-auth=login
> set ssl-verify=ignore
> EOF
set from=29308620@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=29308620@qq.com
set smtp-auth-password=esvnhbnqocirbicf
set smtp-auth=login
set ssl-verify=ignore
[root@centos8 ~]
[root@centos8 ~]#cat <<EOF | tee /etc/motd
> welcome to magedu
> happy new year
> EOF
welcome to magedu
happy new year
将 /home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,将 tar -cvf - /home 传送给后面的 tar -xvf - , 后面的这个 - 则是取前一个命令的 stdout, 因此,就不需要使用临时file了
tar -cvf - /home | tar -xvf -
5、文件管理练习题
1、显示/etc目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录列表
ls /etc/l*[[:digit:]]*[[:lower:]]
ls /etc/l*[0-9]*[a-z]
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录列表
ls /etc/[[:digit:]]*[^[:digit:]]
3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录列表
ls /etc/[^[:alpha:]]?*
4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录列表
ll /etc/rc*[0-6]*?
5、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录列表
ls /etc/[m,n,r,p]*.conf
6、只显示/root下的隐藏文件和目录列表
ls -d /root/.*
7、只显示/etc下的非隐藏目录列表
ls -d /etc/*/
8、每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYYmm-dd,备份过程可见
[root@centos8 ~]#cp -av /etc/ /data/backup`date +%F`
[root@centos8 ~]#cp -av /etc/ /data/etc-`date +%F_%H-%M-%S`
9、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
[root@centos8 ~]#cp -a /root /data/rootdir
10 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a,
/testdir/dir1/y/b
/x /x/a /x/b
/y /y/a /y/b
mkdir -p /testdir/dir1/{x,y}/{a,b}
11 如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b
/testdir/dir2/x x/a x/b
/testdir/dir2/y
mkdir -pv /testdir/dir2/{x/{a,b},y}
12 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
/testdir/dir3
/testdir/dir4
/testdir/dir5 dir6 dir7
mkdir -pv /testdir/{dir5/{dir6,dir7},dir3,dir4}
13、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
tr [:lower:] [:upper:] </etc/issue >/tmp/issue.out
tr 'a-z' 'A-Z' </etc/issue >/tmp/issue.out
14、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
who |tr 'a-z' 'A-Z' >/tmp/who.out
15、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,The system version is here,please help me to check it ,thanks! 操作系统版本
信息
echo -e "Hello, I am `whoami`,The system version is here,please help me to check it ,thanks! \n `uname -r`" |mail -s help root
16、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
ls /root |tr "\n" " "
17、计算1+2+3+…+99+100的总和
echo {1..100}|tr " " "+"|bc
seq 100 |paste -s -d+|bc
seq -s+ 100|bc
18、删除Windows文本文件中的回车字符 ,即“\r”
tr -d "\r" <win1.txt >win2.txt
19、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格
echo 'xt.,l 1 jr#rootmn 2 c*/fe 3 uz 4'|tr -d [:alpha:][:punct:]
20、将PATH变量每个目录显示在独立的一行
echo $PATH|tr ":" "\n"
21、将指定文件中0-9分别替代成a-j
ifconfig ens33|tr '0-9' 'a-j' >ipadd.log
22、将文件/etc/centos-release中每个单词(由字母组成)显示在独立一行,并无空行
cat /etc/centos-release |tr -c [:alpha:] ' ' | tr -s " " "\n"