目录管理类命令包括:cd,pwd,ls,mkdir,rmdir,tree,cp,mv,rm,touch,stat
1.1.ls
功能:列出文件或目录
命令帮助:
man ls
info ls
ls --help
help cd #只有内部命令才能用
ls /usr/share/man 文档位置
常用选项:
-a:列出所有的文件(包含隐藏文件)
-l:以长格式的形式列出信息
-i:显示文件inode号
-h:单位换算
-m:以逗号分割文件名列出
-t:按照修改时间来排序
-r:按照修改时间来反向排列
-S:按大小排
示例:
将家目录下的所有文件列出来(含属性与隐藏档)
[[email protected] /]# ls -al ~ total 88dr-xr-x---. 3 root root 4096 May 8 22:27 .......长格式列出 [[email protected] ~]# ls -l total 44-rw-------. 1 root root 1166 May 7 10:08 anaconda-ks.cfg -rw-r--r--. 1 root root 17957 May 7 10:08 install.log -rw-r--r--. 1 root root 4178 May 7 10:06 install.log.syslog -rw-r--r--. 1 root root 7273 May 7 21:30 system.sh 按照修改时间倒序 [[email protected] ~]# ls -lt total 44-rw-r--r--. 1 root root 7273 May 7 21:30 system.sh -rw-------. 1 root root 1166 May 7 10:08 anaconda-ks.cfg -rw-r--r--. 1 root root 17957 May 7 10:08 install.log -rw-r--r--. 1 root root 4178 May 7 10:06 install.log.syslog 按照修改时间正序 [[email protected] ~]# ls -lrt total 44-rw-r--r--. 1 root root 4178 May 7 10:06 install.log.syslog -rw-r--r--. 1 root root 17957 May 7 10:08 install.log -rw-------. 1 root root 1166 May 7 10:08 anaconda-ks.cfg -rw-r--r--. 1 root root 7273 May 7 21:30 system.sh
3.2.cd
功能:更改工作路径
cd是Change Directory的缩写
用法:
cd 直接回车 直接切换到当前用户的家目录里
cd ~:直接切换到当前用户的家目录里
cd .或者 ./:切换到当前目录
cd ..:切换到上一级目录
cd -:切换到上一次的工作目录
示例:
绝对路径切换:
[[email protected] ~]# cd /root/test
相对路径切换:
[[email protected] /]# cd ./test
当前是root,那就是回到root家目录
[[email protected] /]# cd ~
回到上一级目录
[[email protected] test]# cd ..
3.3.pwd(Print Working Directory)
功能:显示当前所在位置的绝对路径。
选项:
-P:显示出实际的路径,而非使用链接(link)路径。
示例:
单纯显示出目前的工作目录 [[email protected] ~]# pwd /root 显示实际的工作目录,而非连接挡本身的目录名而已 [email protected] ~]# cd /var/mail <==注意,/var/mail是一个连结档 [[email protected] mail]# pwd /var/mail <==列出目前的工作目录 [[email protected] mail]# pwd -P /var/spool/mail <==怎么跟上面显示不一样? [[email protected] mail]# ls -ld /var/mail lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail # /var/mail 是连结档,连结到 /var/spool/mail # 加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径
3.4.touch
功能
创建文件,更改文件的时间戳
当目标文件不存在:创建新的,空的文件 touch filename touch file1 file2 touch {a,b,c}.txt touch file{1..5} 当文件命有特殊字符时,可以进行如下转义: touch a\ b\ c touch "a b c" touch ‘a b c‘ 当目标文件存在时,touch修改文件的时间戳: # stat file1 查看文件详细信息(时间戳) File: `file1‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768dInode: 275119 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-03-30 14:34:51.724484689 +0800 访问时间 Modify: 2016-03-30 14:34:45.915484930 +0800 修改时间 Change: 2016-03-30 14:34:45.915484930 +0800 属性时间 touch -a file1 -t 202011111111 修改文件的访问时间 touch -m file1 -t 201011111212 修改文件的修改时间 touch -d 20201010 filename 修改文件的访问时间和修改时间
block 块,操作系统块是一次IO的单位,系统块默认大小为4096字节;以后oracle里也会学到块的概念,oracle块默认为8192字节
inode 是文件系统给文件的一个编号,类似于文件的一个门牌号码
一个优化有关的问题:
块大好,还小好?
块大,一次IO数据量大,IO吞吐量大,空间浪费较多
块小,正好和块大相反
批量创建文件:
第一种:touch {1..10}
第二种seq 11 2 20 |xargs touch seq产生一个序列, |符号是管道(表示把前面的结果传到后面)
第三种:写shell脚本做循环
#!/bin/bash . /etc/init.d/functions for i in `seq 10`;do touch file$i && File_Status=$? if [ $File_Status -eq 0 ];then action "this is file$i successed" /bin/true else action "this is file$i failed" /bin/false fi done
3.5.stat
功能:显示文件或文件系统状态
常用选项:
-Z 显示selinux安全上下文
-f 显示文件系统状态
-c 指定格式输出内容
%y Time of last modification(最近修改时间)
%x Time of last access (最近访问时间)
-t 以简洁的形式打印
示例:
显示文件详细信息:
[[email protected] ~]# stat anaconda-ks.cfg File: `anaconda-ks.cfg‘ Size: 1148 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 267953 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-04-05 10:38:15.690999958 +0800 Modify: 2017-04-05 10:38:16.614999958 +0800C hange: 2017-04-05 10:38:18.527999957 +0800 只显示文件访问时间: [[email protected] ~]# stat -c %x anaconda-ks.cfg 2017-04-05 10:38:15.690999958 +0800
3.6.mkdir
功能:创建新目录(make directory)
语法:mkdir [OPTION]... DIRECTORY...
常用选项:
-m :配置文件的权限
-p :递归创建目录
-v:显示创建过程
示例:
请到/tmp底下尝试创建数个新目录看看: [[email protected] tmp]# pwd /tmp [[email protected] tmp]# mkdir test #创建test新目录 [[email protected] tmp]# mkdir -p test1/test2/test3/test4 递归创建多个目录 [[email protected] tmp]# tree test1 查看创建成功 test1 └── test2 └── test3 └── test4 directories, 0 files 范例:创建权限为rwx--x--x的目录 [[email protected] tmp]# mkdir -m 655 test2 [[email protected] tmp]# ll -d test2 drw-r-xr-x 2 root root 4096 May 24 10:19 test2 上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。 创建多个目[[email protected] tmp]# mkdir {1,2} [[email protected] tmp]# ll total 24 drwxr-xr-x 2 root root 4096 May 24 10:21 1 drwxr-xr-x 2 root root 4096 May 24 10:21 2 创建连续目录: [[email protected] tmp]# mkdir {3..10} [[email protected] tmp]# ll total 56 drwxr-xr-x 2 root root 4096 May 24 10:23 1 drwxr-xr-x 2 root root 4096 May 24 10:23 10 drwxr-xr-x 2 root root 4096 May 24 10:23 2 drwxr-xr-x 2 root root 4096 May 24 10:23 3 drwxr-xr-x 2 root root 4096 May 24 10:23 4 drwxr-xr-x 2 root root 4096 May 24 10:23 5 drwxr-xr-x 2 root root 4096 May 24 10:23 6 drwxr-xr-x 2 root root 4096 May 24 10:23 7 drwxr-xr-x 2 root root 4096 May 24 10:23 8 drwxr-xr-x 2 root root 4096 May 24 10:23 9
3.7.rmdir
功能:删除空的目录
语法:rmdir [OPTION]... DIRECTORY...
选项:
-p:连同上一级『空的』目录也一起删除
-v:显示过程
示例:
[[email protected] ~]# rmdir -v a #这里的a是空目录,所以可以直接删除 rmdir: removing directory, `a‘ [[email protected] ~]# rmdir -v 1 #这里报错,是因为1不是空目录,通过tree就看的出。 rmdir: removing directory, `1‘ rmdir: failed to remove `1‘: Directory not empty [[email protected] ~]# tree 1 1 └── 2 └── 3 └── 4 3 directories, 0 files [[email protected] ~]# rmdir -p 1 #使用递归删除时这样写删除也是会报错 rmdir: failed to remove `1‘: Directory not empty [[email protected] ~]# rmdir -p 1/2/3/4 #这样写的意思就是先删除4,再删除3,依次递归
3.8.tree
功能:以树状图列出目录的内容;
语法:语法很繁琐,这里就不介绍了
常用选项:
-d:只显示目录
-L level:指定显示的层级数目
-P pattern:只显示由指定pattern匹配到的路径,这里的P是大写;
-p:列出权限
示例:
[[email protected] ~]# ll total 444 -rw-------. 1 root root 1148 Apr 5 10:38 anaconda-ks.cfg drwxr-xr-x 2 root root 4096 May 22 10:52 b drwxr-xr-x 2 root root 4096 May 22 10:52 c drwxr-xr-x 2 root root 4096 May 22 10:52 d drwxr-xr-x 2 root root 4096 May 22 10:52 e -rw-r--r-- 1 root root 389473 May 9 15:22 inotify-tools-3.13.tar.gz drwxr-xr-x 2 root root 4096 May 22 10:48 install -rw-r--r--. 1 root root 17957 Apr 5 10:38 install.log -rw-r--r--. 1 root root 4178 Apr 5 10:37 install.log.syslog drwxr-xr-x 2 root root 4096 May 22 10:48 tmp [[email protected] ~]# tree -d . . ├── b ├── c ├── d ├── e ├── install └── tmp [[email protected] ~]# mkdir -p 1/2/3/4/5/6 [[email protected] ~]# tree -L 2 1 #从1开始的2个层级,到3 1 └── 2 └── 3 2 directories, 0 files [[email protected] ~]# tree 1 #不带L参数,全部层级都显示 1 └── 2 └── 3 └── 4 └── 5 └── 6 5 directories, 0 files [[email protected] ~]# tree -L 3 1 #从1开始的3个层级,到4 1 └── 2 └── 3 └── 4 [[email protected] ~]# tree -P *.gz . . ├── 1 │ └── 2 │ └── 3 │ └── 4 │ └── 5 │ └── 6 ├── b ├── c ├── d ├── e ├── inotify-tools-3.13.tar.gz ├── install └── tmp [[email protected] ~]# tree -P *.log . . ├── 1 │ └── 2 │ └── 3 │ └── 4 │ └── 5 │ └── 6 ├── b ├── c ├── d ├── e ├── install ├── install.log └── tmp [[email protected] ~]# tree -p *.gz . inotify-tools-3.13.tar.gz [error opening dir] . ├── [drwxr-xr-x] 1 │ └── [drwxr-xr-x] 2 │ └── [drwxr-xr-x] 3 │ └── [drwxr-xr-x] 4 │ └── [drwxr-xr-x] 5 │ └── [drwxr-xr-x] 6 ├── [-rw-------] anaconda-ks.cfg ├── [drwxr-xr-x] b ├── [drwxr-xr-x] c ├── [drwxr-xr-x] d ├── [drwxr-xr-x] e ├── [-rw-r--r--] inotify-tools-3.13.tar.gz ├── [drwxr-xr-x] install ├── [-rw-r--r--] install.log ├── [-rw-r--r--] install.log.syslog └── [drwxr-xr-x] tmp
3.9.cp
功能:复制文件或目录
语法:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-a 归档,相当于-dR --perserv=all
-b 目标文件存在创建备份,备份文件是文件名跟~
-f 强制复制文件或目录
-r 递归复制目录
-p 保留原有文件或目录属性,--perserv=mode,ownership,timestamp
-i 交互式,即复制文件或目录会询问
-u 当源文件比目的文件修改时间新时才复制
-v 显示复制信息,--verbose
区别:
如果是目录需要拷贝所有属性,用-a或者-rp
如果是文件需要拷贝所有属性,用-p或者-a
注意:cp在管理员的情况下慎用,尽量用交互式来确定是否真的想cp覆盖文件或目录
3.10.mv
功能:移动文件或目录,或重命名
语法:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE..
常用选项:
-b 目标文件存在创建备份,备份文件是文件名跟~
-u 当源文件比目的文件修改时间新时才移动
-v 显示移动信息
-i 交互式
-f 强制
注意:mv也是一个危险命令,使用时慎之又慎
3.11.rm
功能:remove,删除文件或目录
语法:rm [OPTION]... FILE...
常用选项:
-i:交互式
-f:强制删除
-r:递归
注意:rm相对于mv,cp,在生产环境就更危险了,好多同仁受其害不止一次两次,建议禁用。
练习:
(1)如何创建目录/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a, /tmp/x/y1/b, /tmp/x/y2/a,/tmp/x/y2/b,要求一次命令运行?
[[email protected] ~]# mkdir /tmp/x /tmp/x/{y1,y2} /tmp/x/y1/{a,b} /tmp/x/y2/{a,b} [[email protected] ~]# tree /tmp/x /tmp/x ├── y1 │ ├── a │ └── b └── y2 ├── a └── b 更简单的方法: [[email protected] tmp]# mkdir -p /tmp/x/{y1,y2}/{a,b} [[email protected] tmp]# tree /tmp/x /tmp/x ├── y1 │ ├── a │ └── b └── y2 ├── a └── b
(2)如何创建目录 x_m,y_m,x_n,y_n,要求一次命令运行?
[[email protected] tmp]# mkdir {x,y}_{m,n} drwxr-xr-x 2 root root 4096 May 22 14:20 x_m drwxr-xr-x 2 root root 4096 May 22 14:20 x_n drwxr-xr-x 2 root root 4096 May 22 14:20 y_m drwxr-xr-x 2 root root 4096 May 22 14:20 y_n
(3)如何创建目录/tmp/bin, /tmp/sbin,/tmp/usr,/tmp/user/bin,/tmp/usr/sbin,要求一次命令运行?
[[email protected] tmp]# mkdir -p /tmp/{bin,sbin} /tmp/user/bin /tmp/usr/sbin [[email protected] tmp]# tree bin sbin user usr bin sbin user └── bin usr └── sbin
(4)看一个实验
[[email protected] tmp]# touch test [[email protected] tmp]# ll -i test 396797 -rw-r--r-- 1 root root 0 May 22 14:26 test [[email protected] tmp]# cp test test1 [[email protected] tmp]# ll -i test test1 396797 -rw-r--r-- 1 root root 0 May 22 14:26 test 396798 -rw-r--r-- 1 root root 0 May 22 14:26 test1 [[email protected] tmp]# ll -i test1 test3 396798 -rw-r--r-- 1 root root 0 May 22 14:26 test1 396797 -rw-r--r-- 1 root root 0 May 22 14:26 test3
说明:cp一个文件,新文件inode会改变,由396797->396798,mv一个文件,inode号不变,由396797->396797,这是同一分区不变
那不同分区会改变吗:
[[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 1.4G 15G 9% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 477M 28M 425M 6% /boot /dev/mapper/VolGroup-lv01 4.8G 10M 4.6G 1% /data [[email protected] tmp]# ll -i test1 test3 396798 -rw-r--r-- 1 root root 0 May 22 14:26 test1 396797 -rw-r--r-- 1 root root 0 May 22 14:26 test3 [[email protected] tmp]# mv test3 /data/test4 [[email protected] tmp]# ll -i /data/test4 12 -rw-r--r-- 1 root root 0 May 22 14:26 /data/test4 把文件从根分区mv到data分区,跨区域移动,发现inode是改变了
(5)如何把/etc/skel/目录里以.开头的隐藏文件拷到/tmp目
有桌面可以用下面命令打开目录
nautilus /etc/skel/ --图形打开一个目录 # cp /etc/skel/* /tmp/ -rf --错误用法,*号不能代表隐藏文件 # cp /etc/skel/.* /tmp/ -rf --错误用法, .*也包括..,也就是会把上级目录的东西也拷过去 方法一: # cp /etc/skel/.[a-Z]* /test/ -rf --正确做法 方法2: #ls -a |xargs -i cp {} /test