Linux命令(4):mkdir、rm、rmdir、mv、cp命令

时间:2022-01-22 10:14:46

Linux命令(4):mkdir命令

mkdir命令的功能为创建一个目录

命令格式

mkdir [选项] DirName

命令功能

通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录。要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限(了解Linux文件-文件夹权限请点击这里)。并且,所创建的文件夹(目录)不能与其父目录(即父文件夹)中的文件名重名,即同一个目录下不能有同名的(区分大小写)。

命令参数

-m 用于对新建目录设置存取权限,也可以用 chmod 命令进行设置。
–p 需要时创建上层文件夹(或目录),如果文件夹(或目录)已经存在,则不视为错误。

用法


Linux命令(4):rm命令

rm命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。

命令格式

rm [选项] 文件…

命令功能

删除一个目录中的一个或多个文件或目录,如果没有使用-r选项,则rm不会删除目录。如果使用rm来删除文件,通常仍可以将该文件恢复原状。

命令参数

-f        --force         忽略不存在的文件,从不给出提示。
-i --interactive 进行交互式删除
-r, -R --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。
-v --verbose 详细显示进行的步骤
--help 显示此帮助信息并退出
--version 输出版本信息并退出

用法

  • 例1:删除文件file,系统会先询问是否删除
    rm 文件名
    输入rm log.log命令后,系统会询问是否删除,输入y后就会删除文件,不想删除则输入n
  • 例2:强行删除file,系统不再提示
    rm -f log1.log
  • 例3:删除任何.log文件;删除前逐一询问确认
    rm -i *.log
  • 例4:将 test1子目录及子目录中所有档案删除
    rm -r test1
  • 例5:rm -rf test2命令会将 test2 子目录及子目录中所有档案删除,并且不用一一确认
    rm -rf test2
  • 例6:删除以 -f 开头的文件
    rm -- -f
  • 例7:自定义回收站功能
    myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
[root@localhost test]# myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D;   mv "$@" $D && echo "moved to $D ok"; }
[root@localhost test]# alias rm='myrm'
[root@localhost test]# touch 1.log 2.log 3.log
[root@localhost test]# ll
总计 16
-rw-r--r-- 1 root root 0 10-26 15:08 1.log
-rw-r--r-- 1 root root 0 10-26 15:08 2.log
-rw-r--r-- 1 root root 0 10-26 15:08 3.log
drwxr-xr-x 7 root root 4096 10-25 18:07 scf
drwxrwxrwx 2 root root 4096 10-25 17:46 test3
drwxr-xr-x 2 root root 4096 10-25 17:56 test4
drwxr-xr-x 3 root root 4096 10-25 17:56 test5
[root@localhost test]# rm [123].log
moved to /tmp/20121026150901 ok
[root@localhost test]# ll
总计 16drwxr-xr-x 7 root root 4096 10-25 18:07 scf
drwxrwxrwx 2 root root 4096 10-25 17:46 test3
drwxr-xr-x 2 root root 4096 10-25 17:56 test4
drwxr-xr-x 3 root root 4096 10-25 17:56 test5
[root@localhost test]# ls /tmp/20121026150901/
1.log 2.log 3.log
[root@localhost test]#

上面的操作过程模拟了回收站的效果,即删除文件的时候只是把文件放到一个临时目录中,这样在需要的时候还可以恢复过来。


Linux命令(4):rmdir命令

rmdir命令的功能是删除空目录,一个目录被删除之前必须是空的。

(注意,rm - r dir命令可代替rmdir,但是有很大危险性。)删除某目录时也必须具有对父目录的写权限。

命令格式

rmdir [选项]... 目录...

命令功能

该命令从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对父目录的写权限。

命令参数

-p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
-v, –verbose 显示指令执行过程

用法

  • 例1:rmdir 不能删除非空目录
    rmdir doc
    rmdir 目录名 命令不能直接删除非空目录
  • 例2:rmdir -p 当子目录被删除后使它也成为空目录的话,则顺便一并删除
    rmdir -p logs

Linux命令(4):mv命令

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。

命令格式

mv [选项] 源文件或目录 目标文件或目录

命令功能

mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

命令参数

-b              若需覆盖文件,则覆盖前先行备份。 
-f --force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i 若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u --update 若目标文件已经存在,且 source 比较新,才会更新
-t --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后

