Linux的文件系统分层结构:FHS Filesystem Hierarchy Standard
参考文档:https://www.pathname.com/fhs/
/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相关的安全策略等信息的存储位置
二进制程序:/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
范例:
[root@CentOS-8 ~]#ls /bin /sbin /lib /lib64 -ld
lrwxrwxrwx. 1 root root 7 Nov 3 23:22 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Nov 3 23:22 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Nov 3 23:22 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Nov 3 23:22 /sbin -> usr/sbin
[root@CentOS-6 ~]#ls /bin /sbin /lib /lib64 -ld
dr-xr-xr-x. 2 root root 4096 Nov 3 23:22 /bin
dr-xr-xr-x.11 root root 4096 Nov 3 23:22 /lib
dr-xr-xr-x. 9 root root 12288 Nov 3 23:22 /lib64
dr-xr-xr-x. 2 root root 12288 Nov 3 23:22 /sbin
du@ubuntu1804:~$ ls /bin /sbin /lib /lib64 -ld
drwxr-xr-x 2 root root 4096 Apr 21 19:35 /bin
drwxr-xr-x 22 root root 4096 Apr 21 19:35 /lib
drwxr-xr-x 2 root root 4096 Apr 21 19:32 /lib64
drwxr-xr-x 2 root root 12288 Apr 21 19:38 /sbin
范例
[root@CentOS-8 ~]#ls -l /run/
total 44
-rw-------. 1 root root 11 Apr 27 10:20 alsactl.pid
-rw-r--r--. 1 root root 5 Apr 27 10:20 atd.pid
-rw-r--r--. 1 root root 4 Apr 27 10:20 auditd.pid
drwxr-xr-x. 2 avahi avahi 80 Apr 27 10:20 avahi-daemon
drwxr-x---. 2 chrony chrony 80 Apr 27 10:20 chrony
drwxr-xr-x. 2 root root 60 Apr 27 10:20 cockpit
drwxr-xr-x. 2 root root 40 Apr 27 10:20 console
drwxr-xr-x. 2 root root 40 Apr 27 10:20 criu
----------. 1 root root 0 Apr 27 10:20 cron.reboot
drwx------. 2 root root 40 Apr 27 10:20 cryptsetup
drwxr-xr-x. 3 root lp 80 Apr 27 10:20 cups
drwxr-xr-x. 2 root root 60 Apr 27 10:20 dbus
prw-------. 1 root root 0 Apr 27 10:20 dmeventd-client
prw-------. 1 root root 0 Apr 27 10:20 dmeventd-server
drwxr-xr-x. 2 root root 40 Apr 27 10:20 faillock
drwxr-x---. 2 root root 40 Apr 27 10:20 firewalld
drwxr-xr-x. 2 root root 60 Apr 27 10:19 fsck
drwx--x--x. 3 root gdm 80 Apr 27 10:20 gdm
-rw-------. 1 root root 5 Apr 27 10:20 gssproxy.pid
srw-rw-rw-. 1 root root 0 Apr 27 10:20 gssproxy.sock
prw-------. 1 root root 0 Apr 27 10:20 initctl
drwxr-xr-x. 4 root root 100 Apr 27 10:19 initramfs
-rw-r--r--. 1 root root 4 Apr 27 10:20 ksmtune.pid
drwxr-xr-x. 11 root root 320 Apr 27 10:20 libvirt
drwxr-xr-x. 7 root root 200 Apr 27 10:20 lock
drwxr-xr-x. 3 root root 60 Apr 27 10:19 log
drwxrwxr-x. 3 root libstoragemgmt 60 Apr 27 10:20 lsm
drwx------. 2 root root 80 Apr 27 10:20 lvm
srwxr-xr-x. 1 root root 0 Apr 27 10:20 mcelog-client
-rw-r--r--. 1 root root 3 Apr 27 10:20 mcelog.pid
drwx--x---. 2 root root 40 Apr 27 10:20 mdadm
drwxr-xr-x. 2 root root 40 Apr 27 10:20 media
drwxr-xr-x. 2 root root 40 Apr 27 10:19 mount
drwxr-xr-x. 5 root root 140 Apr 27 10:20 NetworkManager
drwxr-xr-x. 2 root root 40 Apr 27 10:20 plymouth
drwx------. 2 root root 40 Apr 27 10:20 podman
drwxr-xr-x. 2 radvd radvd 40 Apr 27 10:20 radvd
drwxr-xr-x. 2 root root 80 Apr 27 10:20 rhsm
drwx------. 2 rpc rpc 60 Apr 27 10:20 rpcbind
srw-rw-rw-. 1 root root 0 Apr 27 10:20 rpcbind.sock
-rw-------. 1 root root 4 Apr 27 10:20 rsyslogd.pid
drwxr-xr-x. 2 root root 40 Apr 27 10:20 samba
drwxr-xr-x. 2 root root 40 Apr 27 10:20 sepermit
drwxr-xr-x. 2 root root 40 Apr 27 10:20 setrans
drwx--x--x. 2 setroubleshoot setroubleshoot 40 Apr 27 10:20 setroubleshoot
-rw-------. 1 root root 5 Apr 27 10:20 sm-notify.pid
drwxr-xr-x. 2 root root 40 Apr 27 10:20 spice-vdagentd
-rw-r--r--. 1 root root 5 Apr 27 10:20 sshd.pid
-rw-------. 1 root root 4 Apr 27 10:20 sssd.pid
drwx--x--x. 3 root root 60 Apr 27 10:20 sudo
drwxr-xr-x. 16 root root 400 Apr 27 10:20 systemd
drwxr-xr-x. 2 root root 60 Apr 27 10:19 tmpfiles.d
drwxr-xr-x. 2 root root 60 Apr 27 10:20 tuned
drwxr-xr-x. 7 root root 160 Apr 27 10:25 udev
drwx------. 2 root root 40 Apr 27 10:20 udisks2
drwxr-xr-x. 4 root root 80 Apr 27 10:23 user
-rw-rw-r--. 1 root utmp 1152 Apr 27 10:23 utmp
drwxr-xr-x. 2 root root 60 Apr 27 10:20 vmware
每个shell和系统进程都有一个当前的工作目录CWD:current work directory
显示当前shell CWD的绝对路径
pwd命令:printing working directory
范例:
[root@CentOS-8 ~]#pwd
/root
[root@CentOS-8 ~]#mkdir /data
[root@CentOS-8 ~]#cd /data/
[root@CentOS-8 data]#pwd
/data
[root@CentOS-8 data]#cd /bin/
[root@CentOS-8 bin]#pwd
/bin
[root@CentOS-8 bin]#ll /
total 28
lrwxrwxrwx. 1 root root 7 Nov 3 23:22 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Apr 21 10:53 boot
drwxr-xr-x. 2 root root 6 Apr 27 10:47 data
drwxr-xr-x. 19 root root 3220 Apr 27 10:20 dev
drwxr-xr-x. 142 root root 8192 Apr 27 10:20 etc
drwxr-xr-x. 3 root root 16 Apr 21 11:03 home
lrwxrwxrwx. 1 root root 7 Nov 3 23:22 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Nov 3 23:22 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Nov 3 23:22 media
drwxr-xr-x. 3 root root 18 Apr 21 10:49 mnt
drwxr-xr-x. 2 root root 6 Nov 3 23:22 opt
dr-xr-xr-x. 302 root root 0 Apr 27 10:19 proc
dr-xr-x---. 15 root root 4096 Apr 27 10:23 root
drwxr-xr-x. 42 root root 1220 Apr 27 10:22 run
lrwxrwxrwx. 1 root root 8 Nov 3 23:22 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Nov 3 23:22 srv
dr-xr-xr-x. 13 root root 0 Apr 27 10:20 sys
drwxrwxrwt. 27 root root 4096 Apr 27 10:47 tmp
drwxr-xr-x. 12 root root 144 Apr 21 10:46 usr
drwxr-xr-x. 21 root root 4096 Apr 21 10:56 var
[root@CentOS-8 bin]#pwd -P
/usr/bin
基名:basename,只取文件名而不要路径
目录名:dirname,只取路径,不要文件名
范例:
[root@CentOS-8 bin]#basename /etc/sysconfig/network
network
[root@CentOS-8 bin]#dirname /etc/sysconfig/network
/etc/sysconfig
[root@CentOS-8 bin]#dirname /etc/sysconfig/network-scripts/ifcfg-ens160
/etc/sysconfig/network-scripts
[root@CentOS-8 bin]#basename /etc/sysconfig/network-scripts/ifcfg-ens160
ifcfg-ens160
命令cd:change directory 改变目录
选项:-P 切换至物理路径,而非软链接目录
可以使用绝对或相对路径
范例:
[root@CentOS-8 ~]#cd /etc/sysconfig/
[root@CentOS-8 sysconfig]#pwd
/etc/sysconfig
[root@CentOS-8 sysconfig]#cd ../../data/
[root@CentOS-8 data]#pwd
/data
[root@CentOS-8 data]#cd /bin/
[root@CentOS-8 bin]#pwd
/bin
[root@CentOS-8 bin]#cd -P /bin
[root@CentOS-8 bin]#pwd
/usr/bin
相关的环境变量:
范例:
[root@CentOS-8 bin]#cd ../../data/
[root@CentOS-8 data]#cd /etc/sysconfig/
[root@CentOS-8 sysconfig]#echo $OLDPWD
/data
[root@CentOS-8 sysconfig]#cd -
/data
[root@CentOS-8 data]#
ls 命令可以列出当前目录的内容或制定目录
用法:
ls [options] [files_or_dirs]
常见选项:
说明:
ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS和@LS_COLORS变量定义
ls -l 看到文件的大小,不一定是实际文件真正占用空间的大小
范例:
[root@CentOS-8 data]#vim /etc/DIR_COLORS
.jpg 01;31 #修改此行
[root@CentOS-8 data]#exit
[root@CentOS-8 ~]#echo $LS_COLORS
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;31:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:
[root@centos8 ~]#alias ll
alias ll='ls -l --color=auto'
[root@ubuntu1804 ~]#alias ll
alias ll='ls -alF'
文件相关信息:metadata,data
每个文件有三个时间戳:
[11:20:01 root@CentOS-8 ~]#stat /etc/passwd
File: /etc/passwd
Size: 2702 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 18688345 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2021-04-26 19:23:56.934419007 +0800
Modify: 2021-04-25 15:32:22.683835580 +0800
Change: 2021-04-25 15:32:22.684835594 +0800
Birth: -
文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使用
格式:
file [options] <filename>...
常用选项:
范例:windows的文本格式和Linux的文本格式的区别
[root@CentOS-8 data]#cat windows.txt
a
b
c[root@CentOS-8 data]#cat linux.txt
a
b
c
[root@CentOS-8 data]#file linux.txt windows.txt
linux.txt: ASCII text
windows.txt: ASCII text, with CRLF line terminators
[root@CentOS-8 data]#hexdump -C linux.txt
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
[root@CentOS-8 data]#hexdump -C windows.txt
00000000 61 0d 0a 62 0d 0a 63 |a..b..c|
00000007
[root@CentOS-8 data]#dnf -y install dos2unix
#将windows的文本格式转换成Linux文本格式
[root@CentOS-8 data]#dos2unix windows.txt
dos2unix: converting file windows.txt to Unix format...
[root@CentOS-8 data]#file windows.txt
windows.txt: ASCII text
#将Linux的文本格式转换成windows的文本格式
[root@CentOS-8 data]#unix2dos windows.txt
unix2dos: converting file windows.txt to DOS format...
[root@CentOS-8 data]#file windows.txt
windows.txt: ASCII text, with CRLF line terminators
范例:转换文件字符集编码
#显示支持字符集编码列表
[root@CentOS-8 data]#iconv -l
#windows10上文本默认的编码ANSI(GB2312)
[root@CentOS-8 data]#file windows.txt
windows.txt: ASCII text, with CRLF line terminators
[root@CentOS-8 data]#echo $LANG
en_US.UTF-8
#默认在linux无法正常显示文本内容
[root@CentOS-8 ~]#cat windows2.txt
▒▒▒▒▒▒[root@CentOS-8 ~]#
#将windows10上文本默认的编码ANSI(GB2312)转换成UTF-8
[root@CentOS-8 data]#file windows2.txt
windows2.txt: ISO-8859 text, with no line terminators
[root@CentOS-8 data]#iconv -f gb2312 windows2.txt
马哥教育[root@CentOS-8 data]#iconv -f gb2312 windows2.txt -o windows3.txt
[root@CentOS-8 data]#cat windows3.txt
马哥教育[root@CentOS-8 datall windows3.txt
-rw-r--r--. 1 root root 12 Apr 27 16:59 windows3.txt
[root@CentOS-8 data]#file windows3.txt
windows3.txt: UTF-8 Unicode text, with no line terminators
#将UTF-8转换成windows10上文本默认的编码ANSI(GB2312)
[root@CentOS-8 data]#iconv -f utf8 -t gb2312 win.txt -o win1.txt
[root@CentOS-8 data]#file win1.txt
win1.txt: ISO-8859 text, with no line terminators
范例:
#将windows10上文本默认的编码ANSI(GB2312)转换成UTF-8
[root@CentOS-8 data]#iconv -f gb2312 win1.txt -o win3.txt
[root@CentOS-8 data]#file linux.txt
linux.txt: ASCII text
[root@CentOS-8 data]#file win3.txt
win3.txt: ASCII text, with CRLF line terminators
#将windows的文本格式转换成Linux的文本格式
[root@CentOS-8 data]#dos2unix windows2.txt
dos2unix: converting file windows2.txt to Unix format...
[root@CentOS-8 data]#file windows2.txt
windows2.txt: ASCII text
范例:
[root@CentOS-8 ~]#cat list.txt
/etc/
/bin
/etc/issue
[root@CentOS-8 ~]#file -f list.txt
/etc/: directory
/bin: symbolic link to usr/bin
/etc/issue: ASCII text
文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件
通配符采有特定的符号,表示特定的含义,此特符号称为元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:]:十六进制字符
范例:
[root@CentOS-8 du]#echo $OLDPWD
/data
[root@CentOS-8 du]#ll -/linux.txt
ls: invalid option -- '/'
Try 'ls --help' for more information.
[root@CentOS-8 du]#ll ~-/linux.txt
-rw-r--r--. 1 root root 6 Apr 27 14:06 /data/linux.txt
范例:[ ]和{ }
[root@centos8 data]#ll f{1..5}
ls: cannot access 'f1': No such file or directory
ls: cannot access 'f2': No such file or directory
-rw-r--r-- 1 root root 0 Nov 7 09:34 f3
-rw-r--r-- 1 root root 0 Nov 7 09:34 f4
-rw-r--r-- 1 root root 0 Nov 7 09:34 f5
[root@centos8 data]#ll f[1-5]
-rw-r--r-- 1 root root 0 Nov 7 09:34 f3
-rw-r--r-- 1 root root 0 Nov 7 09:34 f4
-rw-r--r-- 1 root root 0 Nov 7 09:34 f5
[root@centos8 data]#ll f[a-c]
-rw-r--r-- 1 root root 0 Nov 7 09:46 fa
-rw-r--r-- 1 root root 0 Nov 7 09:46 fA
-rw-r--r-- 1 root root 0 Nov 7 09:46 fb
-rw-r--r-- 1 root root 0 Nov 7 09:46 fB
-rw-r--r-- 1 root root 0 Nov 7 09:46 fc
[root@centos8 data]#ll f{a..c}
-rw-r--r-- 1 root root 0 Nov 7 09:46 fa
-rw-r--r-- 1 root root 0 Nov 7 09:46 fb
-rw-r--r-- 1 root root 0 Nov 7 09:46 fc
范例:
[root@CentOS-8 data]#touch file{a..z}.txt file{A..Z}.txt file{0..9}.txt
[root@CentOS-8 data]#ll file{0..9}.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file0.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file1.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file2.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file3.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file4.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file5.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file6.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file7.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file8.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file9.txt
[root@CentOS-8 data]#ll file[0-9].txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file0.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file1.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file2.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file3.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file4.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file5.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file6.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file7.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file8.txt
-rw-r--r--. 1 root root 0 Apr 28 16:11 file9.txt
[root@CentOS-8 data]#ls file[a-c].txt
filea.txt fileA.txt fileb.txt fileB.txt filec.txt
[root@CentOS-8 data]#ls file[C-E].txt
fileC.txt filed.txt fileD.txt filee.txt fileE.txt
[root@CentOS-8 data]#ls file[du].txt
filed.txt fileu.txt
[root@CentOS-8 data]#ls file[^du].txt
file0.txt file8.txt fileD.txt fileH.txt fileL.txt fileP.txt fileT.txt filey.txt
file1.txt file9.txt filee.txt filei.txt filem.txt fileq.txt fileU.txt fileY.txt
file2.txt filea.txt fileE.txt fileI.txt fileM.txt fileQ.txt filev.txt filez.txt
file3.txt fileA.txt filef.txt filej.txt filen.txt filer.txt fileV.txt fileZ.txt
file4.txt fileb.txt fileF.txt fileJ.txt fileN.txt fileR.txt filew.txt
file5.txt fileB.txt fileg.txt filek.txt fileo.txt files.txt fileW.txt
file6.txt filec.txt fileG.txt fileK.txt fileO.txt fileS.txt filex.txt
file7.txt fileC.txt fileh.txt filel.txt filep.txt filet.txt fileX.txt
范例:
[root@CentOS-8 data]#ls file[:lower:].txt
filee.txt filel.txt fileo.txt filer.txt filew.txt
[root@CentOS-8 data]#ls file[[:lower:]].txt
filea.txt filee.txt filei.txt filem.txt fileq.txt fileu.txt filey.txt
fileb.txt filef.txt filej.txt filen.txt filer.txt filev.txt filez.txt
filec.txt fileg.txt filek.txt fileo.txt files.txt filew.txt
filed.txt fileh.txt filel.txt filep.txt filet.txt filex.txt
范例:比较有无*的功能区别
[root@CentOS-8 data]#ls -d /etc/*/
/etc/alsa/ /etc/init.d/ /etc/ras/
/etc/alternatives/ /etc/initial-setup/ /etc/rc0.d/
/etc/anaconda/ /etc/iproute2/ /etc/rc1.d/
/etc/audit/ /etc/iscsi/ /etc/rc2.d/
/etc/authselect/ /etc/issue.d/ /etc/rc3.d/
/etc/avahi/ /etc/kdump/ /etc/rc4.d/
...
[root@CentOS-8 data]#l.
. ..
范例:
[root@CentOS-8 data]#touch file*.log
[root@CentOS-8 data]#touch file1.log
[root@CentOS-8 data]#ls file*.log
file1.log 'file*.log'
[root@CentOS-8 data]#ls 'file*.log'
'file*.log'
范例:
1、显示/etc目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录列表
[17:20:11 root@CentOS-8 etc]# touch /etc/lx93xx
[17:20:48 root@CentOS-8 etc]#ls /etc/l*[1-9]*[a-z]
/etc/lx93xx
[17:21:14 root@CentOS-8 etc]#ls -d /etc/l*[[:digit:]]*[[:lower:]]
/etc/lx93xx
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录列表
[10:29:30 root@CentOS-8 etc]#touch 1text
[10:30:19 root@CentOS-8 etc]#touch 1text1
[10:30:29 root@CentOS-8 etc]#ls -d /etc/[0-9]*[^0-9]
/etc/1text
3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录列表
[10:30:34 root@CentOS-8 etc]#ls -d /etc/[^a-Z][a-Z]*
/etc/1text /etc/1text1
4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其他为任意字符的文件或目录列表
[10:31:20 root@CentOS-8 etc]#ls -d /etc/rc[0-6]*
/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d
5、显示/etc目录下,所有的.conf结尾,且以m,n,r,p开头的文件或目录列表
[10:32:08 root@CentOS-8 etc]#ls -d /etc/[mnrp]*.conf
/etc/man_db.conf /etc/nfs.conf /etc/pbm2ppa.conf /etc/request-key.conf
/etc/mke2fs.conf /etc/nfsmount.conf /etc/pnm2ppa.conf /etc/resolv.conf
/etc/mtools.conf /etc/nsswitch.conf /etc/radvd.conf /etc/rsyslog.conf
6、只显示/root下的隐藏文件和目录列表
[10:33:07 root@CentOS-8 etc]#ls -a --ignore=[^.]* /root
. .bash_logout .cache .dbus .local .viminfo
.. .bash_profile .config .esd_auth .pki .Xauthority
.bash_history .bashrc .cshrc .ICEauthority .tcshrc
[10:34:17 root@CentOS-8 etc]#ls -a -I "[^.]*" /root
. .bash_logout .cache .dbus .local .viminfo
.. .bash_profile .config .esd_auth .pki .Xauthority
.bash_history .bashrc .cshrc .ICEauthority .tcshrc
[10:34:28 root@CentOS-8 etc]# ls -d .* /root
. .. .pwd.lock /root .updated
7、只显示/etc下的非隐藏目录列表
[10:34:40 root@CentOS-8 etc]#ls -d /etc/*/
/etc/alsa/ /etc/init.d/ /etc/ras/
/etc/alternatives/ /etc/initial-setup/ /etc/rc0.d/
/etc/anaconda/ /etc/iproute2/ /etc/rc1.d/
...
touch命令可以用来创建空文件或刷新文件的时间
格式:
touch [OPTION]... FILE...
选项说明:
范例:
[root@CentOS-8 data]#touch f1.txt
[root@CentOS-8 data]#ll
total 32
-rw-r--r--. 1 root root 0 Apr 29 10:40 f1.txt
[root@CentOS-8 data]#ll /etc/issue
-rw-r--r--. 1 root root 23 Nov 10 23:49 /etc/issue
[root@CentOS-8 data]#touch /etc/issue
[root@CentOS-8 data]#ll /etc/issue
-rw-r--r--. 1 root root 23 Apr 29 10:41 /etc/issue
[root@CentOS-8 data]#stat /etc/issue
File: /etc/issue
Size: 23 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 17242701 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2021-04-29 10:41:42.248214222 +0800
Modify: 2021-04-29 10:41:42.248214222 +0800
Change: 2021-04-29 10:41:42.248214222 +0800
Birth: -
[root@CentOS-8 data]#date
Thu Apr 29 10:42:36 CST 2021
[root@CentOS-8 data]#touch `date -d "-1 day" +%F_%T`.log
[root@CentOS-8 data]#ls
2021-04-28_10:43:49.log
[root@CentOS-8 data]#touch `date -d "-1 year" +%F_%T`.log
[root@CentOS-8 data]#ls
2020-04-29_10:44:17.log 2021-04-28_10:43:49.log
[root@CentOS-8 data]#touch `date -d "1 year" +%F_%T`.log
[root@CentOS-8 data]#ls
2020-04-29_10:44:17.log 2021-04-28_10:43:49.log 2022-04-29_10:45:44.log
利用cp(copy)命令可以实现文件或目录的复制
格式:
cp [OPTION]...[-T] SOURCE DEST
cp [OPTION]...SOURCE... DIRECTORY
cp [OPTION]...-t DIRECTORY SOURCE...
常用选项
源目录 | 不存在 | 存在且为文件 | 存在且为目录 |
---|---|---|---|
一个文件 | 新建DEST,并将SRC中内容填充至DEST中 | 将SRC中的内容覆盖至DEST中 注意数据丢失风险!建议用-i选项 | 在DEST下新建与源文件同名的文件,并将SRC中内容填充至新文件中 |
多个文件 | 提示错误 | 提示错误 | 在DEST下新建与原文件同名的文件,并将原文件内容复制进新文件中 |
目录须使用-r选项 | 创建指定DEST同名目录,复制SRC目录中所有文件至DEST下 | 提示错误 | 在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中 |
范例:
[root@CentOS-8 data]#cp -p .bashrc /data/.bashrc2
[root@CentOS-8 data]#ll .bashrc /data/.bashrc2
-rw-r--r--. 1 root root 376 Apr 29 11:18 .bashrc
-rw-r--r--. 1 root root 376 Apr 29 11:18 /data/.bashrc2
[root@CentOS-8 data]#cp -p ~du/.bashrc /data/.bashrc2
cp: overwrite '/data/.bashrc2'? y
[root@CentOS-8 data]#ll .bashrc /data/.bashrc2
-rw-r--r--. 1 root root 376 Apr 29 11:18 .bashrc
-rw-r--r--. 1 du du 376 Jul 21 2020 /data/.bashrc2
[root@CentOS-8 data]#ll ~du/.bashrc /data/.bashrc2
-rw-r--r--. 1 du du 376 Jul 21 2020 /data/.bashrc2
-rw-r--r--. 1 du du 376 Jul 21 2020 /home/du/.bashrc
[root@CentOS-8 data]#cp -r /etc/ etcbak
[root@CentOS-8 data]#ll
total 16
drwxr-xr-x. 142 root root 8192 Apr 29 11:22 etcbak
-rw-r--r--. 1 root root 23 Apr 29 11:16 issue.bak
[root@CentOS-8 data]#cp -b /etc/motd /data/issue
[root@CentOS-8 data]#ll
total 16
drwxr-xr-x. 142 root root 8192 Apr 29 11:22 etcbak
-rw-r--r--. 1 root root 0 Apr 29 14:58 issue
-rw-r--r--. 1 root root 23 Apr 29 11:16 issue.bak
[root@CentOS-8 data]#cp -b /etc/fstab /data/issue
cp: overwrite '/data/issue'? y
[root@CentOS-8 data]#ll
total 20
drwxr-xr-x. 142 root root 8192 Apr 29 11:22 etcbak
-rw-r--r--. 1 root root 709 Apr 29 14:59 issue
-rw-r--r--. 1 root root 0 Apr 29 14:58 issue~
-rw-r--r--. 1 root root 23 Apr 29 11:16 issue.bak
[root@CentOS-8 data]#cp --backup=numbered /etc/fstab /data/issue
cp: overwrite '/data/issue'? y
[root@CentOS-8 data]#cp --backup=numbered /etc/shadow /data/issue
cp: overwrite '/data/issue'? y
[root@CentOS-8 data]#cp --backup=numbered /etc/os-release /data/issue
cp: overwrite '/data/issue'? y
[root@CentOS-8 data]#ll
total 32
drwxr-xr-x. 142 root root 8192 Apr 29 11:22 etcbak
-rw-r--r--. 1 root root 333 Apr 29 15:00 issue
-rw-r--r--. 1 root root 0 Apr 29 14:58 issue~
-rw-r--r--. 1 root root 709 Apr 29 14:59 issue.~1~
-rw-r--r--. 1 root root 709 Apr 29 15:00 issue.~2~
----------. 1 root root 1380 Apr 29 15:00 issue.~3~
-rw-r--r--. 1 root root 23 Apr 29 11:16 issue.bak
范例:
[root@CentOS-8 data]#cp /dev/zero /data/zero.bak
练习:
1、每天将/etc/目录下所有文件,备份到/data独立子目录下,并要求子目录格式为backupYYYY-mm-dd,备份过程可见
[root@CentOS-8 data]#cp -av /etc/ /data/backup`date +%F`
[root@centos8 ~]#cp -av /etc/ /data/etc-`date +%F_%H-%M-%S`
2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
[root@CentOS-8 data]#cp -a /root /data/rootdir
mv 命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化
格式:
mv [OPTION]...[-T] SOURCE DEST
mv [OPTION]...SOURCE... DIRECTORY
mv [OPTION]...-t DIRECTORY SOURCE...
常用选项:
利用rename可以批量修改文件名
格式:
rename [options] <expression> <replacement> <file>...
范例:
#为所有的conf文件加上.bak后缀:
rename 'conf' 'conf.bak' f*
#去掉所有的bak后缀:
rename '.bak' '' *.bak
[root@CentOS-8 data]#touch file{1..10}.conf
[root@CentOS-8 data]#rename conf conf.bak *
[root@CentOS-8 data]#ls
file10.conf.bak file2.conf.bak file4.conf.bak file6.conf.bak file8.conf.bak
file1.conf.bak file3.conf.bak file5.conf.bak file7.conf.bak file9.conf.bak
[root@CentOS-8 data]#rename .bak '' *
[root@CentOS-8 data]#ls
file10.conf file2.conf file4.conf file6.conf file8.conf
file1.conf file3.conf file5.conf file7.conf file9.conf
使用rm命令可以删除文件
注意:此命令非常危险,谨慎使用,建议使用mv代替rm
格式:
rm [option]...file...
常用选项:
范例:
[root@CentOS-8 ~]#rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
#思考删除/ 文件,如何验证
[root@centos8 ~]#rm -rf /*
[root@centos8 ~]#/2TAB
[root@centos8 ~]#echo *
范例:
[root@CentOS-8 dir]#touch a b c .a .b .c
[root@CentOS-8 dir]#ll
total 0
-rw-r--r--. 1 root root 0 Apr 29 15:57 a
-rw-r--r--. 1 root root 0 Apr 29 15:57 b
-rw-r--r--. 1 root root 0 Apr 29 15:57 c
[root@CentOS-8 dir]#ll -a
total 0
drwxr-xr-x. 2 root root 63 Apr 29 15:57 .
drwxr-xr-x. 3 root root 229 Apr 29 15:57 ..
-rw-r--r--. 1 root root 0 Apr 29 15:57 .a
-rw-r--r--. 1 root root 0 Apr 29 15:57 a
-rw-r--r--. 1 root root 0 Apr 29 15:57 .b
-rw-r--r--. 1 root root 0 Apr 29 15:57 b
-rw-r--r--. 1 root root 0 Apr 29 15:57 .c
-rw-r--r--. 1 root root 0 Apr 29 15:57 c
[root@CentOS-8 dir]#rm -rf .[^.]*
[root@CentOS-8 dir]#ll -a
total 0
drwxr-xr-x. 2 root root 33 Apr 29 15:58 .
drwxr-xr-x. 3 root root 229 Apr 29 15:57 ..
-rw-r--r--. 1 root root 0 Apr 29 15:57 a
-rw-r--r--. 1 root root 0 Apr 29 15:57 b
-rw-r--r--. 1 root root 0 Apr 29 15:57 c
[root@CentOS-8 dir]#touch .a .b .c
[root@CentOS-8 dir]#ls
a b c
[root@CentOS-8 dir]#ll -a
total 0
drwxr-xr-x. 2 root root 63 Apr 29 15:58 .
drwxr-xr-x. 3 root root 229 Apr 29 15:57 ..
-rw-r--r--. 1 root root 0 Apr 29 15:58 .a
-rw-r--r--. 1 root root 0 Apr 29 15:57 a
-rw-r--r--. 1 root root 0 Apr 29 15:58 .b
-rw-r--r--. 1 root root 0 Apr 29 15:57 b
-rw-r--r--. 1 root root 0 Apr 29 15:58 .c
-rw-r--r--. 1 root root 0 Apr 29 15:57 c
[root@CentOS-8 dir]#ll /opt/
total 0
[root@CentOS-8 dir]#cp -av . /opt/
'./a' -> '/opt/./a'
'./b' -> '/opt/./b'
'./c' -> '/opt/./c'
'./.a' -> '/opt/./.a'
'./.b' -> '/opt/./.b'
'./.c' -> '/opt/./.c'
[root@CentOS-8 dir]#ls /opt/ -a
. .. .a a .b b .c c
[root@CentOS-8 dir]#rm -rf .
rm: refusing to remove '.' or '..' directory: skipping '.'
[root@CentOS-8 dir]#rm -rf * .[^.]*
[root@CentOS-8 dir]#ls -a
. ..
范例:删除特殊文件
#将名为“/data/-f”的文件删除
[16:10:21 root@CentOS-8 data]#touch ./-f
[16:10:33 root@CentOS-8 data]#ls
-f
[16:10:35 root@CentOS-8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Apr 29 16:10 -f
[16:10:37 root@CentOS-8 data]#rm -f -f #此方法错误
[16:11:06 root@CentOS-8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Apr 29 16:10 -f
[16:11:07 root@CentOS-8 data]#rm -- -f
rm: remove regular empty file '-f'? y
[16:11:20 root@CentOS-8 data]#ll
total 0
[16:11:22 root@CentOS-8 data]#touch ./-f
[16:11:29 root@CentOS-8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Apr 29 16:11 -f
[16:11:30 root@CentOS-8 data]#rm ./-f
rm: remove regular empty file './-f'? y
[16:11:38 root@CentOS-8 data]#ll
total 0
[16:11:40 root@CentOS-8 data]#touch ./-f
[16:11:45 root@CentOS-8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Apr 29 16:11 -f
[16:11:48 root@CentOS-8 data]#rm /data/
.bashrc .bashrc2 -f
[16:11:48 root@CentOS-8 data]#rm /data/
.bashrc .bashrc2 -f
[16:11:48 root@CentOS-8 data]#rm /data/-f
rm: remove regular empty file '/data/-f'? y
[16:11:59 root@CentOS-8 data]#ll
total 0
[16:12:01 root@CentOS-8 data]#touch '~'
[16:21:02 root@CentOS-8 data]#ls
'~'
[16:21:08 root@CentOS-8 data]#rm -f ~
rm: cannot remove '/root': Is a directory
[16:21:16 root@CentOS-8 data]#rm -- ~
rm: cannot remove '/root': Is a directory
[16:21:23 root@CentOS-8 data]#rm -f ./~
[16:21:33 root@CentOS-8 data]#ll
total 0
rm虽然删除了文件,但是被删除的文件仍可能被恢复,在安全要求较高的场景下,可以使用shred安全删除文件
shred格式
shred [option]... file...
常见选项:
-z 最后一次覆盖添加0,以隐藏覆盖操作
-v 能够显示操作进度
-u 覆盖后截断并删除文件
-n # 指定覆盖文件内容的次数(默认值是3次)
范例:
[root@CentOS-8 data]#touch passswd.txt
[root@CentOS-8 data]#vi passswd.txt
[root@CentOS-8 data]#shred -zvun 5 passswd.txt
shred: passswd.txt: pass 1/6 (random)...
shred: passswd.txt: pass 2/6 (ffffff)...
shred: passswd.txt: pass 3/6 (random)...
shred: passswd.txt: pass 4/6 (000000)...
shred: passswd.txt: pass 5/6 (random)...
shred: passswd.txt: pass 6/6 (000000)...
shred: passswd.txt: removing
shred: passswd.txt: renamed to 00000000000
shred: 00000000000: renamed to 0000000000
shred: 0000000000: renamed to 000000000
shred: 000000000: renamed to 00000000
shred: 00000000: renamed to 0000000
shred: 0000000: renamed to 000000
shred: 000000: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: passswd.txt: removed
[root@CentOS-8 data]#ls passwd.txt
ls: cannot access 'passwd.txt': No such file or directory
常见选项:
常见选项:
常见选项:
注意:rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r命令,递归删除目录树
范例:
alias rm='DIR=/data/backup`date +%F%T`;madir $DIR;mv -t $DIR'
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这此元数据是存放在node(index node)表中。inode表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息
第一个node表记录对应的保存了以下信息:
目录
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
rm和inode
rm命令:
mv和inode
范例:
[root@CentOS-8 ~]#df -i /boot
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 524288 302 523986 1% /boot
[root@CentOS-8 ~]#echo /boot/test/file{1..523987}|xargs touch
[root@CentOS-8 ~]# echo /boot/test/file{523988..700000}|xargs touch
touch: cannot touch '/boot/test/file524049': No space left on device
[root@CentOS-8 ~]# df -i /boot/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 524352 524352 0 100% /boot
范例:删除大文件
[root@CentOS-8 ~]# vi /var/log/huge.log
[root@CentOS-8 ~]# cat /dev/null > /var/log/huge.log
[root@CentOS-8 ~]# cat /var/log/huge.log
硬链接本质上就给一个文件起一个新的名称,实质上是同一文件
硬链接特性:
格式:
ln filename [linkname]
一个符号链接指向另一个文件,就像windows中快捷方式,软链接文件和原文件本质上不是同一个文件
软链接特性:
格式:
ln -s filename [linkname]
范例:
#绝对路径
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
本质:
硬链接:本质是同一个文件
软链接:本质不是同一个文件
跨设备:
硬链接:不支持
软链接:支持
inode:
硬链接:相同
软链接:不同
链接数
硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
软链接:创建或删除,链接数不会变化
文件夹:
硬链接:不支持
软链接:支持
相对路径:
硬链接:原始文件相对路径是相当于当前工作目录
软链接:原始文件的相对路径是相当于链接文件的相对路径
删除源文件:
硬链接:只是链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问
文件类型:
硬链接:和源文件相同
软链接:链接文件,和源文件无关
文件大小
硬链接: 和源文件相同
软链接: 源文件的路径的长度
如果程序正在被使用,删除文件后,空间不会释放,原因可能是rm的文件正在被使用,所以不能删除,有以下两种方法:
1、使用lsof查看是否正在被使用,如果进程不重要,可以kill杀死进程
2、如果进程重要不可断开,先把大文件清零cat /dev/null > /boot/big清空正在使用的文件,释放空间
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:file descriptor(文件描述符)
Linux给程序提供的三种I/O设备
范例:文件描述符
[root@CentOS-8 ~]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 May 10 10:07 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 May 10 10:07 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 May 10 10:07 /dev/stdout -> /proc/self/fd/1
[root@CentOS-8 ~]# ll /proc/self/fd/*
ls: cannot access '/proc/self/fd/255': No such file or directory
lrwx------. 1 root root 64 May 10 11:02 /proc/self/fd/0 -> /dev/pts/0
lrwx------. 1 root root 64 May 10 11:02 /proc/self/fd/1 -> /dev/pts/0
lrwx------. 1 root root 64 May 10 11:02 /proc/self/fd/2 -> /dev/pts/0
lr-x------. 1 root root 64 May 10 11:02 /proc/self/fd/3 -> /var/lib/sss/mc/passwd
lrwx------. 1 root root 64 May 10 11:02 /proc/self/fd/4 -> 'socket:[51426]'
lr-x------. 1 root root 64 May 10 11:02 /proc/self/fd/5 -> /var/lib/sss/mc/group
[root@centos8 ~]#ll /proc/`pidof tail`/fd
total 0
lrwx------. 1 root root 64 Dec 16 10:56 0 -> /dev/pts/1
lrwx------. 1 root root 64 Dec 16 10:56 1 -> /dev/pts/1
lrwx------. 1 root root 64 Dec 16 10:56 2 -> /dev/pts/1
lr-x------. 1 root root 64 Dec 16 10:56 3 -> /var/log/messages
lr-x------. 1 root root 64 Dec 16 10:56 4 -> anon_inode:inotify
I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标
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
合并多个程序
(CMD1;CMD2…)或者{CMD1;CMD2;…;}合并多个程序的STDOUT
范例:
[root@CentOS-8 ~]# ls 1> /dev/pts/1
[root@CentOS-8 ~]# ls /data >/dev/pts/1
范例:标准错误重定向
[root@CentOS-8 ~]# rm /data/file.log 2> /data/all.log
y
[root@CentOS-8 ~]# ll /data/
total 4
-rw-r--r--. 1 root root 48 May 10 14:53 all.log
[root@CentOS-8 ~]# cat /data/all.log
rm: remove regular empty file '/data/file.log'? [root@CentOS-8 ~]#
范例:合并多个命令的结果至一个文件中
[root@CentOS-8 ~]# (ls ; date) > /data/all.log
[root@CentOS-8 ~]# { ll;date;} > /data/all.log
[root@centos8 ~]#( cal 2019 ; cal 2020 ) > all.txt
[root@centos8 ~]#{ ls;hostname;} > /data/all.log
范例:清除大文件
cat /dev/null > /data/file.log
> /data/file.log
范例:分别重定向
[root@CentOS-8 ~]# ls /data/ /xxx > stdout.log 2> stderr.log
范例:将标准输出和错误都重定向到同一个文件中
[root@CentOS-8 ~]# ls /data/ /err > /data/all.log 2>&1
[root@CentOS-8 ~]# ls /data/ /err 2> /data/all.log 1>&2
[root@CentOS-8 ~]# ls /data/ /err &> /data/all.log
[root@CentOS-8 ~]# ls /data/ /err >& /data/all.log
[root@CentOS-8 ~]# ls /data/ /err 2>&1 > /data/all.log
ls: cannot access '/err': No such file or directory
范例:
[root@centos8 ~]#man bash > bash.txt
[root@centos8 ~]#wc -l bash.txt
3821 bash.txt
范例:
[root@centos8 ~]#curl http://www.wangxiaochun.com/testdir/hello.sh
#!/bin/bash
# ------------------------------------------
# Filename: hello.sh
# Version: 1.0
# Date: 2017/06/01
# Author: wang
# Email: [email protected]
# Website: www.wangxiaochun.com
# Description: This is the first script
# Copyright: 2017 wang
# License: GPL
# ------------------------------------------
#经典写法
echo "hello, world"
#流行写法
echo 'Hello, world!
[root@centos8 ~]#curl http://www.wangxiaochun.com/testdir/hello.sh > f1.log 2>
f2.log
[root@centos8 ~]#ll f*
-rw-r--r-- 1 root root 388 Jun 7 20:52 f1.log
-rw-r--r-- 1 root root 317 Jun 7 20:52 f2.log
[root@centos8 ~]#cat f1.log
#!/bin/bash
# ------------------------------------------
# Filename: hello.sh
# Version: 1.0
# Date: 2017/06/01
# Author: wang
# Email: [email protected]
# Website: www.wangxiaochun.com
# Description: This is the first script
# Copyright: 2017 wang
# License: GPL
# ------------------------------------------
#经典写法
echo "hello, world"
#流行写法
echo 'Hello, world!'
[root@centos8 ~]#cat f2.log
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 388 100 388 0 0 5623 0 --:--:-- --:--:-- --:--:-- 5623
范例:
[root@CentOS-8 ~]# passwd du &> /dev/null
范例: 实现标准输出和错误的互换
[root@centos8 ~]#ls f1.txt f2.txt
ls: cannot access 'f1.txt': No such file or directory
ls: cannot access 'f2.txt': No such file or directory
[root@centos8 ~]#( cat /etc/centos-release /etc/xxx 3>&1 1>&2 2>&3 ) > f1.txt
2> f2.txt
[root@centos8 ~]#cat f1.txt
cat: /etc/xxx: No such file or directory
[root@centos8 ~]#cat f2.txt
CentOS Linux release 8.2.2004 (Core)
从文件中导入STDIN,代替当前终端的输入设备,使用 < 来重定向标准输入
某些命令能够接受从文件中导入的STDIN
tr转换和删除字符
tr [OPTION]...SET1 [SET2]
选项:
-c, -C, --complement 取字符集的补集
-d, --delete 删除所有属于第一字符集的字符
-s, --squeeze-repeats 把连续重复的字符以单独一个字符表示,即去重
-t, --truncate-set1 将第一个字符集对应字符转化为第二字符集对应的字符
\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:] 字母
[:cntrl:] 控制(非打印)字符
[:digit:] 数字
[:graph:] 图形字符
[:lower:] 小写字母
[:print:] 可打印字符
[:punct:] 标点符号
[:space:] 空白符号
[:upper:] 大写字母
[:xdigit:] 十六进制字符
范例:
#该命令会把/etc/issue中的小写字符都转化成大写字符
tr 'a-z' 'A-Z' < /etc/issue
#删除fstab文件中的所有abc中任意字符
tr -d abc < /etc/fstab
范例:
[root@CentOS-8 data]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 968864 0 968864 0% /dev
tmpfs 998116 0 998116 0% /dev/shm
tmpfs 998116 9604 988512 1% /run
tmpfs 998116 0 998116 0% /sys/fs/cgroup
/dev/sda2 10475520 4865052 5610468 47% /
/dev/sda1 1038336 223724 814612 22% /boot
/dev/sda5 7327744 84232 7243512 2% /home
tmpfs 199620 1168 198452 1% /run/user/42
tmpfs 199620 0 199620 0% /run/user/0
[root@CentOS-8 data]# df > df.log
[root@CentOS-8 data]# tr -s ' ' < df.log
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 968864 0 968864 0% /dev
tmpfs 998116 0 998116 0% /dev/shm
tmpfs 998116 9596 988520 1% /run
tmpfs 998116 0 998116 0% /sys/fs/cgroup
/dev/sda2 10475520 4865052 5610468 47% /
/dev/sda1 1038336 223724 814612 22% /boot
/dev/sda5 7327744 84232 7243512 2% /home
tmpfs 199620 1168 198452 1% /run/user/42
tmpfs 199620 0 199620 0% /run/user/0
[root@CentOS-8 data]# tr -s ' ' : < df.log
Filesystem:1K-blocks:Used:Available:Use%:Mounted:on
devtmpfs:968864:0:968864:0%:/dev
tmpfs:998116:0:998116:0%:/dev/shm
tmpfs:998116:9596:988520:1%:/run
tmpfs:998116:0:998116:0%:/sys/fs/cgroup
/dev/sda2:10475520:4865052:5610468:47%:/
/dev/sda1:1038336:223724:814612:22%:/boot
/dev/sda5:7327744:84232:7243512:2%:/home
tmpfs:199620:1168:198452:1%:/run/user/42
tmpfs:199620:0:199620:0%:/run/user/0
范例:将Windows的文本转化Linux的文本格式
[root@CentOS-8 data]# cat windows0511.txt
a
b
c[root@CentOS-8 data]# file windows0511.txt
windows0511.txt: ASCII text, with CRLF line terminators
[root@CentOS-8 data]# hexdump -C windows0511.txt
00000000 61 0d 0a 62 0d 0a 63 |a..b..c|
00000007
[root@CentOS-8 data]# nano linux.txt
[root@CentOS-8 data]# hexdump -C linux.txt
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
[root@CentOS-8 data]# tr -d '\r' < windows0511.txt > windows05112.txt
[root@CentOS-8 data]# hexdump -C windows05112.txt
00000000 61 0a 62 0a 63 |a.b.c|
00000005
[root@CentOS-8 data]# file windows05112.txt
windows05112.txt: ASCII text
[root@CentOS-8 data]# tr '\r' '\r\n' < linux.txt > windows05113.txt
[root@CentOS-8 data]# cat windows05113.txt
a
b
c
[root@CentOS-8 data]# hexdump -C windows05113.txt
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
思考:将 Linux 的文本转化 Windows 的文本格式 ?
实现标准输入重定向的符号,利用“<”可以将标准输入重定向
COMMAND 0< FILE
COMMAND < FILE
比如:
cat > file
mage
wangxiaochun
按ctrl+d离开,可以使用文件来代替键盘的输入
cat < file1 > file2
cat < file1 >> file1
范例:
root@ubuntu1804:~# apt-get install postfix
[root@ubuntu1804 ~]#apt install mailutils
root@ubuntu1804:~# systemctl start postfix
root@ubuntu1804:~# ss -ntl
State Recv-Q Send-Q Local Address:Port
LISTEN 0 128 127.0.0.53%lo:53
LISTEN 0 128 0.0.0.0:22
LISTEN 0 100 0.0.0.0:25
LISTEN 0 128 127.0.0.1:6010
LISTEN 0 128 [::]:22
LISTEN 0 100 [::]:25
LISTEN 0 128 [::1]:6010
root@ubuntu1804:~#
root@ubuntu1804:~# echo 2^3 >bc.log
root@ubuntu1804:~# cat bc.log
2^3
root@ubuntu1804:~# bc < bc.log
8
root@ubuntu1804:~# cat < mail.txt
-bash: mail.txt: No such file or directory
root@ubuntu1804:~# vi mail.txt
root@ubuntu1804:~# cat < mail.txt
hello
how are you
root@ubuntu1804:~# cat < mail.txt > mail2.txt
root@ubuntu1804:~# cat mail2.txt
hello
how are you
root@ubuntu1804:~# mail -s test2 du
mail2.txt mail.txt
root@ubuntu1804:~# mail -s test2 du < mail.txt
Command 'mail' not found, but can be installed with:
apt install mailutils
root@ubuntu1804:~# apt install mailutils
root@ubuntu1804:~# man mail
root@ubuntu1804:~# mail -s test2 du < mail.txt
du@ubuntu1804:~$ mail
"/var/mail/du": 1 message 1 new
>N 1 root Tue May 11 16:24 14/481 test2
? 1
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: by ubuntu1804.magedu.org (Postfix, from userid 0)
id 0526FE0F9C; Tue, 11 May 2021 16:24:04 +0800 (HKT)
Subject: test2
To: <[email protected]>
X-Mailer: mail (GNU Mailutils 3.4)
Message-Id: <20210511082405[email protected]>
Date: Tue, 11 May 2021 16:24:04 +0800 (HKT)
From: root <[email protected]>
hello
how are you
?
使用“<<终止词”命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,有时被称为就地文本(here documents)
其中终止词可以是任何一个或多个符号,比如:!,@,$,EOF(End Of File),magedu等,其中EOF比较常用
范例:
root@ubuntu1804:~# cat > cat.log <
> hello
> how old are you
> i want to be a SRE
> byebye
> EOF
root@ubuntu1804:~# cat cat.log
hello
how old are you
i want to be a SRE
byebye
管道(使用符号“|”表示)用来连接多个命令
格式
命令1 | 命令2 | 命令3 | ...
功能说明:
注意:STDERR默认不能通过管道转发,可利用2>&1或 |&实现,格式如下
命令1 2>&1 | 命令2
命令1 |& 命令2
范例:
[root@CentOS-8 data]# df > df.log
[root@CentOS-8 data]# tr -s ' ' < df.log
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 968864 0 968864 0% /dev
tmpfs 998116 0 998116 0% /dev/shm
tmpfs 998116 9560 988556 1% /run
tmpfs 998116 0 998116 0% /sys/fs/cgroup
/dev/sda2 10475520 4873964 5601556 47% /
/dev/sda1 1038336 223724 814612 22% /boot
/dev/sda5 7327744 84232 7243512 2% /home
tmpfs 199620 1168 198452 1% /run/user/42
tmpfs 199620 0 199620 0% /run/user/0
[root@CentOS-8 data]# df | tr -s ' '
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 968864 0 968864 0% /dev
tmpfs 998116 0 998116 0% /dev/shm
tmpfs 998116 9560 988556 1% /run
tmpfs 998116 0 998116 0% /sys/fs/cgroup
/dev/sda2 10475520 4873968 5601552 47% /
/dev/sda1 1038336 223724 814612 22% /boot
/dev/sda5 7327744 84232 7243512 2% /home
tmpfs 199620 1168 198452 1% /run/user/42
tmpfs 199620 0 199620 0% /run/user/0
范例:
[root@CentOS-8 data]# ls /data /xxx |tr 'a-z' 'A-Z'
ls: cannot access '/xxx': No such file or directory
/DATA:
ALL.LOG
DF.LOG
LINUX.TXT
LINUX.TXTES
WINDOWS05112.TXT
WINDOWS05113.TXT
WINDOWS0511.TXT
[root@CentOS-8 data]# ls /data /xxx 2>&1 |tr 'a-z' 'A-Z'
LS: CANNOT ACCESS '/XXX': NO SUCH FILE OR DIRECTORY
/DATA:
ALL.LOG
DF.LOG
LINUX.TXT
LINUX.TXTES
WINDOWS05112.TXT
WINDOWS05113.TXT
WINDOWS0511.TXT
[root@CentOS-8 data]# ls /data /xxx |& tr 'a-z' 'A-Z'
LS: CANNOT ACCESS '/XXX': NO SUCH FILE OR DIRECTORY
/DATA:
ALL.LOG
DF.LOG
LINUX.TXT
LINUX.TXTES
WINDOWS05112.TXT
WINDOWS05113.TXT
WINDOWS0511.TXT
范例:
[root@CentOS-8 ~]# passwd --stdin du
Changing password for user du.
magedu
passwd: all authentication tokens updated successfully.
[root@CentOS-8 ~]# cat pass.txt
centos
[root@CentOS-8 ~]# passwd --stdin du < pass.txt
Changing password for user du.
passwd: all authentication tokens updated successfully.
[root@CentOS-8 ~]# cat pass.txt | passwd --stdin du
Changing password for user du.
passwd: all authentication tokens updated successfully.
[root@CentOS-8 ~]# echo magedu | passwd --stdin du
Changing password for user du.
passwd: all authentication tokens updated successfully.
[root@CentOS-8 ~]# echo magedu | passwd --stdin du &> /dev/null
范例:
#转换为大写字母
ls | tr 'a-z' 'A-Z'
#less实现分页地查看输入
ls -l /etc | less
#mail通过电子邮件发送输入
echo "test email" | mail -s "test" [email protected]
#算术运算
echo "2^3" |bc
利用tee命令可以重定向到多个目标,经常配合管道符一起使用
格式
命令1 | tee [-a ] 文件名 | 命令2
以上可以把命令1的STDOUT保存在文件中,作为命令2的输入
选项:
-a 追加
功能:
范例:
[root@CentOS-8 ~]# echo {1..100}|tr ' ' +|bc
5050
[root@CentOS-8 ~]# echo {1..100..2}|tr ' ' +|bc
2500
[root@CentOS-8 ~]# seq -s +1 100 |bc
15130
[root@CentOS-8 ~]# seq -s + 1 100 |bc
5050
[root@CentOS-8 ~]# seq -s+ 1 2 100 |bc
2500
范例:
[root@CentOS-8 ~]# cat << EOF |tee .mailrc
> set from=2421297991@qq.com
> set smtp=smtp.qq.com
> set smtp-auth-user=2421297991@qq.com
> set smtp-auth-password=dhcotyeiqivhecgd
> set smtp-auth=login
> set ssl-verify=ignore
> EOF
set from=2421297991@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2421297991@qq.com
set smtp-auth-password=dhcotyeiqivhecgd
set smtp-auth=login
set ssl-verify=ignore
[root@CentOS-8 ~]#
范例:
[root@CentOS-8 ~]# cat <
> welcome to magedu
> happy new year
> EOF
welcome to magedu
happy new year
重定向有时会使用 - 符号
范例:
[root@centos8 ~]#wget -O hello.sh http://www.wangxiaochun.com/testdir/hello.sh
--2020-05-21 15:07:28-- http://www.wangxiaochun.com/testdir/hello.sh
Resolving www.wangxiaochun.com (www.wangxiaochun.com)... 58.87.87.99
Connecting to www.wangxiaochun.com (www.wangxiaochun.com)|58.87.87.99|:80...
connected.
HTTP request sent, awaiting response... 200 OK
Length: 388 [application/octet-stream]
Saving to: ‘hello.sh’
hello.sh 100%[=========================================>]
388 --.-KB/s in 0s
2020-05-21 15:07:29 (29.1 MB/s) - ‘hello.sh’ saved [388/388]
[root@centos8 ~]#wget -O hello2.sh http://www.wangxiaochun.com/testdir/hello.sh
&>/dev/null
[root@centos8 ~]#wget -qO hello3.sh
http://www.wangxiaochun.com/testdir/hello.sh
[root@centos8 ~]#ll hello*
-rw-r--r-- 1 root root 388 Apr 1 09:10 hello2.sh
-rw-r--r-- 1 root root 388 Apr 1 09:10 hello3.sh
-rw-r--r-- 1 root root 388 Apr 1 09:10 hello.sh
[root@centos8 ~]#wget -O - http://www.wangxiaochun.com/testdir/hello.sh
--2020-04-23 11:06:52-- http://www.wangxiaochun.com/testdir/hello.sh
Resolving www.wangxiaochun.com (www.wangxiaochun.com)... 58.87.87.99
Connecting to www.wangxiaochun.com (www.wangxiaochun.com)|58.87.87.99|:80...
connected.
HTTP request sent, awaiting response... 200 OK
Length: 388 [application/octet-stream]
Saving to: ‘STDOUT’
- 0%[ ] 0 --.-KB/s
#!/bin/bash
# ------------------------------------------
# Filename: hello.sh
# Version: 1.0
# Date: 2017/06/01
# Author: wang
# Email: [email protected]
# Website: www.wangxiaochun.com
# Description: This is the first script
# Copyright: 2017 wang
# License: GPL
# ------------------------------------------
#经典写法
echo "hello, world"
#流行写法
echo 'Hello, world!'
- 100%[=========================================>]
388 --.-KB/s in 0s
2020-04-23 11:06:57 (16.4 MB/s) - written to stdout [388/388]
[root@centos8 ~]#wget -O - http://www.wangxiaochun.com/testdir/hello.sh
2>/dev/null
#!/bin/bash
# ------------------------------------------
# Filename: hello.sh
# Version: 1.0
# Date: 2017/06/01
# Author: wang
# Email: [email protected]
# Website: www.wangxiaochun.com
# Description: This is the first script
# Copyright: 2017 wang
# License: GPL
# ------------------------------------------
#经典写法
echo "hello, world"
#流行写法
echo 'Hello, world!'
[root@centos8 ~]#wget -qO - http://www.wangxiaochun.com/testdir/hello.sh
#!/bin/bash
# ------------------------------------------
# Filename: hello.sh
# Version: 1.0
# Date: 2017/06/01
# Author: wang
# Email: [email protected]
# Website: www.wangxiaochun.com
# Description: This is the first script
# Copyright: 2017 wang
# License: GPL
# ------------------------------------------
#经典写法
echo "hello, world"
#流行写法
echo 'Hello, world!'
示例:
将/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,将tar - cvf - /home 传送给后面的tar -xvf -,后面的这个 - 则是取前一个命令的stdout,因此,就不需要使用临时file了
tar -cvf - /home | tar -xvf -
1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
[root@lianxi01 ~]# cat /etc/issue |tr '[:lower:]' '[:upper:]' > /tmp/issue.out
[root@lianxi01 ~]# cat /tmp/issue.out
\S
KERNEL \R ON AN \M HOSTNAME:\N TTY:\L TIME:\T
2、将当前系统得登录用户的信息转换为大写后保存至/tmp/who.out文件中
[root@lianxi01 ~]# who |tr '[:lower:]' '[:upper:]' > /tmp/who.out
[root@lianxi01 ~]# cat /tmp/who.out
ROOT PTS/0 2021-11-04 22:47 (10.0.0.1)
3、一个linux用户给root发邮件,要求邮件标题为“help”,邮件正文如下:
Hello,I am 用户名,The system version is here,please help me to check it,thanks!
操作系统版本信息
dws@ubuntu1804:~$ mail -s "help" root <<EOF
> Hello, I am $USER, the system version is here,please help me to check it ,thanks!
> `cat /etc/os-release`
> EOF
[root@ubuntu1804 ~]#mail
"/var/mail/root": 2 messages 2 new
>N 1 Ubuntu1804 Thu Nov 4 15:43 14/483 help
N 2 Ubuntu1804 Thu Nov 4 15:44 25/868 help
? 2
Return-Path: <dws@ubuntu1804>
X-Original-To: root@ubuntu1804
Delivered-To: root@ubuntu1804
Received: by ubuntu1804 (Postfix, from userid 1000)
id 0957F188E5D2; Thu, 4 Nov 2021 15:44:54 +0000 (UTC)
Subject: help
To: <root@ubuntu1804>
X-Mailer: mail (GNU Mailutils 3.4)
Message-Id: <20211104154454.0957F188E5D2@ubuntu1804>
Date: Thu, 4 Nov 2021 15:44:54 +0000 (UTC)
From: Ubuntu1804 <dws@ubuntu1804>
Hello, I am dws, the system version is here,please help me to check it ,thanks!
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
4、将/root/下的文件列表,显示成一行,并文件名之间用空格隔开
[root@lianxi01 ~]# ls / | xargs
apps bakup bin boot data dev etc home lib lib64 media mnt opt proc root root.sh run sbin server srv sys tmp usr var
5、计算1+2+3+…+99+100的总和
[root@centos8 ~]#seq -s+ 100 |bc
5050
6、删除windows文本文件中的回车字符,即“\r”
[root@centos8 ~]#tr -d '\r' < Windows.txt
a
b
c
7、处理字符串“xt.,| 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格
[root@centos8 ~]#echo "xt.,l 1 jr#--helpmn 2 c*/fe 3 uz 4" | tr -dc "[:digit:] "
1 2 3 4[root@centos8 ~]#
8、将PATH变量每个目录显示在独立的一行
[root@centos8 ~]#echo $PATH | tr : '\n'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
9、将指定文件中0-9分别替代成a-j
[root@centos8 ~]#cat test.txt
0 1 2 3 4 5 6 7 8 9
[root@centos8 ~]#cat test.txt |tr '0-9' 'a-j'
a b c d e f g h i j
10、将文件/etc/centos-release中每个单词(由字母组成)显示在独立一行,并无空行
[root@centos8 ~]#cat /etc/centos-release
CentOS Linux release 8.4.2105
[root@centos8 ~]#cat /etc/centos-release |tr ' ' '\n'
CentOS
Linux
release
8.4.2105