这一节我们继续来学习Linux中对文件和目录的操作命令
mkdir 创建目录
mkdir (选项)(参数)
在Linux端可以使用mkdir来创建目录,如果你没有加其他的路径名,那么默认是在当前目录下创建目录,注意当文件夹存在时则提示不能创建
在这里说一下创建文件夹其实和windowns管理一样,要规划好如何去布局一个文件系统,在父目录下可以再创建子目录,每个目录尽量要存放相同类型的文件,这样更易于团队的管理和使用
mkdir的选项
-Z:设置安全上下文,当使用SELinux时有效; -m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限; -p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录; --version 显示版本信息。
你也可以直接通过--help来获取选项
例如我下面创建一个文件夹
[root@localhost ~]# mkdir myfolder [root@localhost ~]# ls myfolder
创建一个文件夹并设置权限(权限暂时还没有讲到,只是了解一下)
[root@localhost ~]# mkdir -m 711 newFolder [root@localhost ~]# ll total 8 drwxr-xr-x. 2 root root 4096 Apr 9 16:49 myfolder drwx--x--x. 2 root root 4096 Apr 9 16:53 newFolder
权限是不是和之前创建的不一样了
当然你也可以直接创建多个目录(参数)
[root@localhost ~]# mkdir a b c [root@localhost ~]# ls a b c
创建包含子目录的目录(递归创建目录)
递归创建目录需要用到 -p选项
[root@localhost ~]# mkdir -p a/b/c [root@localhost ~]# ls a [root@localhost ~]# cd a [root@localhost a]# ls b [root@localhost a]# cd b [root@localhost b]# ls c [root@localhost b]# cd c
当前路径创建了一个a,a中又创建了一个b,b中又创建了c
还可以通过列表来批量创建目录
[root@localhost ~]# mkdir -p a/{1,2,3,4} [root@localhost ~]# ls a [root@localhost ~]# cd a [root@localhost a]# ls 1 2 3 4
tree
tree(选项)(参数)
tree命令以树状图列出目录的内容
下面是tree的所有选项
-a:显示所有文件和目录; -A:使用ASNI绘图字符显示树状图而非以ASCII字符组合; -C:在文件和目录清单加上色彩,便于区分各种类型; -d:先是目录名称而非内容; -D:列出文件或目录的更改时间; -f:在每个文件或目录之前,显示完整的相对路径名称; -F:在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","@","|"号; -g:列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码; -i:不以阶梯状列出文件和目录名称; -l:<范本样式> 不显示符号范本样式的文件或目录名称; -l:如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录; -n:不在文件和目录清单加上色彩; -N:直接列出文件和目录名称,包括控制字符; -p:列出权限标示; -P:<范本样式> 只显示符合范本样式的文件和目录名称; -q:用“?”号取代控制字符,列出文件和目录名称; -s:列出文件和目录大小; -t:用文件和目录的更改时间排序; -u:列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码; -x:将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该目录予以排除在寻找范围外。
事实上用不上,只是参考
例如我们通过mkdir创建一个目录体系,然后通过tree来查看
[root@localhost a]# mkdir -p a/{1,2,3,4} b/{1,2,3} c/{1,2} d/1 [root@localhost a]# ls a b c d [root@localhost a]# tree . ├── a │ ├── 1 │ ├── 2 │ ├── 3 │ └── 4 ├── b │ ├── 1 │ ├── 2 │ └── 3 ├── c │ ├── 1 │ └── 2 └── d └── 1 14 directories, 0 files
非常清晰的列出了文件的结构
注意:tree不仅会列出目录,还会列出目录中的所有文件
比如我在a下面的1文件夹创建了三个文件
[root@localhost a]# tree . ├── a │ ├── 1 │ │ ├── a.py │ │ ├── b.py │ │ └── c.py │ ├── 2 │ ├── 3 │ └── 4 ├── b │ ├── 1 │ ├── 2 │ └── 3 ├── c │ ├── 1 │ └── 2 └── d └── 1 14 directories, 3 files
tree命令有很多用法,我这不一一解释了,你可以按照上面的选项去尝试一下
cp 复制命令
cp(选项)(参数)
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
cp的一些选项
-a:此参数的效果和同时指定"-dpR"参数相同; -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录; -f:强行复制文件或目录,不论目标文件或目录是否已存在; -i:覆盖既有文件之前先询问用户; -l:对源文件建立硬连接,而非复制文件; -p:保留源文件或目录的属性; -R/r:递归处理,将指定目录下的所有文件与子目录一并处理; -s:对源文件建立符号连接,而非复制文件; -u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件; -S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀; -b:覆盖已存在的文件目标前将目标文件备份; -v:详细显示命令执行的操作。
cp的参数其实和mv有点类似,都是需要两个参数,一个是源文件路径,一个目标路径,只是mv是移动,文件数量并没有变,而cp命令是复制一个文件或目录
下面我们通过一个例子来熟悉以下这个命令
把a.py复制到a文件夹中
[root@localhost ~]# ls a a.py [root@localhost ~]# cp a.py a/ [root@localhost ~]# ls a a.py [root@localhost ~]# cd a [root@localhost a]# ls a.py
注意,同mv命令一样,肯定是会用到相对文件路径的," . "代表当前文件路径," .. "代表上一层文件路径," ~ "代表家目录
比如把文件复制到当前文件夹,并改名
[root@localhost ~]# ls a.py [root@localhost ~]# cp a.py b.py [root@localhost ~]# ls a.py b.py
或是从其他文件路径复制到当前路径
[root@localhost b]# tree /root /root ├── a │ └── a.py └── b 2 directories, 1 file [root@localhost b]# cp ../a/a.py . [root@localhost b]# tree /root /root ├── a │ └── a.py └── b └── a.py 2 directories, 2 files
当要复制多个文件时或是一个目录时,这时就要用到-r 递归处理
[root@localhost b]# pwd /root/b [root@localhost b]# tree /root /root ├── a │ ├── 1.py │ ├── 2.py │ └── 3.py ├── b └── c 3 directories, 3 files [root@localhost b]# cp -r ../a . [root@localhost b]# tree /root /root ├── a │ ├── 1.py │ ├── 2.py │ └── 3.py ├── b │ └── a │ ├── 1.py │ ├── 2.py │ └── 3.py └── c
将a整个目录都复制过来了
有时候我们在复制多个文件时,很有可能会遇到有文件重复,这时我们就可以使用 -i 选项交互式进行cp命令,也就是在覆盖既有文件之前先询问用户
[root@localhost b]# tree /root /root ├── a │ ├── a.py │ └── b.py ├── b │ └── a.py └── c 3 directories, 3 files [root@localhost b]# cp -i ../a/a.py . cp: overwrite `./a.py'? y #y代表的是yes
如果文件很多时,而且重名文件也很多,那么你就可能需要不停的按y或yes,这样很麻烦
cp aaa/* /bbb 复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。 cp -r aaa/* /bbb 这次依然需要按Y来确认操作,但是没有忽略子目录。 cp -r -a aaa/* /bbb 依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。 \cp -r -a aaa/* /bbb 成功,没有提示按Y、传递了目录属性、没有略过目录。