Linux 目录操作

200 阅读9分钟

查看切换显示目录

1. pwd(print work directory)

[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /bin
[root@localhost bin]# ll /bin
lrwxrwxrwx. 1 root root 7 831 19:00 /bin -> usr/bin
[root@localhost bin]# pwd -P
/usr/bin

#-P 显示真实路径  快捷方式   不是文件真正的路径
[root@localhost opt]# ln -s /opt/wq23/   /mnt/w23
#设置软连接
[root@localhost opt]# cd /mnt/wq23/
#切换到软连接
[root@localhost w23]# ls
#
[root@localhost w23]# pwd
#显示的是当前路径
/mnt/w23
[root@localhost k18]# pwd -P
#文件的真实路径
/opt/w23

2. cd

cd 目标位置 change directory

文件夹 位置 决定了你能访问的文件

命令效果
cd cd ~若不指定目标位置,切换到当前用户的宿主目录(家目录)
cd -到前一次目录
一个点号“.”开头(自己)表示以当前的工作目录作为起点(已点开头的是)
两个点号“..”开头(上一级)表示以当前目录的上一级目录(父目录)作为起点
“~用户名”形式开头”表示以指定用户的宿主目录(家目录)作为起点
"."开头文件表示隐藏文件
~wq23 (有个用户叫wq23 家目录为起点)表示以指定用户的宿主目录作为起点

相对路径表现

[root@localhost opt]# cat passwd
#此处省略了路径
[root@localhost opt]# cat ./passwd 
#查看当前路径下的passwd文件
[root@localhost opt]# cd ./qw23/
#切换到当前目录下的 qw23 文件夹
[root@localhost qw23]#
[root@localhost qw23]# cd ../../
#切换到上两层的目录
[root@localhost /]#

3. ls(list)

ls [选项][文件或目录… ]

命令效果
-l长格式显示文件和目录列表
-a显示全部包括文件
-A显示全部文件或隐藏文件但不包括.和..
-d只显示当前目录
-h显示文件大小(人性化)
-R递归显示
--color显示颜色
-S文件大小排序
-iindoe号
[root@localhost ~]# ls -a
#显示所有 包括隐藏文件
.                .bash_profile  .dbus                 .tcshrc      图片                  桌面
..               .bashrc        .esd_auth             .Xauthority  文档
anaconda-ks.cfg  .cache         .ICEauthority         公共         下载
.bash_history    .config        initial-setup-ks.cfg  模板         新建文本文档_(2).txt
.bash_logout     .cshrc         .local                视频         音乐

[root@localhost ~]# ls -A
#显示所有 不包括. ..的隐藏文件
anaconda-ks.cfg  .bashrc  .dbus                 .local       模板  下载
.bash_history    .cache   .esd_auth             .tcshrc      视频  新建文本文档_(2).txt
.bash_logout     .config  .ICEauthority         .Xauthority  图片  音乐
.bash_profile    .cshrc   initial-setup-ks.cfg  公共         文档  桌面
[root@localhost ~]# ls -d
#只显示本目录
.

[root@localhost ~]# ls -d /etc
/etc

[root@localhost ~]# ls -lh     //加单位k友好显示
总用量 12K
-rw-------. 1 root root 2.0K 8月  31 19:05 anaconda-ks.cfg
-rw-r--r--. 1 root root 2.1K 8月  31 19:08 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 8月  31 19:09 公共
drwxr-xr-x. 2 root root    6 8月  31 19:09 模板
drwxr-xr-x. 2 root root    6 8月  31 19:09 视频
drwxr-xr-x. 2 root root    6 8月  31 19:09 图片
drwxr-xr-x. 2 root root    6 8月  31 19:09 文档
drwxr-xr-x. 2 root root    6 8月  31 19:09 下载
-rw-r--r--. 1 root root  781 9月   5 08:27 新建文本文档_(2).txt
drwxr-xr-x. 2 root root    6 8月  31 19:09 音乐
drwxr-xr-x. 2 root root   22 9月  15 17:57 桌面
[root@localhost ~]# ls -R     //递归显示
.:
anaconda-ks.cfg       公共  视频  文档  新建文本文档_(2).txt  桌面
initial-setup-ks.cfg  模板  图片  下载  音乐

./公共:

./模板:

./视频:

./图片:

./文档:

./下载:

./音乐:

./桌面:
ens33.sh

颜色表示的文件类型:

  • 黑色数据文件 普通文件
  • 绿色 可执行文件
  • 黄色 块设备文件硬件设备(硬盘)
  • 红色 压缩包
  • 蓝色 文件夹
  • 天蓝色 链接文件(快捷方式)
[root@localhost ~]# vim /etc/DIR_COLORS

7大文件类型

第一个字符文件类型
-普通文件
d文件夹
b块(硬盘)
c字符
s套接字
p管道
l连接

file命令可以识别文件类型,文件后缀无法判断文件类型,文件后缀无所谓

4. 通配符

符号效果
匹配一个字符 f?.txt
*匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件
{1..10} {0..9}1到10
{a..z}a b c ...z
{A..Z}A B C .....Z
[123]([此处括号里值代表一个字符])取其中之一有就显示没有也无所谓
[a-z]单个小写字母范围需要注意
[0-9]单个数字匹配数字范围(0123456789)
\转义符,表示原来的意思
[[:lower:]]小写字母表示 a-z
[[:upper:]]大写字母表示 A-Z
[^qwe]匹配列表中的所有字符以外的字符
[[:digit:]]任意数字,相当于0-9
[root@localhost kt]# touch {a..z}
[root@localhost kt]# touch {A..Z}
[root@localhost kt]# ls
a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
[root@localhost kt]# ls [a-z]
a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y
[root@localhost kt]# ls [a-Z]
a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
[root@localhost kt]# ls [A-Z]
A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
[root@localhost kt]# touch {0..9}
[root@localhost kt]# ls [0-9]
0  1  2  3  4  5  6  7  8  9


[root@localhost data]# ls /etc/.*
#显示隐藏文件也包括.. 的上层目录
#如果不想看上层目录 就要加-d 只显示当前目录
[root@localhost data]# ls /etc/.* -d
#只显示当前目录
/etc/.  /etc/..  /etc/.java  /etc/.pwd.lock  /etc/.updated

5. alias

临时修改

  • alias 命令别名 = ’命令‘
  • unalias 别名命令 删除别名
  • \加别名命令 (显示原始命令)
[root@localhost ~]# mkdir dev
[root@localhost ~]# cd dev
[root@localhost dev]# alias myvim='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
#如果不加引号无法识别

[root@localhost dev]# alias myls=ls -alh
-bash: alias: -alh: 未找到

#使用原来的命令
[root@localhost dev]# ls
[root@localhost dev]# \ls

#删除别名
[root@localhost dev]# unalias myvim 
[root@localhost dev]# myvim
bash: myvim: 未找到命令...

永久修改

  • 在/etc/.bashrc 会影响全部
  • /root/.bashrc只影响当前用户( 当前用户的家目录 )root

绝对路径>别名>内部>hash>外部命令(先查找别名在查找内部命令,缓存最后外部)

命令执行的顺序

1 绝对路径下的执行程序

2 先看别名,如果有别名 直接执行

3 再区别是 内部 还是外部, 内部直接执行

4 外部 首先看hash表,表中直接执行,表中有但是找不到直接报错

5 没有hash 回去$PATH 路径下的文件夹去找,找到执行,找不到直接报错 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

6. du(disk usage)

查看当前所在文件夹的总磁盘占用量

du [选项] [文件或目录… ]

选项说明
-a统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录
-h人性化显示
-s(--summarize)只统计所占用空间总的大小
--max-depth=n (-d 1)最大显示到第n层

文件夹是可以嵌套的,有的时候,我们只想展示第一级或第二级子文件夹的信息,而不希望 du 统计的层次太深,那么我们可以用 --max-depth(-d) 选项来进行控制。

注意: -a -s无法同时使用

创建

  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用。

1. mkdir(创建空文件夹)

[root@localhost data]# mkdir a b c d
#创建多个文件夹

[root@localhost data]# ls
a  b  c  d
[root@localhost data]# mkdir -p aaa/bbb/ccc
# 递归创建文件夹

[root@localhost data]# ls
a  aaa  b  c  d

[root@localhost data]# tree
.
├── a
├── aaa
│   └── bbb
│       └── ccc
├── b
├── c
└── d

7 directories, 0 files

2. touch

  • touch 新文件…(可为空)
  • touch 不会破坏已有文件 刷新时间

每个文件有三个时间戳:

  1. access time 访问时间,atime,读取文件内容
  2. modify time 修改时间,mtime,改变文件内容(数据)
  3. change time 改变时间,ctime,元数据发生改变(元数据 文件大小 权限 )
[root@localhost data]# touch 1 2 3
[root@localhost data]# ls
1  2  3  a  aaa  b  c  d
[root@localhost data]# echo "" > 4
[root@localhost data]# ls
1  2  3  4  a  aaa  b  c  d


[root@localhost bin]# stat /etc/passwd
##############查看三种时间
  文件:"/etc/passwd"
  大小:2107      	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:33941093    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2022-09-20 16:21:07.466009404 +0800
最近更改:2022-08-31 19:04:41.712057230 +0800
最近改动:2022-08-31 19:04:41.712057230 +0800
创建时间:-



[root@localhost bin]# touch /etc/passwd
#################刷新三种时间

[root@localhost bin]# stat /etc/passwd
  文件:"/etc/passwd"
  大小:2107      	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:33941093    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2022-09-20 17:27:56.171802862 +0800
最近更改:2022-09-20 17:27:56.171802862 +0800
最近改动:2022-09-20 17:27:56.171802862 +0800
创建时间:-

access time    atime   最近打开文件的时间如果你不打开文件是不会刷新的
change time    ctime   属性权限改变 
modify time    mtime   内容改变属性(大小)

3.硬连接与软连接

硬连接 同一个文件取不同的名或者叫多个名字,不支持文件夹,创建一个连接数加一,多路径访问。

软连接 类似于windows里快捷方式,软连接,符号连接,会指向原来的文件ln(link)

ln [-s] 源文件或目录… 链接文件或目标位置

加s是软连接 符号连接

对比项硬链接软链接
本质本质是同一个文件本质不是同一个文件
inode(身份证号)相同不同
连接数创建新的硬链接,链接数会增加,删除硬链接,链接数减少删除,新建都不会改变
文件夹不支持支持
删除源文件只是链接数减一,但链接文件的访问不受影响无法访问连接文件
文件类型和源文件相同链接文件,和源文件无关
文件大小和源文件相同(指向硬盘上的同一个文件)源文件的路径的长度

软连接 (一定要使用绝对路径)

[root@localhost data]# ln -s ./passwd /opt/soft
[root@localhost data]# cd /opt/
[root@localhost opt]# ls
rh  soft
[root@localhost opt]# cat soft
cat: soft: 没有那个文件或目录
[root@localhost opt]# ls
rh  soft

硬链接(不支持文件夹)

[root@localhost opt]# ln /mnt/  /opt/hard1
ln: "/mnt/": 不允许将硬链接指向目录

4.cp(copy)

  1. cp [选项]… 源文件 目标 相当改名复制
  2. cp [选项]... 源文件... 文件夹 多个源文件只能复制到文件夹
选项说明
-f覆盖目标同名文件或目录时不进行提醒,直接强制复制
-i覆盖目标同名文件或目录时提醒用户确认
-p复制时保持源文件的权限、属主及时间标记等属性不变
-r复制目录时必须使用此选项,表示递归复制所有文件及子目录
-a完整保留所有的信息包括连接文件
-v可视化
-u相当于增备,差异备份
-b先备份(只保留最近)

如果已有文件夹会生成子目录

[mk@localhost ~]$ ll
#mk用户新建文件
总用量 0
-rw-rw-r--. 1 mk    mk 0 829 11:17 mk

[root@localhost mk]# cp -a mk /data/
#保留所有权限 包括软连接文件
[root@localhost data]# ll
总用量 0
-rw-r--r--. 1 root     root     0 829 11:06 1
-rw-rw-r--. 1 mk       mk 0 829 11:17 mk

[root@localhost data]# cp -r /etc/ /opt/
#复制文件夹要加 -r 不加不让复制
[root@localhost data]# cp -r /etc/ /opt/etc.bak
#改名字
[root@localhost data]# cp -r /etc/ /opt/etc.bak
#变成 etc.bak 的子目录
[root@localhost data]# cp -r /etc/ /opt/etc.bak
#会问你要不要覆盖,cp是别名 加\cp 直接覆盖

[root@localhost data]# cp /etc/passwd /etc/shadow /opt
[root@localhost data]# cp /etc/passwd /etc/shadow /opt/f11.txt 
#复制多个文件必须要是目录,不能是文件,且目录要存在。
cp: 目标"/opt/f11.txt" 不是目录

5.rm(删除)

rm [选项] 要删除的文件或目录

  • -f、强制
  • -i、交互
  • -r 递归(删除目录需要)
[root@localhost ~]# rm -rf /    #不让执行
[root@localhost ~]# echo *      #删根后查看
[root@localhost ~]# rm -rf /data/*
[root@localhost ~]# rm -rf /data /*    ##之间的区别误操作,等于删根

删除特殊的文件

[root@localhost ~]# touch ./-f
# -开头的文件
[root@localhost ~]# ls
[root@localhost ~]# rm -f -f
#删除不掉
[root@localhost ~]# rm -f ./-f
#需要加路径
[root@localhost ~]# touch ./-f
[root@localhost ~]# rm -- -f
rm:是否删除普通空文件 "-f"?y

文件删除后空间不释放:

1.有其他用户正在使用

2.echo “ 1” > 大文件

6. 移动 改名

mv [选项] … 源文件或目录… 目标文件或目录 单个文件

移动 或者改名

批量

rename log log.bak* //所有 log文件改成 log.bak

rename 旧字符 新字符 目标文件

[root@localhost opt]# ls
0  1  2  3  4  5  6  7  8  9
[root@localhost opt]# touch {a..z}.txt
[root@localhost opt]# ls
0  3  6  9      c.txt  f.txt  i.txt  l.txt  o.txt  r.txt  u.txt  x.txt
1  4  7  a.txt  d.txt  g.txt  j.txt  m.txt  p.txt  s.txt  v.txt  y.txt
2  5  8  b.txt  e.txt  h.txt  k.txt  n.txt  q.txt  t.txt  w.txt  z.txt
[root@localhost opt]# rename txt txt.bak *
#将txt改成txt.bak

[root@localhost opt]# ls
0  4  8          c.txt.bak  g.txt.bak  k.txt.bak  o.txt.bak  s.txt.bak  w.txt.bak
1  5  9          d.txt.bak  h.txt.bak  l.txt.bak  p.txt.bak  t.txt.bak  x.txt.bak
2  6  a.txt.bak  e.txt.bak  i.txt.bak  m.txt.bak  q.txt.bak  u.txt.bak  y.txt.bak
3  7  b.txt.bak  f.txt.bak  j.txt.bak  n.txt.bak  r.txt.bak  v.txt.bak  z.txt.bak

查找文件

1. find

1.特点:

  • 精确查找
  • 实时查找 遍历(慢)
  • 支持查找条件较多

重启预定维护

2.格式:

find [OPTION]... [查找路径] [查找条件] [处理动作]

3.查找路径:指定具体目标路径;默认为当前目录

查找条件:可以对文件名、大小、类型、权限等标准进行查找;默认为找出指定路径下的所有文件

处理动作:对符合条件的文件做操作,默认输出至屏幕(print)

3.常用可选项

查找类型关键字说明
按名称查找-name根据目标文件的名称进行查找,允许使用“*”及“?”通配符
按文件大小查找-size根据目标文件的大小进行查找 一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件 常用的容量单位包括 kB(注意 k 是小写)、MB、GB
按文件属主查找-user根据文件是否属于目标用户进行查找
按文件类型查找-type根据文件的类型进行查找 文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等
按inode号-inum根据文件inode号查找
按权限查找-perm按文件权限查找
最大搜索目录深度-maxdepth level将你的文件已分级的形式查找
最小搜索目录深度-mindepth level将你的文件已分级的形式查找

按名称查找 -name

[root@localhost ~]# find /etc/ -name passwd   //查找文件名为passwd的文件
/etc/pam.d/passwd
/etc/passwd
[root@localhost ~]# find /etc/ -name '*.conf'  //查找以.conf结尾的文件
/etc/resolv.conf
/etc/fonts/conf.d/57-dejavu-serif.conf
/etc/fonts/conf.d/65-1-vlgothic-gothic.conf
/etc/fonts/conf.d/31-cantarell.conf


[root@localhost ~]# find /etc/ -name 'vm*'    //查找以vm开头的文件
/etc/abrt/plugins/vmcore.conf
/etc/pam.d/vmtoolsd
/etc/xdg/autostart/vmware-user.desktop
/etc/libreport/events.d/vmcore_event.conf

按文件大小查找 -size

[root@localhost ~]# find -size 2M
./.cache/tracker/meta.db
./.cache/tracker/meta.db-wal

按文件属主查找 -user

[root@localhost ~]# find /mnt -user root
/mnt

按文件类型查找 -type

[root@localhost ~]# find /boot -type d
/boot
/boot/efi
/boot/efi/EFI
/boot/efi/EFI/centos
/boot/grub2
/boot/grub2/i386-pc
/boot/grub2/locale
/boot/grub2/fonts
/boot/grub

  • find -size 1G:查找的是从0G到1G,不包括0G,即(0,1]。

  • find -size 1024M:查找的是从1023M到1024M,不包括1023M,即(1023,1024]。

总结: 在输入命令前一定要先做好快照保存配置,输命令时要先确认格式知否正确,尤其是删除指令,一不小心会把根目录删除。