开启辅助访问 切换到窄版

打印 上一主题 下一主题

高级Linux运维工程师养成记-Linux文件管理命令实战

[复制链接]
作者:JasonSWK 
版块:
嵌入式操作系统 linux 发布时间:2020-9-2 02:02:12
10330
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在访问文件目录时,想要知道当前的目录,可以使用pwd命令显示
# pwd/data# cd /etc/sysconfig/network-scripts/# pwd/etc/sysconfig/network-scriptspwd 默认显示的时链接路径,如果想要查看真实的物理路径,可以使用pwd -P选项。
# cd /bin# pwd/bin# pwd -P/usr/bintree命令会以树形结构显示目录下的文件
tree命令常用的选项

  • -d 只显示文件夹
  • -L level 显示指定的层级
  • -P pattern 只显示由指定的pattern匹配到的路径
# tree -d /boot/boot├── efi│ └── EFI│ └── centos├── grub2│ ├── fonts│ └── i386-pc├── loader│ └── entries└── lost+found9 directories使用tree命令查看根目录下的一级子目录
# tree / -L 1/├── bin -> usr/bin├── boot├── data├── dev├── etc├── home├── lib -> usr/lib├── lib64 -> usr/lib64├── media├── mnt├── opt├── proc├── root├── run├── sbin -> usr/sbin├── srv├── sys├── tmp├── usr└── var查看/boot下的一级目录
# tree -d /boot -L 1/boot├── efi├── grub2├── loader└── lost+found4 directories创建目录mkdir用于创建目录,默认只能创建一级目录
# lltotal 0# mkdir test# lltotal 0drwxr-xr-x. 2 root root 6 Aug 9 11:38 test如果想要一次性创建多级目录,可以使用mkdir -p实现,因为mkdir不支持一次创建多级子目录
# mkdir a/b/cmkdir: cannot create directory ‘a/b/c’: No such file or directory# mkdir -p a/b/c# lltotal 0drwxr-xr-x. 3 root root 15 Aug 9 11:39 adrwxr-xr-x. 2 root root 6 Aug 9 11:38 test使用一条命令创建目录 testdir/dir1/x/a,testdir/dir1/x/b,testdir/dir1/y/a,testdir/dir1/y/b
# mkdir -p testdir/dir1/{x,y}/{a,b}# tree testdirtestdir└── dir1├── x│ ├── a│ └── b└── y├── a└── b7 directories, 0 files切换目录在进行系统运维时经常需要在不同的文件目录进行切换,windows和Linux都可以使用cd命令来切换目录,使用cd命令就可以实现目录之间的切换,cd就是change directory的缩写。
cd命令的使用方式就是cd 后面跟上绝对路径或者是相对路径,例如cd /root表示切换到管理员的家目录
# cd /root# pwd/rootcd默认切换的是当前登录用户的家目录
# cd# pwd/root~表示当前用户的家目录
# cd ~# pwd/rootcd 切换到普通用户guanglei的家目录
root用户可以进入普通用户的家目录,而普通用户不能进入root用户的家目录
# cd ~guanglei# pwd/home/guangleicd - 切换到上一次目录
OLDPWD变量保存了上一次的路径
# pwd/root# cd /data# pwd/data# cd -/root# echo $OLDPWD/data在Linux系统中,.表示当前目录,..表示上级目录,而cd ..就表示切换到上级目录
Linux的每个目录下都有.和..
# pwd/root# cd ..# pwd/文件的路径包含dirname和basename两部分组成:dirname和basename
文件所在的目录称为dirname,文件名称为basename
查看ifcfg-ens33文件的dirname和basename
# dirname /etc/sysconfig/network-scripts/ifcfg-ens33/etc/sysconfig/network-scripts# basename /etc/sysconfig/network-scripts/ifcfg-ens33ifcfg-ens33目录也是一种文件
查看/etc/sysconfig/network-scripts/的dirname和basename
# dirname /etc/sysconfig/network-scripts//etc/sysconfig# basename /etc/sysconfig/network-scripts/network-scripts删除空目录rmdir用于删除空目录
# cd /data/# mkdir test# lltotal 0drwxr-xr-x. 2 root root 6 Aug 29 11:27 test# rmdir test/# lltotal 0列出目录在访问Linux文件系统时通常需要查看文件的相关信息,Linux提供了ls命令以及相关的选项来查看文件或者目录的相关信息,ls命令默认使用的是别名
# type lsls is aliased to `ls --color=auto在查看文件信息时会给文件增加颜色,如果想使用原命令,可以在ls命令左边加上\即可

