文件名命名规则
- 文件名大小写敏感
- 文件名可以使用除/以外的任意字符
- 文件名长度不能超过255字符
- 以.开头的文件为隐藏文件
常见目录的作用
/boot:启动相关的内核和grub文件
/bin:可执行的二进制文件
/sbin:只有root才能执行的二进制文件
/lib:库文件
/lib64:64位库文件
/home/username:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统的挂载点
/etc:目录存放着各种系统配置文件
/dev:设备文件存放目录
/srv:系统上运行的服务用到的数据
/tmp:临时目录
/usr:存放软件的执行程序、库文件及文档
/var:存放软件可变的数据
/proc:内核与存放进程信息的虚拟文件系统
/sys:存放硬件信息的虚拟文件系统
/usr
/usr/bin:保证系统拥有完整功能而提供的程序,在centos7中,/bin就是指向这里
/usr/sbin:管理员能够用的程序
usr/lib:32位程序用到的库
/usr/lib64:64位程序用到的库
/usr/include:C程序的头文件
/usr/share:结构化独立的数据,列入doc和man
/usr/local:第三方程序的安装位置
/var
/var/cache:应用程序缓存数据的目录
/var/lib:应用程序状态信息数据
/var/local:专用于/usr/local的程序存储可变的数据
/var/lock:锁文件
/var/log:日志文件
/var/opt:专用户/opt下的应用程序存储可变的数据
/var/run:运行中的进程相关数据,通常用户存储进程PID文件
/var/spool:应用程序数据池
/var/tmp:保存系统两次重启之间产生的临时数据
Linux下的文件类型
-:普通文件
d:目录文件
b:块设备
c:字符设备
l:符号链接文件
p:管道文件pipe
s:套接字文件socket
pwd
显示当前位置的绝对路径,常用选项:
- -P:如果当前位置为软连接目录,则显示源路径
- -L:和pwd一样,默认显示当前位置绝对路径
basename
取出基名
[root@centos7 ~]# basename '/etc/sysconfig/network-scripts/ifcfg-eth0'
ifcfg-eth0
dirname
取出目录名
[root@centos7 ~]# dirname '/etc/sysconfig/network-scripts/ifcfg-eth0'
/etc/sysconfig/network-scripts
cd
进入指定目录,常用选项:
- ..:进入当前所在位置的上一级目录
- -:进入上一次的目录,重复调用会在两个目录中来回切换
ls
列出目录内容,常用选项:
- -a:显示所有的文件,包括隐藏的文件
- -A:显示所有的文件,包括隐藏的文件,但是不包括.和..
- -l:长列出,显示属性信息
- -d:不显示子文件和子目录的信息
- -R:递归显示
- -1:以一列的方式显示
- -S:按文件大小从大到小排序
- -t:默认以修改时间从新到旧排列,而如果使用–time=atime或者–time=ctime,则以指定的时间显示,–time=atime可以使用-utl来替代
- -rS:按文件大小从小到大排序
- -rt:按时间从旧到新排序
- -X:按文件的后缀名排序
- -i:显示文件的inode号
- -Z:显示文件的context标签
查看文件状态
stat filename
查看文件的三个时间戳,还可以通过ls --time=atime/--time=ctime来查看
[root@centos6 ~]# stat /etc/sysconfig/network-scripts/ifcfg-eth0
File: `/etc/sysconfig/network-scripts/ifcfg-eth0'
Size: 231 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 393227 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-05-18 14:11:53.672274700 +0800
Modify: 2018-05-16 05:35:31.131999975 +0800
Change: 2018-05-16 06:15:15.794999624 +0800
时间戳
access time(atime):访问时间
modify time(mtime):数据修改时间
change time(ctime) :元数据修改时间
touch
若文件不存在,则创建一个空文件;若文件存在,则更新三个时间戳,常用选项:
- -a:更新atime和ctime
- -m:更新mtime和ctime
- -c:若文件存在,则更新三个时间戳,若不存在,则不做任何操作
文件通配符
*:零个或多个字符
?:任意单个字符
~:当前用户家目录
~J :用户J家目录
~+:当前工作目录
~- :前一个工作目录
0-9:任意数字
a-Z:任意大小写字母
^:取反
[:digit:]:任意数字
[:lower:] :任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:] :标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:] :图形字符
[:xdigit:]:十六进制字符
# 只显示/etc下的非隐藏目录
[root@centos6 ~]# ls -d /etc/*/
/etc/abrt/ /etc/oddjob/
/etc/acpi/ /etc/oddjobd.conf.d/
/etc/alsa/ /etc/openldap/
/etc/alternatives/ /etc/opt/
/etc/audisp/ /etc/PackageKit/
/etc/audit/ /etc/pam.d/
练习
-
显示/etc目录下所有以k开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
[root@centos6 ~]# ls /etc/k*[[:digit:]]*[[:lower:]]
-
显示/proc目录下名字由任意三位数字组成的文件或目录
[root@centos6 ~]# ls -d /proc/[[:digit:]][[:digit:]][[:digit:]]
-
显示/var/log目录下文件名包含符号及数字的文件或目录
[root@centos6 ~]# ls /var/log/*[[:punct:][:digit:]]*
-
显示/usr/share/man目录下所有以m开头,以一个数字和x结尾的文件或目录
[root@centos6 ~]# ls -d /usr/share/man/m*[[:digit:]x]
-
显示/etc目录下,所有以一个大写字母开头,以两个数字结尾的文件或目录
[root@centos6 ~]# ls -d /etc/[[:upper:]]*[[:digit:]][[:digit:]]
-
显示/etc目录下,文件名至少包含一个小写字母和一个数字并以.conf结尾的文件或目录
[root@centos6 ~]# ls /etc/*[[:lower:]]*[[:digit:]]*.conf
-
只显示用户家目录下的非隐藏目录
[root@centos6 ~]# ls -d ~/
复制文件和目录
源\目标 | 不存在 | 存在且为文件 | 存在且为目录 |
---|---|---|---|
一个文件 | 新建同名文件并填充内容 | 覆盖内容 | 在目录下新建同名文件并填充内容 |
多个文件 | 提示错误 | 提示错误 | 在目录下新建同名文件并填充内容 |
目录(配合-r选项) | 新建同名目录和目录下的文件并填充内容 | 提示错误 | 在目录下新建同名文件并填充内容 |
cp
复制文件或目录,常用选项:
- -i:覆盖时提示
- -r:递归复制,可以复制目录
- -d:默认不加-d时,cp复制软连接时会将源复制过去,加上-d保留链接属性,把软连接复制过去
- --preserv=
- mode:权限不变
- owner[skip]:权限及owner,group不变
- time:三个时间戳不变
- xattr:acl权限不变
- links:链接不变
- context:文件的selinux上下文关系不变
- all:所有不变
- -p:相当于--preserv=mode,owner,time
- -a:cp -dr --preserv=all
- -v:显示复制过程
- -f:强制覆盖
- -u:只覆盖比目标文件新的文件,相当于更新文件
- –backup=numbered:覆盖前,将旧文件名的后缀改为.n这种格式
练习
-
定义别名命令baketc,将/etc/目录下所有文件,备份到/testdir独立的子目录下,并要求子目录格式为backupYYYY-mm-dd,备份过程可见
[root@centos7 ~]# alias baketc='cp -av /etc/* /testdir/backup$(date '+%F')/'
-
创建/testdir/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
[root@centos7 ~]# cp -a /root/* /testdir/rootdir/
mv
移动和重命名文件,常用选项:
- -i:覆盖时提示
- -f:强制覆盖,不提示
rename
重命名文件,可以批量重命名
[root@centos7 app]$ ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt
[root@centos7 app]$ rename txt mp3 *.txt
[root@centos7 app]$ ls
1.mp3 2.mp3 3.mp3 4.mp3 5.mp3 6.mp3 7.mp3 8.mp3
rm
删除文件,常用选项:
- -i:删除时提示
- -f:强制删除,不提示
- -r:递归删除,用来删除目录,通常配合-f来直接删除目录及目录下的所有文件和目录
[root@centos7 ~]# ls /testdir/rootdir/
anaconda-ks.cfg initial-setup-ks.cfg
[root@centos7 ~]# rm -rf /testdir/rootdir/
[root@centos7 ~]# ls /testdir/rootdir/
ls: cannot access /testdir/rootdir/: No such file or directory
tree
目录操作,常用选项:
- -d:只显示目录
- -L level:显示指定目录的级数
- -P pattern:只显示由指定pattern匹配到的路径
[root@centos7 boot]# tree -d
.
├── efi
│ └── EFI
│ └── centos
├── grub
└── grub2
├── fonts
├── i386-pc
└── locale
8 directories
[root@centos7 boot]# tree -L
tree: Missing argument to -L option.
[root@centos7 boot]# tree -L 1
.
├── config-3.10.0-862.el7.x86_64
├── efi
├── grub
├── grub2
├── initramfs-0-rescue-93cbf5565a95463486f2d96ceb77d275.img
├── initramfs-3.10.0-862.el7.x86_64.img
├── symvers-3.10.0-862.el7.x86_64.gz
├── System.map-3.10.0-862.el7.x86_64
├── vmlinuz-0-rescue-93cbf5565a95463486f2d96ceb77d275
└── vmlinuz-3.10.0-862.el7.x86_64
3 directories, 7 files
[root@centos7 boot]# tree -Ld 1
.
├── efi
├── grub
└── grub2
3 directories
mkdir
创建目录,常用选项:
- -p:可以同时创建多级目录
- -v:显示创建的信息
- -m:创建同时指定目录的权限
[root@centos7 testdir]# mkdir a/b
mkdir: cannot create directory ‘a/b’: No such file or directory
[root@centos7 testdir]# mkdir -p a/b
[root@centos7 testdir]# tree
.
└── a
└── b
2 directories, 0 files
rmdir
删除空目录,常用选项:
- -p:递归删除空目录
练习
-
如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b
[root@centos7 testdir]# mkdir -p /testdir/dir2/{x/{a,b},y} [root@centos7 testdir]# tree dir2/ dir2/ ├── x │ ├── a │ └── b └── y
硬链接和软链接
硬链接
ln source destination
指向同一个inode的多个文件路径,目录不支持硬链接,硬链接不支持跨文件系统,创建硬链接会增加inode引用计数,其实硬链接就是在目录inode中添加一个路径和inode的对应关系
[root@centos7 app]# echo "hello" > test1/a
[root@centos7 app]# cat test1/a
hello
[root@centos7 app]# ln test1/a test2/b
[root@centos7 app]# cat test2/b
hello
[root@centos7 app]# ll test2/b
-rw-r--r--. 2 root root 6 May 19 19:12 test2/b
软链接
ln -s source destination
指向文件路径的另一个文件路径,软链接与原文件时两个独立的文件,各自有自己的inode号,对文件创建软链接不会增加引用计数,可以跨文件系统,删除原文件,软链接的路径就不存在了,就会失效
file
因为在linux中,不会通过后缀名来区分文件的类型,因为有文件名后缀,仅仅用来方便用户和管理员管理,所以可以使用file来判断文件的类型,常用选项:
- -b:显示文件类型,但是不显示文件名
- -f filelist:列出filelist中的文件名的文件类型
- -F:使用指定分隔符替换输出文件名后默认的”;”分隔符
- -L:查看软链接对应文件的文件类型