linux文件管理和IO重定向

1、文件系统目录结构

linux文件系统目录结构

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"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值