ls命令在使用时会用到一些常用的选项

  • ls -a 显示所有文件,包含隐藏文件
  • ls -l 显示额外的信息,等价于ll
  • ls -R 目录递归
  • ls -ld 查看目录和符号链接信息
  • ls -1 文件分行显示
  • ls -S 按照从大到小排序
  • ls -t 按照mtime排序
  • ls -u 配合-t选项显示并且按照atime从新到旧排序
  • ls -U 按目录存放顺序显示
  • ls -X 按文件后缀排序
查看root用户家目录的所有文件
# ls -a. anaconda-ks.cfg .bash_logout .bashrc .config .dbus .tcshrc .Xauthority.. .bash_history .bash_profile .cache .cshrc initial-setup-ks.cfg .viminfo递归查看/boot目录
如果/boot目录下有子目录,会依次列出子目录的文件
# ls -R /boot查看/boot目录的文件属性
# ls -l /boottotal 123444-rw-r--r--. 1 root root 153562 Apr 1 07:40 config-3.10.0-1127.el7.x86_64drwx------. 3 root root 17 Nov 9 2018 efidrwxr-xr-x. 2 root root 27 Aug 25 14:10 grubdrwx------. 5 root root 97 Aug 25 14:17 grub2-rw-------. 1 root root 79475750 Aug 25 14:15 initramfs-0-rescue-0565e5a759964e90a38249dae50bcc33.img-rw-------. 1 root root 29299461 Aug 25 14:17 initramfs-3.10.0-1127.el7.x86_64.img-rw-r--r--. 1 root root 320512 Apr 1 07:40 symvers-3.10.0-1127.el7.x86_64.gz-rw-------. 1 root root 3611662 Apr 1 07:40 System.map-3.10.0-1127.el7.x86_64-rwxr-xr-x. 1 root root 6762688 Aug 25 14:15 vmlinuz-0-rescue-0565e5a759964e90a38249dae50bcc33-rwxr-xr-x. 1 root root 6762688 Apr 1 07:40 vmlinuz-3.10.0-1127.el7.x86_64查看/boot目录的属性
ls -l读取的时间是mtime
# ls -ld /bootdr-xr-xr-x. 5 root root 4096 Aug 25 14:17 /boot每个文件都有三个时间,分别是mtime,即modify time,ctime,即change time,atime 即access time,其中mtime表示的是文件内容的修改时间,ll默认列出来的时间是mtime,ctime表示文件属性的修改时间,而access time表示文件的读时间。
如果想要查看atime和ctime,可以使用ll --time=actime和ll --time=ctime查看
首先在/data目录下创建一个test.txt文件,然后使用ll --time=ctime和ll --time=atime查看文件属性的修改时间和文件的读时间
# touch test.txt# ll --time=ctime test.txt -rw-r--r--. 1 root root 0 Aug 29 12:17 test.txt# ll --time=atime test.txt -rw-r--r--. 1 root root 0 Aug 29 12:17 test.txt然后使用cat命令查看test文件,再查看文件的读时间atime,会发现文件的读时间已经发生变更
# cat test.txt # ll --time=atime test.txt -rw-r--r--. 1 root root 0 Aug 29 12:18 test.txtctime可以使用chown guanglei test.txt命令将test.txt文件的所有者改成guanglei,然后再使用ll -ctime test.txt查看文件的属性修改时间
# chown guanglei test.txt # ll --time=ctime test.txt -rw-r--r--. 1 guanglei root 0 Aug 29 12:21 test.txt使用echo "this is test content" > test.txt 给test文件增加内容,此时mtime也会发生变化
# echo "this is test content" > test.txt # ll test.txt -rw-r--r--. 1 guanglei root 21 Aug 29 12:34 test.txt\03.由于test.txt文件内容大小发生了变化。因此ctime也会发生变化
# ll --time=ctime test.txt -rw-r--r--. 1 guanglei root 21 Aug 29 12:34 test.txt文件属性获取stat命令可以一次性查看文件的三个时间以及其他相关信息
# stat test.txt File: ‘test.txt’Size: 21 Blocks: 8 IO Block: 4096 regular fileDevice: 803h/2051d Inode: 67 Links: 1Access: (0644/-rw-r--r--) Uid: ( 1000/guanglei) Gid: ( 0/ root)Context: unconfined_u:object_r:etc_runtime_t:s0Access: 2020-08-29 12:18:22.951420707 +0800Modify: 2020-08-29 12:34:54.298378239 +0800Change: 2020-08-29 12:34:54.298378239 +0800Birth: -file命令可以查看文件类型
Linux不区分文件后缀,例如ls和ls.txt都是可执行文件,ls.txt是ls重命名来的,而虽然后缀是.txt,依然可以使用ls.txt来查看文件信息
使用file 查看/bin/ls.txt时,显示输出该文件是可执行文件
# mv /bin/ls /bin/ls.txt# ls.txt test.txt test.txt# file /bin/ls.txt/bin/ls.txt: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, strippedfile查看文件类型为可执行程序
file -b可以不显示文件名称
# file -b /bin/fileELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID=1665f7bdcdba1ee47a69e75e5ae3200fda9d35dc, stripped使用file查看Linux中常用文件类型的文件信息
# file /root/anaconda-ks.cfg /root/anaconda-ks.cfg: ASCII text# file /root//root/: directory# file /bin/bin: symbolic link to `usr/bin'# file /dev/zero/dev/zero: character special# file /dev/sda/dev/sda: block special# file /run/autofs.fifo-net /run/autofs.fifo-net: fifo (named pipe)# file /run/rpcbind.sock /run/rpcbind.sock: socketfile还提供了-f 选项,用于批量查看文件类型
首先使用touch命令创建一个文件file.txt,然后使用nano编辑器编辑如下内容

