1、显示当前工作目录
[root@centos7 ~]#cd /bin
[root@centos7 bin]#pwd
/bin
[root@centos7 bin]#pwd -P
/usr/bin
[root@centos7 bin]#ll /bin
lrwxrwxrwx. 1 root root 7 Jul 14 11:16 /bin -> usr/bin
如果当前工作目录是一个软连接目录,则pwd默认当前目录是软连接的目录,加上P就显示软连接源文件的目录。
2、ls 命令
- ls命令默认数字排在字母的前面
[root@localhost ~]#touch 9
[root@localhost ~]#ls
9 anaconda-ks.cfg ethadd.sh install.log install.log.syslog t1 ttt
- ll显示软连接目录和普通目录的区别
[root@centos7 ~]#ll /etc|wc -l #不加-d就会递归进入子目录
269
[root@centos7 ~]#ll /etc/|wc -l
269
[root@centos7 ~]#ll /etc -d #-d表示只显示etc这个目录
drwxr-xr-x. 133 root root 8192 Jul 20 07:40 /etc
[root@centos7 ~]#ll /etc/ -d
drwxr-xr-x. 133 root root 8192 Jul 20 07:40 /etc/
[root@centos7 ~]#ll /bin|wc -l #不加/表示软连接目录
1
[root@centos7 ~]#ll /bin/|wc -l #加/表示软连接的源目录
1589
[root@centos7 ~]#ll -d /bin
lrwxrwxrwx. 1 root root 7 Jul 14 11:16 /bin -> usr/bin
[root@centos7 ~]#ll -d /bin/
dr-xr-xr-x. 2 root root 45056 Jul 18 07:58 /bin/
总结:如果ll显示一般目录加/和不加没有什么区别,但对于软连接目录,加/代表软连接的源目录,不加代表软连目录。
-d代表只显示目录,不递归进入子目录。
加上/显示的是源文件的bin目录
3、文件通配符
*匹配零个或多个字符
?匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+ 当前工作目录
~-前一个工作目录
[0-9]匹配数字范围
[a-z]:字母
[A-Z]:字母
[wang]匹配列表中的任何的一个字符
[^wang]匹配列表中的所有字符以外的字符
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
- 大小写字母的说明
[root@centos6 app]#touch f{a..c}
[root@centos6 app]#ls
fa fb fc
[root@centos6 app]#touch f{A..C}
[root@centos6 app]#ls
fa fA fb fB fc fC
[root@centos6 app]#ll f[a-c]
-rw-r--r--. 1 root root 0 Jul 20 08:09 fa
-rw-r--r--. 1 root root 0 Jul 20 08:09 fA
-rw-r--r--. 1 root root 0 Jul 20 08:09 fb
-rw-r--r--. 1 root root 0 Jul 20 08:09 fB
-rw-r--r--. 1 root root 0 Jul 20 08:09 fc
[root@centos6 app]#ll f[A-C]
-rw-r--r--. 1 root root 0 Jul 20 08:09 fA
-rw-r--r--. 1 root root 0 Jul 20 08:09 fb
-rw-r--r--. 1 root root 0 Jul 20 08:09 fB
-rw-r--r--. 1 root root 0 Jul 20 08:09 fc
-rw-r--r--. 1 root root 0 Jul 20 08:09 fC
总结:[a-c]和[A-C]代表大小写字母,并且从并且小写字母在前。
4、touch命令
- touch创建空文件和>及>>的区别
>创建空文件,如果文件存在,则会把文件清空,比较危险
touch 创建空文件,如果文件存在,则会更改文件的时间戳
>>创建空文件,如果文件存在,则不改变文件内容也不改变时间戳,是最安全的创建空文件
touch可以创建多个空文件 - 指定时间戳
[root@localhost ~]#touch -t 201802012021.30 t3
[root@localhost ~]#stat t3
File: `t3'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 924585 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-02-01 20:21:30.000000000 +0800
Modify: 2018-02-01 20:21:30.000000000 +0800
Change: 2018-02-01 20:21:39.666010356 +0800
5、cp命令
- cp在复制的时候可能会丢失一些源数据
[root@centos6 app]#cp /etc/issue /app/xxx
[root@centos6 app]#ll !*
ll /etc/issue /app/xxx
-rw-r--r--. 1 root root 55 Jul 19 20:30 /app/xxx #时间戳没有改变
-rw-r--r--. 1 root root 55 Jul 15 20:56 /etc/issue
为了避免丢失源数据,可以使用-a进行备份,-p 保留权限,所有者和时间戳, --preserv=all 保留所有源数据
- cp复制软连接文件
[root@centos7 ~]#ll /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Jul 14 11:20 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
[root@centos7 ~]#cp /etc/grub2.cfg /app
[root@centos7 ~]#ll /app
total 24
-rw-r--r--. 1 root root 5275 Jul 18 10:49 cmd.log
-rw-r--r--. 1 root root 4215 Jul 19 20:47 grub2.cfg# 复制的是软连接指向的源文件
drwxr-xr-x. 2 root root 230 Jul 19 18:52 music
-rwxr-xr-x. 1 root root 271 Jul 19 19:13 music.sh
-rw-r--r--. 1 root root 384 Jul 18 10:49 time.log
cp复制软连接文件时复制的是软连接指向的源文件,可以用-P选项,不跟随软连接源。
- cp复制特殊文件
[root@centos6 app]#cp -a /dev/sda1 /app
[root@centos6 app]#ll
total 4
prw-r--r--. 1 root root 0 Jul 19 18:58 f1
srwxr-xr-x. 1 root root 0 Jul 19 19:02 f2
-rw-r--r--. 1 root root 0 Oct 20 2018 f3
brw-rw----. 1 root disk 8, 1 Jul 19 07:33 sda1 #属性相同
-rw-r--r--. 1 root root 55 Jul 19 20:30 xxx
[root@centos6 app]#ll /dev/sda1
brw-rw----. 1 root disk 8, 1 Jul 19 07:33 /dev/sda1 #属性相同
[root@centos6 app]#cp -a /dev/zero /app
[root@centos6 app]#ll
total 4
prw-r--r--. 1 root root 0 Jul 19 18:58 f1
srwxr-xr-x. 1 root root 0 Jul 19 19:02 f2
-rw-r--r--. 1 root root 0 Oct 20 2018 f3
brw-rw----. 1 root disk 8, 1 Jul 19 07:33 sda1
-rw-r--r--. 1 root root 55 Jul 19 20:30 xxx
crw-rw-rw-. 1 root root 1, 5 Jul 19 07:33 zero #属性相同
[root@centos6 app]#ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Jul 19 07:33 /dev/zero #属性相同
cp命令在复制/dev/sda1和/dev/zero 这些特殊文件时,要保留属性,否则无法使用。
- rename批量修改文件名
[root@localhost mnt]#touch {a,b,c,d}.txt
[root@localhost mnt]#ls
a.txt b.txt c.txt d.txt hgfs ip.sh ks.cfg
[root@localhost mnt]#rename '.txt' '.text' *.txt #将所有的以.txt结尾的文件,将.txt格式改为.text格式
[root@localhost mnt]#ls
a.text b.text c.text d.text hgfs ip.sh ks.cfg
6、rm命令
选项 -r 递归,删除目录 ;-f 不提示,直接删除;-i 提示
- rm命令删除一个大文件技巧
rm删除一个大文件时,如果文件正在使用,即使删除了这个大文件,磁盘空间也无法释放,为了让磁盘空间尽快释放,可以先用> 清空这个文件,再用rm删除这个文件,就可以马上释放磁盘空间。 - rm删除点打头的文件
[root@centos6 app]#touch .a
[root@centos6 app]#ls -a
. .. .a f1 f1.txt.bak f2 f2.txt.bak f3.txt.bak sda1 xxx zero
[root@centos6 app]#rm -f * #不能删除点打头的文件
[root@centos6 app]#ls -a
. .. .a #点打头的文件还在
[root@centos6 app]#rm -f .* #执行这条命令才能删除点打头的文件
[root@centos6 app]#ls -a
. ..
- rm删除目录
[root@centos6 app]#ls
f1
[root@centos6 app]#rm -rf /app #提示要把目录也删除,但/app是个分区挂载点,无法删除,只把目录里的内容删除
rm: cannot remove `/app': Device or resource busy
[root@centos6 app]#ls
[root@centos6 app]#mkdir f1
[root@centos6 app]#ls
f1
[root@centos6 app]#rm -rf /app/* #不提示删除/app
[root@centos6 app]#ls
总结:分区挂载点无法删除,要想删除一个目录下的文件而不删除目录的写法为rm -rf /X/* ,如果rm-rf /X 则会连目录也删除。
7、tree命令
[root@localhost ~]#tree
.
├── 9
├── anaconda-ks.cfg
├── ethadd.sh
├── install.log
├── install.log.syslog
├── t1
├── t3
└── ttt
0 directories, 8 files
[root@localhost ~]#tree -d #只显示目录
.
0 directories
[root@localhost ~]#tree -L 1 #只显示/root下的一级目录
.
├── 9
├── anaconda-ks.cfg
├── ethadd.sh
├── install.log
├── install.log.syslog
├── t1
├── t3
└── ttt
0 directories, 8 files
8、软连接和硬链接、inode
ln 创建硬链接 ln-s 创建软连接
- 软连接和硬链接的区别
本质:硬链接本质上是同一个文件,只是一个文件具有两个名字,彼此之间是平等的关系,节点号相同;
软连接本质上不是同一个文件,节点号不同,相当于windows里面的快捷方式。
区别:
- 硬链接不允许对目录创建,软连接可以,如果要想使目录的链接数增加,可以在当前目录内创建多个子目录来实现;
- 硬链接不允许跨分区,软链接可以;
- 创建硬链接后连接数加1,软链接链接数不增长;
- 删除硬链接后互相不影响,删除软连接源文件后,软连接就失效了;
- 硬链接文件的大小和属性完全相同,软链接大小、属性和源文件不同,软链接的大小由源文件的名的字符多少决定;
- 软链接的相对路径不是相对于当前工作目录,而是相对于软连接的当前工作目录,硬链接相对于当前工作目录和相对于硬链接的工作目录都可以。
[root@localhost ~]#ln -s t3 t5 #创建t3文件的软连接
[root@localhost ~]#ll
total 68
-rw-r--r--. 1 root root 0 Feb 1 20:13 9
-rw-------. 1 root root 3346 Jan 9 06:15 anaconda-ks.cfg
-rwxr--r--. 1 root root 1124 Feb 1 11:36 ethadd.sh
-rw-r--r--. 1 root root 41918 Jan 9 06:14 install.log
-rw-r--r--. 1 root root 9154 Jan 9 06:11 install.log.syslog
-rw-r--r--. 1 root root 0 Feb 1 20:21 t3
lrwxrwxrwx. 1 root root 2 Feb 1 20:46 t5 -> t3 #t5大小为t3的字符数
-rw-r--r--. 1 root root 0 Feb 1 15:08 ttt
9、file命令
file 命令用来判断文件类型,主要是查看文件头部的magic number来判断。
[root@localhost ~]#file /bin/cat #查看文件类型
/bin/cat: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
[root@localhost ~]#vim t1
/bin/cat
/bin/ls
[root@localhost ~]#file -f t1 #批量查看文件类型
/bin/cat: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
10、面试题
如果磁盘空间没有用完,但提示空间不足是什么原因?
原因为节点号用完了,一个分区有固定的节点号,可以通过下面命令查看。
[root@localhost ~]#df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1164592 98505 1066087 9% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 76912 38 76874 1% /boot
/boot分区的节点号总共有76912个,如果全部用光了,也会提示空间不足。