Linux基础篇学习——文件目录常用管理命令mkdir,cat,more,less,ln,file,cp,find,split,mv
mkdir 创建目录
-p 递归创建目录
-v 显示创建信息
[root@zycentos7 ~]# mkdir -p {mylinux/{bin,conf,lib,logs,webapps/{docs,examples},work},test/test1}
[root@zycentos7 ~]# tree .
.
├── mylinux
│ ├── bin
│ ├── conf
│ ├── lib
│ ├── logs
│ ├── webapps
│ │ ├── docs
│ │ └── examples
│ └── work
├── test
│ └── test1
cat,more,less 文件查看
cat 将文件的内容打印到标准输出
参数 | 含义 |
---|---|
-n | 对所有输出的行数编号 |
-b | 对输出的非空白行数编号 |
-s | 当遇到连续1+空白行,只输出一行 |
-E | 在每行结束处显示$ |
-T | 将Tab显示为^I |
more,less 逐屏显示内容
参数 | 含义 |
---|---|
-num | 一次显示的行数 |
-f | 计算时按实际行数 |
-p | 先清屏再显示 |
less和more都可以按空格翻页
less可以按键盘上下方向键显示上下内容,more不能
less不必读整个文件,加载速度会比more更快
less退出后shell不会留下刚显示的内容,而more会
ln 创建链接文件,默认创建硬链接
硬链接 通过索引节点进行链接
一个inode节点号对应了多个文件名,这多个文件互为硬链接,且互不影响
命令语法
ln TARGET LINK_NAME
示例
注意先TARGET,再LINK_NAME
可以看到硬链接的inode节点相同
[root@localhost ~]# touch f1
[root@localhost ~]# ln f1 f2
[root@localhost ~]# ln f3 f1
ln: failed to access ‘f3’: No such file or directory
[root@localhost ~]# ls -li f*
16838551 -rw-r--r--. 2 root root 0 Oct 6 11:18 f1
16838551 -rw-r--r--. 2 root root 0 Oct 6 11:18 f2
作用
允许一个文件拥有多个有效路径名,通过建立硬链接到重要文件,防止“误删”。
硬链接知识小结
1.具有相同Inode节点号的多个文件互为硬链接文件。
2.互为硬链接对文件系统来说是完全平等的,删除其中任何一个都不会影响另一个的访问。
3.只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
4.当所有硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查时删除的数据被系统回收。
5.硬链接文件是文件的另一个入口。
6.可以通过给文件设置硬链接文件,来防止重要文件被误删。
7.对于静态文件(没有进程正在调用的文件)来说,当对应硬链接数位0(i_link),文件就被删除。 i_link的查看方法(ls -l第三列内容)
文件真正的删除条件
只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放,即文件真正的删除条件是与之相关的所有硬链接文件均被删除。
软链接 类似于Windows的快捷方式
软链接也叫符号链接,在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
命令语法
ln -s TARGET LINK_NAME
示例
注意先TARGET,再LINK_NAME
[root@localhost ~]# touch f1
[root@localhost ~]# ln -s f1 f2
[root@localhost ~]# ln -s f3 f1
ln: failed to create symbolic link ‘f1’: File exists
不能给两个都不存的文件创建软连接
软链接知识小结
1.软链接的源文件和链接文件inode节点不相同,文件类型不同,它们指向不同的数据块。
2.软链接是“”主从”关系,“主”被删除了,“从”仍然存在(因为是两个不同的文件),但指向的是一个无效的连接。
3. 软链接类似windows的快捷方式。
4. 软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
5. 软链接失效的时候一般是红字白底闪烁提示。
目录链接
1.对于目录,不可以创建硬链接,但可以创建软链接。
2.目录的硬链接不能跨越文件系统。
3.每个目录下面都有一个硬链接“.”号,和对应上级目录的硬链接“..”。
4.在父目录里面创建一个子目录,父目录的链接数增加1(子目录里都有..来指向父目录)。但是在父目录里创建文件,父目录的链接数不会增加。
file 显示文件类型
file namefile
cp 拷贝文件或目录
命令语法
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
常用 cp [OPTION]... SOURCE... DIRECTORY
OPTION
-f 强制覆盖目标文件
-i 交互式复制,即覆盖之前提醒用户确认 普通用户使用-i增加交互提示,root用户默认提示
-R,-r 递归复制目录
-p 复制的时候保留源文件或目录的属性,包括所有者、所属组、权限与时间
-P --parents,保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经存在
-d 复制符号链接文件本身,而非其指向的源文件
-a -dR --preserve=all, archive,用于实现归档
练习
1.复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录cp -r /etc/m*[^0-9] /tmp/magedu.com
具体过程
[root@localhost ~]# cp -r /etc/m*[^0-9] /tmp/magedu.com
cp: target ‘/tmp/magedu.com’ is not a directory
[root@localhost ~]# mkdir /tmp/magedu.com
[root@localhost ~]# cp -r /etc/m*[^0-9] /tmp/magedu.com
[root@localhost ~]# ls /tmp/magedu.com/
machine-id makedumpfile.conf.sample mke2fs.conf modules-load.d mtab my.cnf.d
magic man_db.conf modprobe.d motd my.cnf
DIRECTORY必须已存在(cp [OPTION]... SOURCE...DIRECTORY)
2.复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下cp -r /usr/share/man/man[0-9] /tmp/man/
3.复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下cp -r /etc/[mnrp]*.conf/tmp/conf.d
find 实时查找工具
命令语法
find [PATH] [OPTION] [action]
OPTION
与时间有关的选项 与当前系统时间有关
-mtime n 在n天之前的【一天之内】被修改过内容的文件
-mtime +n 在n天之前(不含n天本身)被修改过内容的文件
-mtime -n 在n天之内(含n天本身)被修改过内容的文件
-newer file 列出比file新的文件
范例一: 将过去系统上面24小时内有修改过内容(mtime)的文件列出
find / -mtime 0
0代表目前的时间,即从现在开始到24小时前有变动过内容的文件都会被显示
范例二: 找出大于等于 5 天前被更动过的文件档名
find /var -mtime +4
范例三: 找出4 天内被更动过的文件档名
find /var -mtime -4
范例四: 寻找/etc下面的文件,如果文件日期比/etc/passwd新就列出
find /etc -newer /etc/passwd
-newer可以用于辨别两个文件之间的新旧关系
范例五: 将3天前那一天的24小时内有修改过内容(mtime)的文件列出
find / -mtime 3
与使用者或用户组名称有关的参数
-uid n UID
-gid n GID
-user username 按文件属主来查找
-group groupname 按文件所属组来查找
-nouser 查找无有效属主的文件
-nogroup 查找无有效所属组的文件
范例一: 查找/home下面属于zhao的文件
find /home -user zhao
范例二: 查找系统中不属于任何人的文件
find / -nouser
与文件权限及名称有关的参数
-name filename 按名字查找
-type TYPE 按文件类型查找
符号 | 文件类型 |
---|---|
f | 普通文件 |
d | 目录文件 |
l | 符号链接文件 |
b | 块设备文件 |
c | 字符设备文件 |
p | 管道文件 |
s | 套接字文件 |
-perm 按权限查找(待补充) | |
`-perm [/ | -]mode` mode,精确权限匹配 |
-perm mode 搜寻文件权限等于mode的文件 | |
-perm /mode 任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足 9位权限之间存在“或"关系 | |
-perm -mode 每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足 9位权限之间存在“与”关系 |
范例一: 找出名称为passwd的文件
find / -name passwd
范例二: 找出文件名包含了passwd这个关键词的文件
find / -name "*passwd"
利用 -name "*key"
可以搜寻文件名包含关键词的文件
范例三: 找出 /run 目录下,文件类型为Socket的文件
find /run -type s
额外可进行的动作
-exec command 对匹配的文件执行该参数所给出的shell命令,形式为command {} \;
注意{}与;之间有空格
-ok 与exec作用相同,区别在于,在执行命令之前,都会给出提示,让用户确认是否执行
-print 将结果输出到标准输出
-print0 不换行输出,用于归档 find命令在查找到有空格的文件名的文件时,输出内容将被认为是多个文件
find 【路径】【参数】【内容】-exec 【shell命令】{} ;
范例一: 将查找出来的文件删除
find /opt -name filename -exec rm -rf {} \;
范例二: 列出查找的文件的大小
find /etc -type d -exec du -h {} \;
范例三: 在执行命令之前,给出提示
[root@localhost opt]# touch file1
[root@localhost opt]# find -name file1 -ok rm -rf {} \;
< rm ... ./file1 > ? y
-exec 后面的shell指令不支持命令别名ll,需要使用ls -l
其他选项
-depth find filename -depth
加-depth先处理目录下的子内容,再处理目录本身,否则相反
-mindepth find / -mindepth # -name passwd
从第#层目录下开始查找
-maxdepth find / -maxdepth # -name passwd
查找到第#层目录
-prune 不在当前指定的目录下查找
-path pattern 文件名与shell模式匹配
-size [+/-]# 指定查找文件的大小
组合测试
符号 | 文件类型 |
---|---|
-a | 与 |
-o | 或 |
-not,-! | 非 |
范例一 找出/tmp目录下属主为非root的所有文件
[root@localhost tmp]# find /tmp -! -user "root"
/tmp/file1
[root@localhost tmp]# ls -l /tmp/file1
-rw-r--r--. 1 zhao root 82 Oct 13 16:36 /tmp/file1
范例二 找出/tmp目录下文件名中不包含fstab字符串的文件
[root@localhost tmp]# find /tmp -not -name "\*fastb*"
/tmp
/tmp/.X11-unix
/tmp/.XIM-unix
/tmp/.Test-unix
/tmp/.font-unix
/tmp/.ICE-unix
/tmp/file1
/tmp/file2
范例三 找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件
[root@localhost tmp]# find /tmp -! -name "*fastb*" -a -! -user root
/tmp/file1
综合练习
1)查找/var目录下属主为root,且属组为mail的所有文件或目录
find /var -user root -a -group mail -ls
2)用两种方法查找/usr目录下不属于root, bin或hadoop的所有文件或目录
find /usr -not -user root -a -not -user bin -a -not -user hadoop
find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
3)查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
4)查找当前系统上没有属或属组,且最近一周内曾被访问过的文件或目录
find / \( -nouser -o -nogroup \) -atime -7 -ls
5)查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc -size +1M -type f -exec ls -lh {} \;
6)查找/etc目录下所有用户都没有写权限的文件
find /etc -not -perm /222 -type f -ls
7)查找/etc目录至少有一类用户没有执行权限的文件
find /etc -not -perm -111 -type f -ls
8)查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件
find /etc -perm -113 -type f -ls
9)查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
find /etc/ -path /etc/sane.d -a -prune -o -name "*.conf"
10)查找/etc/下,除/etc/sane.d目录和/etc/fonts目录的其他所有.conf后缀的文件
find /etc/ −path /etc/sane.d −o −path /etc/fonts -a -prune -o -name "*.conf"
split 分割文档
split命令用于将一个文件分割成数个。该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。
命令语法
split [OPTION]... [INPUT [PREFIX]]
PREFIX:代表前导符,可作为切割文件的前导文件
OPTION
-b 每一输出文档的大小,单位为 byte
-C 每一输出文档中,单行的最大 byte 数
-a 指定数字的长度
-d 使用数字作为分割文件的文件名后缀,默认是2位长度 与-a配合使用,指定后缀长度
-l 为每一个分割文件输出的行数
实例
[root@localhost tmp]# dd if=/dev/zero of=date.file bs=10k count=1
1+0 records in
1+0 records out
10240 bytes (10 kB) copied, 0.000216012 s, 47.4 MB/s
[root@localhost tmp]# split -b 1k date.file
[root@localhost tmp]# ls
date.file sys vm xaa xab xac xad xae xaf xag xah xai xaj
mv 变更存储位置或文件/目录改名
mv命令是move的缩写,可以用来移动文件或者将文件改名
命令语法
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用 mv [OPTION]... SOURCE... DIRECTORY
OPTION
-b 当目标文件存在时,先备份再覆盖
-f 当目标文件存在时,强制覆盖
-i 当目标文件存在时,提示是否覆盖 普通用户使用-i增加交互提示,root用户默认提示
-t 先指定目标,再指定源文件