编辑文件时不要有空格或者是换行,否则使用file命令读取文件内容会读取失败!!!
/root/anaconda-ks.cfg/root/bin/dev/zero/dev/sda/run/autofs.fifo-net/run/rpcbind.sock然后使用file -f test.txt命令就能批量读取文件类型

# file -f file.txt /root/anaconda-ks.cfg: ASCII text/root: directory/bin: symbolic link to `usr/bin'/dev/zero: character special/dev/sda: block special/run/autofs.fifo-net: fifo (named pipe)/run/rpcbind.sock: socket文件管理创建文件touch命令用于创建空文件,如果文件存在则会刷新时间,而不会清空文件内容。
# lltotal 0# touch file.txt# lltotal 0-rw-r--r--. 1 root root 0 Aug 29 17:39 file.txt# touch file.txt # ll file.txt-rw-r--r--. 1 root root 0 Aug 29 17:47 file.txt在Linux系统中创建文件除了使用touch以外,Bash Shell中还可以使用重定向符号>和 >>来创建文件,其中>会清空文件现有内容,而>>会追加文件内容
> 也可以用来清空文件内容
# > file1.txt# lltotal 0-rw-r--r--. 1 root root 0 Aug 29 17:39 file1.txt-rw-r--r--. 1 root root 0 Aug 29 17:39 file.txt# nano file1.txt # cat file1.txt this is test content再次使用> file1.txt时会清空文件内容
# > file1.txt# cat file1.txt # 使用>>创建文件时不会清空文件现有内容,也不会刷新时间
# lltotal 4-rw-r--r--. 1 root root 21 Aug 29 17:41 file1.txt-rw-r--r--. 1 root root 0 Aug 29 17:39 file.txt# > file2.txt# nano file2.txt# >> file2.txt# cat file2.txtthis is test content以当前日期为文件名创建.log日志文件
# touch `date +%F.log`# lltotal 8-rw-r--r--. 1 root root 0 Aug 29 17:44 2020-08-29.log-rw-r--r--. 1 root root 21 Aug 29 17:41 file1.txt-rw-r--r--. 1 root root 21 Aug 29 17:43 file2.txt-rw-r--r--. 1 root root 0 Aug 29 17:39 file.txt以昨天的日期为为文件名创建.log的日志文件
# touch `date -d '-1 day' +%F`.log# lltotal 8-rw-r--r--. 1 root root 0 Aug 29 17:44 2020-08-28.log-rw-r--r--. 1 root root 0 Aug 29 17:44 2020-08-29.log-rw-r--r--. 1 root root 21 Aug 29 17:41 file1.txt-rw-r--r--. 1 root root 21 Aug 29 17:43 file2.txt-rw-r--r--. 1 root root 0 Aug 29 17:39 file.txt复制文件和目录cp命令是copy的简写,该命令用于将一个或者多个文件或者文件夹复制到指定的目录中。

  • 如果复制一个文件,那么目标是文件或者目录
  • 如果复制多个文件,那么目标必须是目录
