- 1. 文件系统目录结构
- 1.1 文件系统的目录结构
- 1.2 常见的文件系统目录功能
- 1.3 应用程序的组成部分
- 1.4 CentOS 7 以后版本目录结构变化
- 1.5 Linux下的文件类型
- 2 文件操作命令
- 2.1 显示当前工作目录
- 2.2 绝对路径和相对路径
- 2.3 更改目录
- 2.4 列出目录内容
- 2.5 查看文件状态 stat
- 2.6 确定文件内容
- 2.7 文件通配符模式 wildcard pattern
- 2.8 创建空文件和刷新时间
- 2.9 复制文件和目录
- 2.10 移动和重命名文件
- 2.11 删除文件
- 2.12 目录操作
- 2.12.1 显示目录树 tree
- 2.12.2 创建目录 mkdir
- 2.12.3 删除空目录rmdir
- 3 文件元数据和节点表结构
- 3.1 inode表结构
- 3.2 硬(hard)链接
- 3.3 符号symbolic(或软soft)链接
- 3.4 硬链接和软链接区别总结
- 3.5 生产案例
- 3.5.1 案例一:提示空间No space left on device,但df可以看到空间很多,为什么?
- 3.5.2 案例二:提示空间快满,使用rm删除了很大的无用文件后,df仍然看到空间不足,为什么?如何解决?
- 4. 重定向和管道
- 4.1 标准输入和输出
- 4.2 I/O重定向 redirect
- 4.2.1 标准输出和错误重新定向
- 4.2.2 标准输入重定向
- 4.2.2.1 tr命令
- 4.2.2.2 标准输入重定向
- 4.2.2.3 把多行重定向
- 4.3 管道
- 4.3.1 管道
- 4.3.2 tee命令
- 4.4 重定向中的 - 符号
- 4.5 练习
- 文件和目录被组织成一个单根倒置树结构
- 文件系统从根目录下开始,用“/”表示
- 根文件系统(rootfs):root filesystem
- 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL,Mail,mail,mAiL
- 以 . 开头的文件为隐藏文件
- 路径分隔的 /
- 文件名最长为255个字节
- 包括路径在内文件名称最长4095个字节
- 蓝色—>目录 绿色—>可执行文件 红色—>压缩文件 浅蓝色—>链接文件 灰色—>其他文件
- 除了斜杠和NUL,所有字符都有效。但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
- 每个文件都有两类相关数据:元数据:metadata,即属性,数据:data,即文件内容
Linux的文件系统分层结构:FHS Filesystem Hierarchy Standard
参考文档:https://www.pathname.com/fhs/
1.2 常见的文件系统目录功能1.3 应用程序的组成部分/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.4 CentOS 7 以后版本目录结构变化二进制程序:/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
- /bin 和 /usr/bin
- /sbin 和 /usr/sbin
- /lib 和 /usr/lib
- /lib64 和 /usr/lib64
范例:
[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 /sbin1.5 Linux下的文件类型
- - 普通文件
- d 目录文件directory
- b 块设备block
- c 字符设备character
- l 符号链接文件link
- p 管道文件pipe
- s 套接字文件socket
范例
[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 vmware2 文件操作命令 2.1 显示当前工作目录
每个shell和系统进程都有一个当前的工作目录CWD:current work directory
显示当前shell CWD的绝对路径
pwd命令:printing working directory
- -P 显示真实物理路径
- -L 显示链接路径(默认)
范例:
[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/bin2.2 绝对路径和相对路径
- 绝对路径
以正斜杠/ 即根目录开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候 - 相对路径名
不以斜线开始
一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置
可以作为一个简短的形式指定一个文件名
基名: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-ens1602.3 更改目录
命令cd:change directory 改变目录
选项:-P 切换至物理路径,而非软链接目录
可以使用绝对或相对路径
- 切换至父目录: cd…
- 切换至当前用户主目录: cd
- 切换至以前的工作目录: cd -
范例:
[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
相关的环境变量:
- PWD:当前目录路径
- OLDPWD:上一次目录路径
范例:
[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]#2.4 列出目录内容
ls 命令可以列出当前目录的内容或制定目录
用法:
ls [options] [files_or_dirs]
常见选项:
- -a 包含隐藏文件
- -l 显示额外的信息
- -R 目录递归
- -ld 目录和符号链接信息
- -1 文件分行显示
- -S 按从小到大排序
- -t 按mtime排序
- -u 配合-t选项,显示并按atime从新到旧排序
- -U 按目录存放顺序显示
- -X 按文件后缀排序
- -F 对不同类型文件显示时附加不同的符号:*/=>@|
- -C 文件多时,以多列的方式显示文件,默认是一列(标准输出)
说明:
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:
范例:别名ll
[root@centos8 ~]#alias ll alias ll='ls -l --color=auto' [root@ubuntu1804 ~]#alias ll alias ll='ls -alF'2.5 查看文件状态 stat
文件相关信息:metadata,data
每个文件有三个时间戳:
- access time 访问时间,atime,读取文件内容
- modify time 修改时间,mtime,改变文件内容(数据)
- change time 改变时间,ctime,元数据发生改变
[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: -2.6 确定文件内容
文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使用
格式:
file [options]...
常用选项:
- -b 列出文件辨识结果时,不显示文件名称
- -f filelist 列出文件filelist中文件名的文件类型
- -F 使用指定分隔符号替换输出文件名后默认的“:”分隔符
- -L 查看对应软链接对应的文件类型
- –help 显示命令在线帮助
范例: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 text2.7 文件通配符模式 wildcard pattern
文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件
通配符采有特定的符号,表示特定的含义,此特符号称为元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/ ...2.8 创建空文件和刷新时间
touch命令可以用来创建空文件或刷新文件的时间
格式:
touch [OPTION]... FILE...
选项说明:
- -a 仅改变atime和ctime
- -m 仅改变mtime和ctime
- -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
- -c 如果文件不存在,则不予创建
范例:
[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.log2.9 复制文件和目录
利用cp(copy)命令可以实现文件或目录的复制
格式:
cp [OPTION]...[-T] SOURCE DEST cp [OPTION]...SOURCE... DIRECTORY cp [OPTION]...-t DIRECTORY SOURCE...
常用选项
- -i 如果目标已存在,覆盖前提示是否覆盖
- -n 不覆盖,注意两者顺序
- -r,-R 递归复制目录及内部的所有内容
- -a 归档,相当于-dR --preserv=all,常用于备份功能
- -d --no-dereference --preserv=links 不复制原文件,只复制链接名
- –preserv[=ATTR_LIST]
mode:权限
ownership:属主属组
timestamp:
links
xatter
context
all - -p 等同于–preserv=mode,ownership,timestamp
- -v --verbose
- -f --force
- -u --update只复制源比目标更新文件或目标不存在的文件
- -b 目标存在,覆盖先前备份,默认形式为filename~,只保留最近的一个备份
- –backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为filename.****#,可以保留多个版本
| 源目录 | 不存在 | 存在且为文件 | 存在且为目录 |
|---|---|---|---|
| 一个文件 | 新建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/rootdir2.10 移动和重命名文件
mv 命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化
格式:
mv [OPTION]...[-T] SOURCE DEST mv [OPTION]...SOURCE... DIRECTORY mv [OPTION]...-t DIRECTORY SOURCE...
常用选项:
- -i 交互式
- -f 强制
- -b 目标存在,覆盖先前备份
利用rename可以批量修改文件名
格式:
rename [options]...
范例:
#为所有的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
2.11 删除文件
使用rm命令可以删除文件
注意:此命令非常危险,谨慎使用,建议使用mv代替rm
格式:
rm [option]...file...
常用选项:
- -i 交互式
- -f 强制删除
- -r 递归
- –no-preserve-root 删除/
范例:
[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 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/bin9、将指定文件中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 j10、将文件/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



