每个shell和系统进程都有一个当前的工作目录 CWD:current work directory
显示当前shell CWD的绝对路径:
pwd命令: printing working directory
-P 显示真实物理路径
-L 显示链接路径(默认)
基名:basename,只取文件名而不要路径
目录名:dirname,只取路径,不要文件名
命令 cd : change directory 改变目录
选项:-P 切换至物理路径,而非软链接目录
可以使用绝对或相对路径
ls 命令可以列出当前目录的内容或指定目录
常见选项:
-a 包含隐藏文件
-l 显示额外的信息
-R 目录递归 每个目录都进去找一遍
-ld 目录和符号链接信息 目录本身的内容
-1 文件分行显示
-S 按从大到小排序
-t 按mtime排序
-u 配合-t选项,显示并按atime从新到旧排序
-U 按目录存放顺序显示
-X 按文件后缀排序
说明:
ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS 和@LS_COLORS变量定义
文件相关信息:metadata, data
ll --time=atime 文件
每个文件有三个时间戳:
[root@centos7-E ~]#stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1897 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201326658 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-03-14 15:24:12.447998978 +0800
Modify: 2020-03-14 15:22:01.956115831 +0800
Change: 2020-03-14 15:22:01.956115831 +0800
Birth: -
file命令检查文件的类型
hexdump -C 查看二进制
dos2unix windows文件转换成Linux文件
iconv -l 显示编码列表
UTF8一统江湖
touch 不能识别通配符,逻辑上不能这么干
搜索文件时可以用,实现对现有文件的过滤
* 匹配零个或多个字符 #不匹配.开头的文件,即隐藏文件
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+和. 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 字母
[A-Z] 字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
ll -d /etc/rc[0-6]*
[root@centos7-E cui]#ls -d .*
. .bash_history .bash_profile .cache .dbus .ICEauthority .mozilla
.. .bash_logout .bashrc .config .esd_auth .local .Xauthority
[root@centos7-E cui]#ls -d /etc/*/ 只列文件夹
存在的文件就刷新时间,不存在的就创建
单纯备份可能会丢失属性
常用选项:
-i 如果目标已存在,覆盖前提示是否覆盖 (普通用户用的是原命令,管理员用的是别名cp=cp -i)
-n 不覆盖,注意两者顺序
-r, -R 递归复制目录及内部的所有内容
-a 归档,相当于-dR --preserv=all,常用于备份功能
-d --no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp:
links
xattr
context
all
-p 等同--preserv=mode,ownership,timestamp
-v --verbose 显示过程
-f --force
-u --update 只复制源比目标更新文件或目标不存在的文件
-b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份 ,centos7之前版本
--backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多个版本 #若此选项先执行,后执行-b选项,则按照此选项的格式继续
[root@centos7-E date]#cp -b /etc/passwd f2.txt
[root@centos7-E date]#cp -b /etc/hosts f2.txt
cp: overwrite ‘f2.txt’? y
[root@centos7-E date]#ll
-rw-r--r--. 1 root root 158 Mar 23 20:02 f2.txt
-rw-r--r--. 1 root root 2314 Mar 23 20:02 f2.txt~
[root@centos7-E date]#cp --backup=numbered /etc/issue f1.txt
[root@centos7-E date]#ll
-rw-r--r--. 1 root root 23 Mar 23 19:57 f1.txt
[root@centos7-E date]#cp --backup=numbered /etc/issue f1.txt
cp: overwrite ‘f1.txt’? y
[root@centos7-E date]#ll
-rw-r--r--. 1 root root 23 Mar 23 19:57 f1.txt
-rw-r--r--. 1 root root 23 Mar 23 19:57 f1.txt.~1~
[root@centos7-E date]#cp -r /etc/ /date/etcbackup #目标文件夹本不存在将会被创建
[root@centos7-E date]#ll
total 12
drwxr-xr-x. 144 root root 8192 Mar 23 20:09 etcbackup
[root@centos7-E date]#cp -r /etc/ /date/etcbackup #第二次复制
[root@centos7-E date]#ls etcbackup/ #若目标文件夹已存在,原文件夹将被复制到目标文件夹中成为子目录。再来一次的话将会覆盖。
1、每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYYmm-dd,备份过程可见
[root@centos8 ~]#cp -av /etc/ /data/backup`date +%F`
2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
[root@centos8 ~]#cp -a /root /data/rootdir
/dev/zero 特殊文件
相当于剪切
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化
[root@centos7-E date]#ls
etcbackup rootdir
[root@centos7-E date]#mv etcbackup /opt/
[root@centos7-E date]#ls /opt
etcbackup
[root@centos7-E date]#mv rootdir /opt/rootdir.bak
[root@centos7-E date]#ll /opt
drwxr-xr-x. 145 root root 8192 Mar 23 20:10 etcbackup
dr-xr-x---. 7 root root 253 Mar 23 21:25 rootdir.bak
范例:
#为所有的conf文件加上.bak后缀:
rename 'conf' 'conf.bak' f*
#去掉所有的bak后缀:
rename '.bak' '' *.bak
[root@centos7-E date]#ls
file10.conf file2.conf file4.conf file6.conf file8.conf
file1.conf file3.conf file5.conf file7.conf file9.conf
[root@centos7-E date]#rename conf conf.bak *
[root@centos7-E date]#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
rm -rf .[^.]*
删除隐藏文件
rm -rf * .[^.]*
删除隐藏文件和非隐藏文件
To remove a file whose name starts with a '-', for example '-foo',use one of these commands:
rm -- -foo
rm ./-foo 带路径更具有通用性
范例:删除特殊文件
#将名为 “/data/-f” 的文件删除
[root@centos8 data]#rm -f -f #此方式错误
[root@centos8 data]#rm -- -f
[root@centos8 data]#rm ./-f
[root@centos8 data]#rm /data/-f
[root@centos8 ~]#rm -rf / #直接删根删不了
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
rm -rf /* #删除根下的所有目录,外部命令(在磁盘里)仍可以执行,挂载点的目录文件本身以及内存里的东西删不了
rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安全删除文件
[root@centos8 ~]#shred -zvun 5 passwords.txt
用mv替代rm
[root@centos7-E~]#alias rm='DIR=/date/backup`date +%F%T`;mkdir $DIR;mv -t $DIR'
哪怕资格文件只有一个字节,也会占用4k的块,块是存放数据的最小单位
直接指针只有十二个,能存12*4k的数据
间接块指针,指向指针块,能存4k*1024=4m的数据
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这此元数据是存放在node(index node)表中。node表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息
第一个node表记录对应的保存了以下信息:
1 cp和inode
cp 命令:
2 rm和inode
rm 命令:
3 mv和inode
[root@centos7-E testdir]touch file{1..52124}
touch: cannot touch ‘file52124.txt’: No space left on device
#事实上空间并没有占满,只是节点编号不够用了
[root@centos7-E testdir]#df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 52428 52428 0 100% /boot
[root@centos7-E testdir]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1014M 457M 558M 45% /boot
硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
硬链接特性
[root@centos7-E date]#ll -i
total 8
71 drwxr-xr-x. 2 root root 20 Mar 24 08:06 dir1
69 -rw-r--r--. 1 root root 595 Mar 24 08:02 f1.txt
[root@centos7-E date]#ln f1.txt dir1/f1.txt
[root@centos7-E date]#ll -i !*
ll -i f1.txt dir1/f1.txt
69 -rw-r--r--. 2 root root 595 Mar 24 08:02 dir1/f1.txt
69 -rw-r--r--. 2 root root 595 Mar 24 08:02 f1.txt #链接数增加一个
一个符号链接指向另一个文件,就像windows中快捷方式,软链接文件和原文件本质上不是同一个文件
软链接特点
[root@centos7-E date]#ln -s f2.txt f2.txt.link
[root@centos7-E date]#ll -i
70 -rw-r--r--. 1 root root 158 Mar 24 08:02 f2.txt
73 lrwxrwxrwx. 1 root root 6 Mar 24 10:29 f2.txt.link -> f2.txt #成功
[root@centos7-E date]#rm -f f2.txt
[root@centos7-E date]#ll
lrwxrwxrwx. 1 root root 6 Mar 24 10:29 f2.txt.link -> f2.txt #链接被标红,无法使用
[root@centos7-E date]#cp /etc/fstab f1.txt
[root@centos7-E date]#ls
dir1 f1.txt
[root@centos7-E date]#ln -s f1.txt dir1/f1.txt.link #认为两个文件在同一个目录里
[root@centos7-E date]#ll !*
ll -s f1.txt dir1/f1.txt.link
0 lrwxrwxrwx. 1 root root 6 Mar 24 10:51 dir1/f1.txt.link -> f1.txt #失败
4 -rw-r--r--. 1 root root 595 Mar 24 10:50 f1.txt
[root@centos7-E date]#ln -s ../f1.txt dir1/f1.txt.link2 #相对于软连接的工作目录
[root@centos7-E date]#ll dir1/f1.txt.link2
lrwxrwxrwx. 1 root root 9 Mar 24 10:54 dir1/f1.txt.link2 -> ../f1.txt #成功
[root@centos7-E date]#ln -s /date/f1.txt /date/dir1/f1.txt.link3 #全部都写绝对路径
[root@centos7-E date]#ll /date/dir1/f1.txt.link3
lrwxrwxrwx. 1 root root 12 Mar 24 11:09 /date/dir1/f1.txt.link3 -> /date/f1.txt #成功
[root@centos7-E date]#ln -s /date/dir1 /opt/dir1_link #创建文件夹跨分区的软链接
[root@centos7-E date]#ll -d /opt/dir1_link
lrwxrwxrwx. 1 root root 10 Mar 24 11:12 /opt/dir1_link -> /date/dir1
[root@centos7-E date]#cd /usr/local/
[root@centos7-E local]#mkdir mysql5.6.10
[root@centos7-E local]#ll
drwxr-xr-x. 2 root root 6 Mar 24 11:15 mysql5.6.10
[root@centos7-E local]#ln -s mysql5.6.10/ mysql
[root@centos7-E local]#ll
lrwxrwxrwx. 1 root root 12 Mar 24 11:16 mysql -> mysql5.6.10/
drwxr-xr-x. 2 root root 6 Mar 24 11:15 mysql5.6.10
[root@centos7-E local]#mkdir mysql5.6.11
[root@centos7-E local]#ll
lrwxrwxrwx. 1 root root 12 Mar 24 11:16 mysql -> mysql5.6.10/
drwxr-xr-x. 2 root root 6 Mar 24 11:15 mysql5.6.10
drwxr-xr-x. 2 root root 6 Mar 24 11:17 mysql5.6.11
[root@centos7-E local]#rm -f mysql
[root@centos7-E local]#ln -s mysql5.6.11/ mysql
[root@centos7-E local]#ll
lrwxrwxrwx. 1 root root 12 Mar 24 11:18 mysql -> mysql5.6.11/ #偷偷的进行了软件的升级
drwxr-xr-x. 2 root root 6 Mar 24 11:15 mysql5.6.10
drwxr-xr-x. 2 root root 6 Mar 24 11:17 mysql5.6.11
软件回滚upgrade rollback
[root@centos7-E local]#rm -f mysql #把软链接删了
[root@centos7-E local]#ln -s mysql5.6.10/ mysql #给老版本创建软链接
[root@centos7-E local]#ll
lrwxrwxrwx. 1 root root 12 Mar 24 11:21 mysql -> mysql5.6.10/ #轻松搞定
drwxr-xr-x. 2 root root 6 Mar 24 11:15 mysql5.6.10
drwxr-xr-x. 2 root root 6 Mar 24 11:17 mysql5.6.11
执行删除命令 ###很重要!很要命!
[root@centos7-E local]#touch mysql5.6.10/f1.txt
[root@centos7-E local]#touch mysql5.6.11/f2.txt
[root@centos7-E local]#rm -rf mysql #不加斜线
[root@centos7-E local]#ll
drwxr-xr-x. 2 root root 6 Mar 24 11:15 mysql5.6.10
drwxr-xr-x. 2 root root 6 Mar 24 11:17 mysql5.6.11
[root@centos7-E local]#ll mysql5.6.10/
-rw-r--r--. 1 root root 0 Mar 24 11:36 f1.txt #文件存在
[root@centos7-E local]#rm -rf mysql/ #加了斜线
[root@centos7-E local]#ll
lrwxrwxrwx. 1 root root 12 Mar 24 11:21 mysql -> mysql5.6.11/
drwxr-xr-x. 2 root root 6 Mar 24 11:15 mysql5.6.10
drwxr-xr-x. 2 root root 6 Mar 24 11:17 mysql5.6.11
[root@centos7-E local]#ll mysql5.6.11/ #文件被删除
total 0
==总结:敲完命令后不要着急回车,仔细看一看命令==