默认root用户使用的cp命令是别名,即默认是cp -i
# type cpcp is aliased to `cp -i'而cp命令除了是别名以外也是外部命令,位于/usr/bin/cp路径下
# type cpcp is aliased to `cp -i'# which cpalias cp='cp -i' /usr/bin/cp使用cp --help可以查看cp命令的使用方式
# cp --helpUsage: cp ... SOURCE DESTor: cp ... SOURCE... DIRECTORYor: cp ... -t DIRECTORY SOURCE...将/etc/fstab文件复制到/data目录下并命名为fstab.bak,然后对比文件差异,发现文件复制后文件的时间发生了变化。
ll !* 表示把上一个命令的参数 传递给ll命令执行
# ll /etc/fstab -rw-r--r--. 1 root root 595 Aug 25 14:08 /etc/fstab# cp /etc/fstab /data/fstab.bak# ll !*ll /etc/fstab /data/fstab.bak-rw-r--r--. 1 root root 595 Aug 29 17:55 /data/fstab.bak-rw-r--r--. 1 root root 595 Aug 25 14:08 /etc/fstab将普通用户guanglei的.bashrc文件复制到/data目录下并命名为.bash.bak,然后查看文件详细信息,发现文件复制后文件的所主和所组都发生了变化。
# cp ~guanglei/.bashrc /data/.bashrc.bak# ll !*ll ~guanglei/.bashrc /data/.bashrc.bak-rw-r--r--. 1 root root 231 Aug 29 17:58 /data/.bashrc.bak-rw-r--r--. 1 guanglei guanglei 231 Apr 1 10:17 /home/guanglei/.bashrccp命令复制时默认通常只用于复制普通文件,使用ll 查看文件时,输出的详细信息的第一个字符如果是- 表示该文件是普通文件
# ll /etc/fstab -rw-r--r--. 1 root root 709 Jul 26 12:47 /etc/fstabLinux系统中除了普通文件以外,还有其他的文件类型,例如套接字文件,软链接文件等等。
/etc目录下的grub2.cfg就是一个软链接文件
# ll /etc/grub2.cfg lrwxrwxrwx. 1 root root 22 Aug 25 14:11 /etc/grub2.cfg -> ../boot/grub2/grub.cfg将/etc目录下的grub2.cfg文件复制到/data目录下并重命名为grub2.cfg.bak后,其文件大小都不一致
# ll /etc/grub2.cfg lrwxrwxrwx. 1 root root 22 Aug 25 14:11 /etc/grub2.cfg -> ../boot/grub2/grub.cfg# cp /etc/grub2.cfg /data/grub2.cfg.bak# ll !*ll /etc/grub2.cfg /data/grub2.cfg.bak-rw-r--r--. 1 root root 4247 Aug 29 18:00 /data/grub2.cfg.baklrwxrwxrwx. 1 root root 22 Aug 25 14:11 /etc/grub2.cfg -> ../boot/grub2/grub.cfg复制文件时如果不改名,那么目标就是目录
将/etc目录下的fstab文件复制到/data目录下
# cp /etc/fstab /data# ll /datatotal 16-rw-r--r--. 1 root root 595 Aug 29 18:01 fstab-rw-r--r--. 1 root root 595 Aug 29 17:55 fstab.bak-rw-r--r--. 1 root root 4247 Aug 29 18:00 grub2.cfg.bak复制多个文件时,目标必须是目录,如果目标是文件,此时会提示目标不是一个目录
将/etc目录下的fstab和issue文件复制到/data目录下
# cp /etc/fstab /etc/issue /datacp: overwrite ‘/data/fstab’? y# ll /datatotal 20-rw-r--r--. 1 root root 595 Aug 29 18:01 fstab-rw-r--r--. 1 root root 595 Aug 29 17:55 fstab.bak-rw-r--r--. 1 root root 4247 Aug 29 18:00 grub2.cfg.bak-rw-r--r--. 1 root root 23 Aug 29 18:01 issuecp命令复制文件夹时需要使用-r选项递归复制
# cp -r /etc/sysconfig/ /data/sysconfig_bak# ll /datatotal 24-rw-r--r--. 1 root root 595 Aug 29 18:01 fstab-rw-r--r--. 1 root root 595 Aug 29 17:55 fstab.bak-rw-r--r--. 1 root root 4247 Aug 29 18:00 grub2.cfg.bak-rw-r--r--. 1 root root 23 Aug 29 18:01 issuedrwxr-xr-x. 6 root root 4096 Aug 29 18:02 sysconfig_bak如果再次执行cp -r /etc/sysconfig/ /data/sysconfigbak,cp命令会将/etc目录下的sysconfig复制到/data/sysconfigbak目录下,不具备幂等性,所谓的幂等性就是多次操作是同样的结果。
cp命令常用的选项

  • -i 复制文件到已经存在的目录时提示是否覆盖
  • -r 递归复制目录以及内部的所有内容
  • -d --no-dereference --preserv=links 不复制原文件,只复制链接名
  • --preservmode:权限ownership:属主属组timestamp:时间links:链接xattrcontextall
  • -a 归档 相当于-dR --preserv=all,常常用于备份
  • -v 看到拷贝的过程
  • -f force 删除后新建文件
  • -u 只复制源比目标更新的文件或者目标不存在的文件
  • -b 目标存在,覆盖前先备份,形式为filename
  • --backup=numbered 目标存在,覆盖前先备份加数字后缀