用法

  • 例1:文件改名
    mv test.log test1.txt
    将文件test.log重命名为test1.txt。
  • 例2:移动文件
    mv test1.txt test3
    将test1.txt文件移到目录test3中
  • 例3:将文件log1.txt,log2.txt,log3.txt移动到目录test3中。
    mv log1.txt log2.txt log3.txt test3
    或者
    mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt
    mv log1.txt log2.txt log3.txt test3 命令将log1.txt ,log2.txt, log3.txt 三个文件移到 test3目录中去,mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt 命令又将三个文件移动到test4目录中去
  • 例4:将文件file1改名为file2,如果file2已经存在,则询问是否覆盖。
    mv -i log1.txt log2.txt
  • 例5:将文件file1改名为file2,即使file2存在,也是直接覆盖掉。
    mv -f log3.txt log2.txt
    log3.txt的内容直接覆盖了log2.txt内容,-f 这是个危险的选项,使用的时候一定要保持头脑清晰,一般情况下最好不用加上它。
  • 例6:目录的移动
    mv dir1 dir2
    如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。
  • 例7:移动当前文件夹下的所有文件到上一级目录
    mv * ../
  • 例8:把当前目录的一个子目录里的文件移动到另一个子目录里
    mv test3/*.txt test5
  • 例9:文件被覆盖前做简单备份,前面加参数-b
    mv log1.txt -b log2.txt
    -b 不接受参数,mv会去读取环境变量VERSION_CONTROL来作为备份策略。
    –backup该选项指定如果目标文件存在时的动作,共有四种备份策略:
    1.CONTROL=none或off : 不备份。
    2.CONTROL=numbered或t:数字编号的备份
    3.CONTROL=existing或nil:如果存在以数字编号的备份,则继续编号备份m+1…n:
    执行mv操作前已存在以数字编号的文件log2.txt.~1~,那么再次执行将产生log2.txt~2~,以次类推。如果之前没有以数字编号的文件,则使用下面讲到的简单备份。
    4.CONTROL=simple或never:使用简单备份:在被覆盖前进行了简单备份,简单备份只能有一份,再次被覆盖时,简单备份也会被覆盖。

Linux命令(4):cp命令

cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。

命令格式

cp [选项]... [-T] 源 目的
或者
cp [选项]... 源... 目录
或者
cp [选项]... -t 目录 源...

命令功能

将源文件复制至目标文件,或将多个源文件复制至目标目录。

命令参数

-a --archive 等于-dR --preserve=all
--backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数
--copy-contents 在递归处理是复制特殊文件内容
-d 等于--no-dereference --preserve=links
-f --force 如果目标文件无法打开则将其移除并重试(当 -n 选项存在时则不需再选此项)
-i --interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随源文件中的命令行符号链接
-l --link 链接文件而不复制
-L --dereference 总是跟随符号链接
-n --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P --no-dereference 不跟随源文件中的符号链接
-p 等于--preserve=模式,所有权,时间戳
--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等
-R, -r --recursive 复制目录及目录内的所有项目

用法

  • 例1:复制单个文件到目标目录,文件在目标文件中不存在
    cp log.log test5
    在没有带-a参数时,两个文件的时间是不一样的。在带了-a参数时,两个文件的时间是一致的。
  • 例2:目标文件存在时,会询问是否覆盖
    cp log.log test5
    目标文件存在时,会询问是否覆盖。这是因为cp是cp -i的别名。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。
  • 例3:复制整个目录
    • 目标目录存在时
[root@localhost test]# cp -a test3 test5 
[root@localhost test]# ll
-rw-r--r-- 1 root root 0 10-28 14:48 log.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxrwx 2 root root 4096 10-28 14:47 test3
drwxr-xr-x 3 root root 4096 10-28 15:11 test5
[root@localhost test]# cd test5/
[root@localhost test5]# ll
-rw-r--r-- 1 root root 0 10-28 14:46 log5-1.log
-rw-r--r-- 1 root root 0 10-28 14:46 log5-2.log
-rw-r--r-- 1 root root 0 10-28 14:46 log5-3.log
-rw-r--r-- 1 root root 0 10-28 14:48 log.log
drwxrwxrwx 2 root root 4096 10-28 14:47 test3
  • 目标目录不存在时
[root@localhost test]# cp -a test3 test4
[root@localhost test]# ll
-rw-r--r-- 1 root root 0 10-28 14:48 log.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxrwx 2 root root 4096 10-28 14:47 test3
drwxrwxrwx 2 root root 4096 10-28 14:47 test4
drwxr-xr-x 3 root root 4096 10-28 15:11 test5
[root@localhost test]#

注意目标目录存在与否结果是不一样的。目标目录存在时,整个源目录被复制到目标目录里面。
- 例4:复制的 log.log 建立一个连结档 log_link.log
cp -s log.log log_link.log
那个 log_link.log 是由 -s 的参数造成的,建立的是一个『快捷方式』,所以您会看到在文件的最右边,会显示这个文件是『连结』到哪里去的。