目录结构

| 路径 | 功能 |
|---|---|
| bin | 普通用户使用的命令 |
| boot | 系统启动相关文件 |
| dev | 设备文件 |
| etc | 各个软件的配置文件 |
| home | 普通用户的家目录 |
| root | root用户的家目录 |
| run | 临时文件系统,存储系统启动以来的信息 |
| sbin | 管理员使用的命令 |
| tmp | 临时文件(进程产生的文件) |
| usr(unix shared resources) | 系统文件,类似于C:/Windows usr/bin,普通用户使用的应用程序 usr/sbin,管理员使用的应用程序 usr/local,软件安装的位置,类似C:/ProgramFiles |
| var | 存储的一些变化的文件,如日志、数据库、邮件 |
| media | 移动设备默认挂载点 |
| mnt | 手工设备挂载点 |
文件路径
绝对路径:从/开始的路径
相对路径:从当前路径开始的路径
- 例:test1在/home/zhangsan目录下,test2在root目录下,当前位置在/root。分别用绝对路径和相对路径查看两个文件。
绝对路径:cat /root/test2
相对路径:cat test2
绝对路径:cat /home/zhangsan/test1
相对路径:cat ../home/zhangsan/test1
注:./表示当前目录,../表示上一层目录。
文件管理
创建
文件
[root@localhost ~]# touch file1.txt # 无则创建,有则修改时间[root@localhost ~]# touch file3 file4[root@localhost ~]# touch /home/file10.txt[root@localhost ~]# touch /home/{maomao,gougou}[root@localhost ~]# touch file{1..20}[root@localhost ~]# touch file{a..c}[root@localhost ~]# touch file{old,new} # {}集合,等价touch fileold filenew
目录
[root@localhost ~]# mkdir dir1[root@localhost ~]# mkdir /home/dir2 /home/dir3[root@localhost ~]# mkdir /home/{dir4,dir5}[root@localhost ~]# mkdir -v /home/{dir6,dir7} # 显示操作的消息[root@localhost ~]# mkdir -v /home/dir8/111/22[root@localhost ~]# mkdir -pv /home/dir8/111/22 # 创建目录和其所有父层目录[root@localhost ~]# mkdir -pv /home/{abc/{dir1,111},efg}
复制
cp SRC DEST
- SRC为单个文件:
- DEST不存在,创建DEST文件并写入
- DEST存在,覆盖DEST文件
SRC为多个文件:
- 此时DEST必须为目录,若DEST为文件则报错。SRC为目录要使用选项-r(意为递归复制)
- DEST不存在时,创建同名目录和一样的文件
- DEST存在时,创建一样的文件
[root@localhost ~]# mkdir /home/dir{1,2}[root@localhos ~]# touch install.log[root@localhos ~]# cp -v install.log /home/dir1[root@localhos ~]# cp -v install.log /home/dir1/abc.txt[root@localhos ~]# cp -rv /etc /home/dir1[root@localhos ~]# cp -v install.log /home/dir88 # 没有/home/dir88[root@localhos ~]# cp -v install.log /home/dir2[root@localhos ~]# cp -v anaconda-ks.cfg !$[root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/passwd/etc/hostname /home/dir2# 将多个文件复制到同一个目录[root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/passwd/etc/hostname .[root@localhos ~]# type -a cp#cp 是 'cp -i' 的别名#cp 是 /usr/bin/cp[root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33/etc/sysconfig/network-scripts/ifcfg-ens33.bak[root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/{ifcfg-ens33,ifcfgens33.bak}[root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33{,-old}
移动
[root@localhost ~]# mv file1 /home/dir3 # 将file1移动到/home/dir3[root@localhost ~]# mv file2 /home/dir3/file20 # 将file2移动到/home/dir3,并且改名file20[root@localhost ~]# mv file4 file5 # 将file4改名为file5
删除
rm file
-r:递归删除
-f:强制删除[root@localhost ~]# mkdir /home/dir10[root@localhost ~]# touch /home/dir10/{file2,file3,.file4}[root@localhost ~]# rm -rf /home/dir10/*[root@localhost ~]# ls /home/dir10/ -a # 隐藏文件没有被删除[root@localhost ~]# rm -rf *.pdf
查看文件内容
cat
- -n:显示行号
- -A:输出包括控制字符(换行符、制表符等)
![)[%)8[_G]UIM%OL~BEV7UK.png
- more less
more 命令类似 cat ,不过会以一页一页的形式显示。按空格下一页,按b往回一页。按q退出。
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
-f:强制打开文件
/ 字符串:向下检索字符串
?字符串:向上检索字符串
Q:退出
回车:往下一行
空格:往下一页
b:往回一页
- head
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
查看文件开头前5行:head -n 5 man.test.config
![5)Q~Z{TRB{8U9K0XWWLNYD.png
显示文件前20个字节:head -c 20 man.test.config
- tail
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
- -f:循环读取
-n:显示文件尾部n行内容
- grep
针对文件内容进行过滤
[root@localhost ~]# grep 'bash$' /etc/passwd[root@localhost ~]# grep 'failure' /var/log/secure
文件时间
最近访问:2019-08-25 11:11:32.275876888 +0800 atime查看内容
最近更改:2019-08-25 11:11:29.170856671 +0800 mtime修改内容
最近改动:2019-08-25 11:11:29.170856671 +0800 ctime文件属性,比如权限
atime:Access time,
是在读取文件或者执行文件时更改,即文件最后一次被读取的时间。
mtime:Modified time,
是在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间。
ctime:Change time,
是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。
查看Linux文件类型
Linux文件是没有扩展名的,还有注意通过颜色判断文件类型不一定正确。
方法一:ls -l
ls -l 文件名 //看第一个字符
-:普通文件(文本文档、二进制、压缩文件、电影、图片)
d:目录文件(蓝色)
b:设备文件(block块设备)存储硬盘,U盘 /dev/sda,/dev/sda1
c:设备文件(char字符设备)打印机,终端 /dev/tty1,/dev/zero
s:套接字文件
p:管道文件
l:链接文件(淡蓝色)
方法二:file
file 文件名
[root@localhost ~]# file /etc/hosts/etc/hosts: ASCII text[root@localhost ~]# file /bin/ls/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped[root@localhost ~]# file /home/home: directory[root@localhost ~]# file /dev/tty1/dev/tty1: character special
方法三:stat
stat 文件名
可以显示文件类型
[root@localhost ~]# stat /etc/hosts文件:"/etc/hosts"大小:158 块:8 IO 块:4096 普通文件设备:fd00h/64768d Inode:17003212 硬链接:1权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)环境:system_u:object_r:net_conf_t:s0最近访问:2021-01-26 14:41:39.267325896 +0800最近更改:2013-06-07 22:31:32.000000000 +0800最近改动:2020-12-20 15:35:21.552326163 +0800创建时间:-
查找文件
which
which指令会在环境变量 $PATH 设置的目录里查找符合条件的文件。
[root@localhost ~]# which poweroff/usr/sbin/poweroff
locate(知道即可)
locate 要搜索的文件或目录名,非实时的从数据库里快速搜索文件或目录。
[root@localhost ~]# yum -y install mlocate # 安装locate[root@localhost ~]# updatedb # 更新数据库[root@localhost ~]# locate hosts # 查找hosts文件名的文件[root@localhost ~]# locate /etc/sh # 查找/etc目录下所有以
find
- 实时查找工具,通过遍历指定路径下的文件系统完成文件查找
- 特点:
- 查找速度慢
- 精确查找
- 实时查找
find [选项] [路径] [查找条件 + 处理动作] 查找路径:指定具体目录路径,默认是当前文件夹 查找条件:指定的查找标准(文件名/大小/类型/权限等),默认是找出所有文件 处理动作:对符合条件的文件做什么操作,默认输出屏幕
查找条件
根据文件名查找
[root@localhost ~]# find /etc -name "ifcfg-ens33"[root@localhost ~]# find /etc -iname "ifcfg-ens33" # 不区分大小写[root@localhost ~]# find /etc -iname "ifcfg*"
根据文件大小查找
[root@localhost ~]# find /etc -size +5M # 大于5M[root@localhost ~]# find /etc -size 5M # 等于5M[root@localhost ~]# find /etc -size -5M # 小于5M[root@localhost ~]# find /etc -size +5M -ls # 找到的处理动作-ls
指定查找的目录深度
[root@localhost ~]# find / -maxdepth 3 -a -name "ifcfg-ens33" # 最大查找深度# -a是同时满足,-o是或[root@localhost ~]# find / -mindepth 3 -a -name "ifcfg-ens33" # 最小查找深度
按时间找
[root@localhost ~]# find /etc -mtime +5 # 修改时间超过5天[root@localhost ~]# find /etc -mtime 5 # 修改时间等于5天[root@localhost ~]# find /etc -mtime -5 # 修改时间5天以内
按文件属主、属组找
[root@localhost ~]# find /home -user xwz # 属主是xwz的文件[root@localhost ~]# find /home -group xwz[root@localhost ~]# find /home -user xwz -group xwz[root@localhost ~]# find /home -user xwz -a -group root # -a表示且[root@localhost ~]# find /home -user xwz -o -group root # -o表示或[root@localhost ~]# find /home -nouser[root@localhost ~]# find /home -nogroup
按文件类型找
[root@localhost ~]# find /dev -type d
按权限找
数字的部分是rwxrwxrwx,分别是所有者,用户组,其他人的权限,用二进制表示成数字,如r-xr—r—表示为544
[root@localhost ~]# find / -perm 644 -ls # 所有用户有都该权限[root@localhost ~]# find / -perm -644 -ls # 任何一个用户有该权限,例:至少有一类用户有某某权限[root@localhost ~]# find / -perm 4000 -ls[root@localhost ~]# find / -perm -4000 -ls
- 按正则表达式查找
[root@localhost ~]# find /etc -regex '.*ifcfg-ens[0-9][0-9]'# .* 任意多个字符# [0-9] 任意一个数字
处理动作
-print:默认的处理动作,显示至屏幕
-ls:类型于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件
-fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {}\:对查找到的每个文件执行由COMMAND指定的命令
对于每个文件执行命令之前,都会交换式要求用户确认
-exec COMMAND {} \:对查找到的每个文件执行由COMMAND指定的命令
{}:用于引用查找到的文件名称自身
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;另
一种方式可规避此问题
find | xargs COMMAND练习题
- 查找/var目录下属主为root,且属组为mail的所有文件或目录
2. 查找/usr目录下不属于root,bin或Hadoop的所有文件或目录
3. 查找/etc目录下最近一周内容曾被访问过的文件或目录
4. 查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
5. 查找/etc目录下大于1M且类型为普通文件的所有文件或目录
6. 查找/etc目录下所有用户都没有写权限的文件
7. 查找/etc目录下至少一类用户没有执行权限的文件
8. 查找/etc/init.d目录下,所有用户都执行权限,且其它用户写权限的文件[root@localhost ~]# find /var -user root -group mail[root@localhost ~]# find /var -not -user root -a -not -user bin -a -not -user hadoop[root@localhost ~]# find /etc -atime -7[root@localhost ~]# find / -nouser -o -nogroup -a -atime -7[root@localhost ~]# find /etc -size +1M -a -type f[root@localhost ~]# find /etc -not -perm /222[root@localhost ~]# find /etc -not -perm -111[root@localhost ~]# find /etc/init.d -perm /113