cp命令在执行复制文件夹时,如果多次复制会提示是否覆盖
# cp -r /etc/sysconfig/ /data/# cp -r /etc/sysconfig/ /data/cp: overwrite '/data/sysconfig/nftables.conf'? ycp: overwrite '/data/sysconfig/ebtables-config'? ycp: overwrite '/data/sysconfig/ip6tables-config'? 如果想要去掉提示,可以使用原始的cp命令,即在cp前面加上\即可。
# \cp -r /etc/sysconfig/ /data/cp命令在复制链接文件时默认复制的不是链接文件本身,而是链接文件指向的真实文件
将/etc/grub2.cfg复制到/data/grub2.cfg_bak 目录下,此时data/grub2.cfg_bak 文件大小和/boot/grub2/grub.cfg文件大小一致,都是4274字节
# cp /etc/grub2.cfg /data/grub2.cfg_bak# ll total 8lrwxrwxrwx. 1 root root 22 Aug 29 18:13 grub2.cfg -> ../boot/grub2/grub.cfg-rw-r--r--. 1 root root 4247 Aug 29 18:16 grub2.cfg_bak# ll /boot/grub2/grub.cfg /data/grub2.cfg_bak -rw-r--r--. 1 root root 4247 Aug 25 14:17 /boot/grub2/grub.cfg-rw-r--r--. 1 root root 4247 Aug 29 18:16 /data/grub2.cfg_bak如果只想要复制链接本身,而不是链接指向的文件,可以使用cp -d,此时不会复制原文件,只会复制链接名。
当复制链接名时文件大小一致。
# cp -d /etc/grub2.cfg /data# ll /etc/grub2.cfg /data/grub2.cfg lrwxrwxrwx. 1 root root 22 Aug 29 18:13 /data/grub2.cfg -> ../boot/grub2/grub.cfglrwxrwxrwx. 1 root root 22 Aug 25 14:11 /etc/grub2.cfg -> ../boot/grub2/grub.cfgcp命令默认在复制文件时没办法保存文件的元数据(例如文件的修改时间)
# cp /etc/fstab /data# ll /etc/fstab /data/fstab -rw-r--r--. 1 root root 595 Aug 29 18:20 /data/fstab-rw-r--r--. 1 root root 595 Aug 25 14:08 /etc/fstab可以使用cp --preserv 选项保存相关的元数据
--preserv
# cp --preserv=timestamp /etc/fstab /datacp: overwrite ‘/data/fstab’? y# ll /etc/fstab /data/fstab -rw-r--r--. 1 root root 595 Aug 25 14:08 /data/fstab-rw-r--r--. 1 root root 595 Aug 25 14:08 /etc/fstab使用stat命令查看fstab文件的属性信息,对比下/etc/fstab和/data/fstab文件的元数据一致。
# stat /etc/fstabFile: ‘/etc/fstab’Size: 595 Blocks: 8 IO Block: 4096 regular fileDevice: 802h/2050d Inode: 134320194 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Context: system_u:object_r:etc_t:s0Access: 2020-08-28 21:00:45.434999469 +0800Modify: 2020-08-25 14:08:19.847241317 +0800Change: 2020-08-25 14:17:57.911636846 +0800Birth: -# stat /data/fstabFile: ‘/data/fstab’Size: 595 Blocks: 8 IO Block: 4096 regular fileDevice: 803h/2051d Inode: 70 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Context: unconfined_u:object_r:etc_runtime_t:s0Access: 2020-08-28 21:00:45.434999469 +0800Modify: 2020-08-25 14:08:19.847241317 +0800Change: 2020-08-29 18:21:25.430487561 +0800Birth: -使用cp -a实现备份/etc文件夹
将/etc目录备份到/data/etc_back目录下
# cp -a /etc/ /data/etc_bak使用cp -a备份指定的文件
# cp -a /etc/grub2.cfg /data/grub2.cfg.bak在复制文件时,首先备份目标文件,可以使用cp -b实现,不过该选项不会保留每一个版本
# rm -rf *# lltotal 0# cp /etc/fstab /data/# cp -b /etc/fstab /datacp: overwrite ‘/data/fstab’? y# lltotal 8-rw-r--r--. 1 root root 595 Aug 29 18:26 fstab-rw-r--r--. 1 root root 595 Aug 29 18:26 fstab~而cp --backup=numberd 选项可以实现 如果目标存在,覆盖前先备份加数字后缀
# rm -rf *# cp --backup=numbered /etc/issue f1# cp --backup=numbered /etc/motd f1cp: overwrite ‘f1’? y# lltotal 4-rw-r--r--. 1 root root 0 Aug 30 08:04 f1-rw-r--r--. 1 root root 23 Aug 30 08:04 f1.~1~使用cp命令实现将/etc目录下的所有文件备份到/data独立的子目录下,并且要求子目录格式为backupYYYY-mm-dd,备份过程可见
# cp -av /etc/ /data/backup`date +%F`# lltotal 12drwxr-xr-x. 140 root root 8192 Aug 30 07:16 backup2020-08-30使用cp命令实现复制/root目录到/data/rootdir目录下,要求保留权限
# cp -r --preserv=mode /root /data/rootdir使用cp命令实现复制隐藏文件和非隐藏文件
# touch a.txt b.txt &cp ~/.bashrc .4345+ Done touch a.txt b.txt# ls -a. .. a.txt .bashrc b.txt# cp -av . /opt/‘./a.txt’ -> ‘/opt/./a.txt’‘./b.txt’ -> ‘/opt/./b.txt’‘./.bashrc’ -> ‘/opt/./.bashrc’# ls /opt/a.txt b.txt rh移动文件和重命名mv命令可以实现文件的移动或者是重命名,默认的mv命令是别名,即如果存在则会提示是否覆盖。
# type mvmv is aliased to `mv -i'常用的选项:

  • -i 交互式
  • -f 强制
  • -b 覆盖前先备份
mv实现移动文件
# rm -rf *# mv /etc/motd .# lltotal 0-rw-r--r--. 1 root root 0 Jun 7 2013 motdmv实现移动目录
首先在/data目录下创建目录parent/child
然后在child目录下创建文件test.txt
最后将parent 目录移动到/opt目录下
# mkdir -p parent/child# cd parent/child/# touch test.txt# cd ..# cd .. # mv parent/ /opt/# ll /opt/total 0drwxr-xr-x. 3 root root 19 Aug 30 08:15 parentdrwxr-xr-x. 2 root root 6 Oct 31 2018 rh将/opt/parent移动到/data目录下
# mv /opt/parent/ /data/# lltotal 0-rw-r--r--. 1 root root 0 Jun 7 2013 motddrwxr-xr-x. 3 root root 19 Aug 30 08:15 parent由于删除操作具有一定的危险性,在线上运维环境中通常使用mv代替rm命令。
mv命令实现重命名
# lltotal 8-rw------- 1 root root 1602 Aug 9 10:51 anaconda-ks.cfg-rw-r--r-- 1 root root 1712 Aug 9 10:51 initial-setup-ks.cfg# mv anaconda-ks.cfg anaconda-ks.cfg.bak# lltotal 8-rw------- 1 root root 1602 Aug 9 10:51 anaconda-ks.cfg.bak-rw-r--r-- 1 root root 1712 Aug 9 10:51 initial-setup-ks.cfgmv命令只能实现单个文件重命名,如果想要实现多个文件重命名时,可以使用rename命令实现
使用rename实现将.log后缀的文件全部重命名为.log.bak
# rm -rf *# touch f{1..10}.log# lsf10.log f1.log f2.log f3.log f4.log f5.log f6.log f7.log f8.log f9.log# rename .log .log.bak *# lsf10.log.bak f2.log.bak f4.log.bak f6.log.bak f8.log.bakf1.log.bak f3.log.bak f5.log.bak f7.log.bak f9.log.bak删除文件在windows系统中删除文件,系统会将删除的文件放到回收站中。
而linux系统的删除使用rm命令,但是是没有回收站。因此在删除文件时需要小心操作,以免造成严重的后果。
rm命令常用的选项

  • -i 交互式删除
  • -f 强制删除
  • -r 递归删除
  • --no-preserve-root 删除目录
默认的rm命令是别名,在删除文件时系统会提示是否确认删除
# type rmrm is aliased to `rm -i'rm是一个外部命令,默认使用的是别名
# which rmalias rm='rm -i' /usr/bin/rm删除/data目录下的f1.log.bak文件,按y键确认删除
# lsf10.log.bak f2.log.bak f4.log.bak f6.log.bak f8.log.bakf1.log.bak f3.log.bak f5.log.bak f7.log.bak f9.log.bak# rm f1.log.bak rm: remove regular empty file ‘f1.log.bak’? y# lsf10.log.bak f2.log.bak f3.log.bak f4.log.bak f5.log.bak f6.log.bak f7.log.bak f8.log.bak f9.log.bak想要一次性删除多个文件而不要系统提示是否确认删除,可以使用rm的命令,而不是别名
删除的文件不存在,系统会提示cannot remove 'xxx': No such file or directory
# \rm f2.log.bak f3.log.bak f4.log.bak # lsf10.log.bak f5.log.bak f6.log.bak f7.log.bak f8.log.bak f9.log.bakrm 命令除了删除文件外,还可以删除文件夹,不过需要使使用-r选项
# mkdir log# mv f*.bak log# ls logf10.log.bak f5.log.bak f6.log.bak f7.log.bak f8.log.bak f9.log.bak# \rm -r logrm命令还可以自杀,使用rm -rf /可以删除系统
# rm -rf /rm: it is dangerous to operate recursively on ‘/’rm: use --no-preserve-root to override this failsafe幸运的是自从CentOS6以后该命令需要加--no-preserve-root 长选项才可以删除系统,因为删除系统是自杀式行为
如果你的系统没有在VMware WorkStation中做快照,切勿执行该命令。
# rm -rf --no-preserve-root /在删除的过程中有些文件是无法删除的,例如/proc的目录是无法删除,内部命令是无法删除,因为内部命令随着shell启动已经加载到内存,rm删除的是磁盘的文件。
如果执行了该命令,需要使用VM WareWorkStation来恢复系统到初始化默认的安装状态

rm -rf * 无法删除隐藏文件,删除隐藏文件可以使用rm .*删除所有隐藏文件
# touch a.txt b.txt &cp ~/.bashrc .4201+ Done touch a.txt b.txt# ls -a. .. a.txt .bashrc b.txt# rm -rf *# ls -a. .. .bashrc# rm .*rm: remove regular file ‘.bashrc’? y# ls -a. ..使用rm命令删除隐藏文件和非隐藏文件,可以使用rm -rf * .* 命令删除
# touch a.txt b.txt &cp ~/.bashrc .4485+ Done touch a.txt b.txt# ls -a. .. a.txt .bashrc b.txt# rm -rf * .*# ls -a. ..在线上环境禁止使用rm命令,使用mv命令代替rm命令,因为rm命令可以自杀,造成严重的经济损失
rm在删除文件时,如果文件被占用了,此时不会立即释放磁盘空间,除非被占用的文件被释放才会释放空间,我们可以使用重定向> 来清除文件内容,清除后在使用rm命令删除文件此时会立即释放磁盘空间。
首先使用cp命令将/dev/zero文件复制到/boot目录下,使用df命令查看/boot磁盘空间的使用率
# cp /dev/zero /boot/^C# df -h /bootFilesystem Size Used Avail Use% Mounted on/dev/sda1 2.0G 1.4G 456M 76% /boot然后复制10.0.0.100的会话,并使用vim打开/boot/zero文件

在原会话10.0.0.100中删除/boot/zero文件,并使用df命令查看磁盘空间并没有发生改变
# rm -rf /boot/zero# df -h /bootFilesystem Size Used Avail Use% Mounted on/dev/sda1 2.0G 1.4G 456M 76% /boot只有把复制的会话关闭以后才会释放磁盘空间

# df -h /bootFilesystem Size Used Avail Use% Mounted on/dev/sda1 2.0G 192M 1.7G 11% /boot

复制会话关闭后查看磁盘空间
如果想要删除后立即释放磁盘空间,可以首先使用>清除文件内容,然后再使用rm命令删除,此时即使删除的文件被占用也可以立即释放磁盘空间
# cp /dev/zero /boot^C# df -h /bootFilesystem Size Used Avail Use% Mounted on/dev/sda1 2.0G 904M 930M 50% /boot# > zero # rm -rf zero # df -h /bootFilesystem Size Used Avail Use% Mounted on/dev/sda1 2.0G 192M 1.7G 11% /boot在删除文件时可能会遇到一些无法正常删除的文件,例如这里的-f文件
# touch ./-f# ls -f此时我们删除文件时可以使用路径加文件名的格式删除文件
# rm -rf /data/-f# lltotal 0

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表