Linux目录操作(pwd、cd、ls、alias、du、mkdir、touch、cp、mv、rm)

128 阅读14分钟

查看切换显示统计目录

pwd(打印当前目录)

[root@localhost ~]# pwd //显示当前路径 
/root 
[root@localhost bin]# cd /bin 
[root@localhost bin]# ll /bin 
lrwxrwxrwx. 1 root root 7 86 20:57
/bin -> usr/bin 
[root@localhost bin]# pwd -P 
/usr/bin 
#-P 显示真实路径 快
捷方式 不是文件真正的路径 
[root@localhost opt]#ln -s /opt/ky18/ 
/mnt/k18 
#设置软连接 
[root@localhost opt]#cd /mnt/k18/ 
#切换到软连接 
[root@localhost k18]#ls 
# 
[root@localhost k18]#pwd #显示的是当前路径 
/mnt/k18 
[root@localhost k18]#pwd -P #文件的真实路径 
/opt/ky18

cd(### 切换目录)

命令效果
cd 或 cd ~若不指定目标位置,切换到当前用户的宿主目录(家目录)
cd -到前一次目录
一个点号“.”开头表示以当前的工作目录作为起点
两个点号“..”开头表示以当前目录的上一级目录(父目录)作为起点
“~用户名”形式开头表示以指定用户的宿主目录(家目录)作为起点
"."开头文件表示隐藏文件
[root@localhost ~]# cd /etc/ 
[root@localhost etc]# 
[root@localhost ~]# cd
[root@localhost ~]# 
[root@localhost ~]# cd ~ 
[root@localhost ~]#

ls

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

命令选项:

选项说明
-l以长格式显示文件和目录列表 ll=ls -l
-a显示全部包括隐藏文件
-A显示全部文件或隐藏文件,但不包括 . 和..
-d只显示当前目录
-h友好显示文件大小
-R递归显示该目录及该目录的子目录下的所有内容
--color显示颜色
-S按从大到小排序
-i显示inode号
[root@localhost mnt]# ll //长格式 
总用量 0 
drwxr-xr-x 3 root root 16 821 10:39 
aa

第一个字段 d 代表文件类型比如 d是目录 - 是普 通文件
第2-9(rwxr-xr-x)字母表示该文件的权限 
root 文件所有者 
root 文件所属组 
16 文件大小 
21 10:39 文件的最近使用时间 
aa 文件或目录名称


[root@test1 ~]# ls -a  //显示所有 包括隐藏文件
[root@test1 ~]# ls -A
#显示所有 不包括. ..的隐藏文件
[root@test1 ~]# ls -d   //只显示本目录
.

[root@test1 ~]# ls -lh //加单位k友好显示 
总用量 16K 
-rw-------. 1 root root 1.6K 618 23:13 anaconda-ks.cfg

[root@test1 opt]# ls -R //递归显示
123456.txt 123.txt 1.txt 2.txt abc.txt rh test.txt 
./rh:
aaa 
./rh/aaa:

文件类型

第 一 个 字 符文件类型
-普通文件,包括纯文本文件、二进制文件、各 种压缩文件等。
d目录,类似 Windows 系统中的文件夹。
b块设备文件,就是保存大块数据的设备,比如 最常见的硬盘。
c字符设备文件
s套接字文件,通常用在网络数据连接,可以启 动一个程序开监听用户的要求,用户可以通过 套接字进行数据通信。
p管道文件,其主要作用是解决多个程序同时存 取一个文件所造成的错误。
l链接文件,类似 Windows 系统中的快捷方式。

通配符

去匹配文件名(包括文件夹)ls

符号效果
匹配一个字符 f?.txt
*匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件
{1..10}1到10
{a..z}a b c ...z
{A..Z}A B C .....Z
[123]包含其中之一就显示,没有也无所谓(此处括号里只表示单个字符)
[0-9]匹配数字范围(0123456789),表示单个数字
[a-z]范围需要注意 (表示从aA、bB到z,不含Z),表示单个字母
[A-Z]从A到Z(只含大写)中的任意一个字母
\转义符,表示原来的意思
[[:lower:]]小写字母表示 a-z
[[:upper:]]大写字母表示 A-Z
[^zhou]匹配列表中的所有字符以外的字符
[[:digit:]]任意数字,相当于0-9
[root@localhost data]# ls -a *
1 
#不显示隐藏文件 
[root@localhost data]# ls -a 
. .. 1 
#显示隐藏文件 
[root@localhost data]# ls *
# *不包括.开头的 l
s: 无法访问*: 没有那个文件或目录

[root@localhost data]# ls .*   //包括了 .. 上层目录 
.: 
..:
aaa boot dev home lib64 misc net proc run   sdb1 sys usr bin data etc lib   media mnt   opt root sbin srv   tmp var


[root@localhost data]# touch f{a..z}.log 
[root@localhost data]# touch f{A..Z}.log 
[root@localhost data]# ls 
123456.txt fa.log     fe.log fj.log fo.log ft.log fy.log
123.txt     f{A.Z}.log ff.log fk.log fp.log fu.log fz.log 1.txt
fb.log     fg.log fl.log fq.log fv.log rh
2.txt       fc.log     fh.log fm.log fr.log fw.log test.txt 
abc.txt     fd.log      fi.log fn.log fs.log fx.log 
[root@localhost data]# ls f[zhou].log   //包含z、h、o、u四个字母中的任意一个就会显示(只匹配单个字符)  
fh.log fo.log fu.log fz.log 
[root@localhost data# ls f[x-z].log     //显示xXyYz,不包括Z 
fx.log fX.log fy.log fY.log fz.log 
[root@localhost data]# ls f[a-c].log     //显示aAbBc,不包括C 
fa.log fA.log fb.log fB.log fc.log   
[root@localhost data]# ls f{a..c}.log   //显示abc所有小写 
fa.log fb.log fc.log 

[root@localhost data]# ls 1[[:lower:]]*     //显示小写字母 
1a1.txt 1e1.txt 1i1.txt 1m1.txt 1q1.txt 1u1.txt 1y1.txt 
1b1.txt 1f1.txt 1j1.txt 1n1.txt 1r1.txt 1v1.txt 1z1.txt

[root@localhost data]# ls 1[[:upper:]]*     //显示大写字母 
[root@localhost data]# ls 1[[:upper:]]* 
1A1.txt 1E1.txt 1I1.txt 1M1.txt 1Q1.txt 1U1.txt 1Y1.txt



[root@localhost data]# touch f{1..9}.txt 
[root@localhost data]# touch f{10..20}.txt 
[root@localhost data]# ls f[0-9].txt           //[0-9]只能匹配10以下的数字 
f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt f7.txt f8.txt f9.txt 
[root@localhost data]# ls f[0-9][0-9].txt     //两个[0-9]可以匹配双数字 
f10.txt f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt f17.txt f18.txt f19.txt f20.txt 
[root@localhost data]# ls f{10..20}.txt       //{10..20}可以匹配双数字 
f10.txt f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt f17.txt f18.txt f19.txt f20.txt 
[root@localhost data]# ls f??.txt       //两个?号可以匹配两个字符 
f10.txt f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt f17.txt f18.txt f19.txt f20.txt 
[root@localhost data]# ls f*.txt         //*可以匹配任意字符 
f10.txt f12.txt f14.txt f16.txt f18.txt f1.txt  f2.txt f4.txt f6.txt f8.txt
f11.txt f13.txt f15.txt f17.txt f19.txt f20.txt f3.txt f5.txt f7.txt f9.txt



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

alias

临时修改(关机或退出终端会自动消失)

  • alias 命令别名 = ’命令‘
  • unalias 别名命令 删除别名
  • \加别名命令 (显示原始命令)
[root@localhost dev]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
[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只影响当前用户

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

du

统计目录或文件所占磁盘空间大小

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

选项说明
-a统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录(包括隐藏文件)
-h以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果
-s只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小
--max-depth=n最大显示到第n层 (-d n)
--exclude排除某些文件后,显示剩余大小
[root@localhost etc]#du -d1   //只显示etc目录下的第一层

注意:

  • -a -s无法同时使用。
  • du显示的是文件占磁盘大小,不是文件的实际大小。
  • 每个磁盘分块,每块(4K)只能存一个文件,当文件不足4K时,du统计也会按4K计算。

创建

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

创建目录 mkdir

mkdir -p 递归创建 没有文件夹 会自动递归创建
mkdir [选项] 目录位置及名称…

[root@localhost data]# mkdir a b c d //创建多个目录 
[root@localhost data]# ls a b c d 
[root@localhost data]# mkdir -p aaa/bbb/cccc   //递归创建目录 
[root@localhost data]# ls 
a aaa b c d 
[root@localhost data]# tree //以树状图形式列出目录的内容,显示出文件目录结构 
. 
├── a 
├── aaa 
│   └── bbb 
│       └── cccc 
├── b 
├── c 
└── d 
[root@localhost data]# mkdir `date` //创建含有当天日期、时间的目录 
[root@localhost data]# ls 0715:26:53 242022CST 星期日

创建文件 touch

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

每个文件有三个时间戳:

  • access time 访问时间,atime,读取文件内容
  • modify time 修改时间,mtime,改变文件内容(数据)
  • change time 改变时间,ctime,元数据发生改变(文件大小、权限等属性)
[root@localhost data]# touch 1 2 3   //创建新文件,或空的新文件 
[root@localhost data]# ls 1  2  3 
[root@localhost data]# echo "" > 4   //创建4的空文件 [root@localhost data]# ls 
1  2  3  4 


[root@localhost bin]# stat /etc/passwd   //查看三种时间 
   文件:"/etc/passwd" 
   大小:2337     块:8         IO 块:4096   普通文件 
设备:fd00h/64768d Inode9381005     硬链接:1 
权限:(0644/-rw-r--r--) Uid:(    0/   root)   Gid:(    0/   root) 
环境:system_u:object_r:passwd_file_t:s0 
最近访问:2021-08-28 22:53:51.539000016 +0800 
最近更改:2021-08-27 16:48:55.881739056 +0800 
最近改动:2021-08-27 16:48:55.881739056 +0800 

[root@localhost bin]# touch /etc/passwd //刷新三种时间 
[root@localhost bin]# stat /etc/passwd 
   文件:"/etc/passwd" 
   大小:2337     块:8         IO 块:4096   普通文件 
设备:fd00h/64768d Inode9381005     硬链接:1 
权限:(0644/-rw-r--r--) Uid:(    0/   root)   Gid:(    0/   root) 
环境:system_u:object_r:passwd_file_t:s0 
最近访问:2021-08-29 01:43:01.305128380 +0800 
最近更改:2021-08-29 01:43:01.305128380 +0800 
最近改动:2021-08-29 01:43:01.305128380 +0800 
创建时间:-

ln(硬连接与软连接文件)

硬链接

同一个文件取不同的名或者叫多个名字(比如 苏轼 字子瞻 号东坡居士 苏二 谥号文忠 )不支持文 件夹,创建一个连接数加一,多路径访问。

注意:

  • 硬链接只能对已存在的文件进行创建 。
  • 不支持给目录创建硬链接;
  • 不支持跨分区创建硬链接。
  • 硬链接文件不占用存储空间。
  • 修改源文件或者目标文件,对应另外一个文件也会发生相应修改。
  • 删除源文件或者目标文件,对另外一个文件没有影响。

软链接

软链接又叫符号链接,这个文件包含了另一个文件的路径名。 可以是任意文件或目录,可以链接不同文件系统的文件。

注意:

  • 可对不存在的文件或目录创建软链接,可交叉文件系统。
  • 删除源文件无法访问,再新建同名文件后依然可以访问。

对比:

对比项硬链接软链接
本质本质是同一个文件本质不是同一个文件
inode和源文件相同和源文件不同
链接数创建新的硬链接,链接数会增加;删除硬链接,链接数减少删除新建不会改变
目录不支持支持
删除源文件只是链接数减一,但链接文件的访问不受影响无法访问链接文件
文件类型和源文件相同链接文件,和源文件无关
文件大小和源文件相同源文件的路径的长度

创建

  • ln 源文件 目标文件:创建硬链接文件
  • ln -s 源文件 目标文件:创建软连接文件

硬链接:

[root@localhost data]# ln /data/f1.txt /data/f11.txt //给文件创建硬链接 
[root@localhost data]# ls 
f1.txt f11.txt 

[root@localhost data]# ln /data/f1.txt /boot/f111.txt     //不能跨分区创建硬链接 
ln: 无法创建硬链接"/boot/f111.txt" => "/data/f1.txt": 无效的跨设备连接

[root@localhost tmp]# ln /tmp/ceshi ceshi01   //不支持给目录创建硬链接 
ln: "/tmp/ceshi": 不允许将硬链接指向目录

软链接:

[root@localhost test]# ln -s file1.txt soft.txt //给文件创建软链接 
[root@localhost test]# ls 
file1.txt soft.txt 

[root@localhost test]# ln -s /tmp/dir01 dir02 //给目录创建软链接 
[root@localhost test]# ls 
file1.txt soft.txt dir02

[root@localhost lianjie2]# find file99.txt 
find: ‘file99.txt’: 没有那个文件或目录 
[root@localhost lianjie2]# ln -s file99.txt soft99.txt   //可对不存在的文件或目录创建软链接 
[root@localhost lianjie2]# ls
file1 file2 hard.txt soft1 soft99.txt soft.txt

cp(复制)

cp(copy)备份

  • cp [选项]… 源文件 目标 相当改名复制 文件夹 文件相当于 改名字另存为
  • cp [选项]... 源文件... 文件夹 多个源文件只能复制到 文件夹 选项: |选项 | 说明 | | ------ | -------------------------------------------------------------------------- | | -f | 覆盖目标同名文件或目录时不进行提醒,直接强制复制 | | -i | 覆盖目标同名文件或目录时提醒用户确认 | | -p | 复制时保持源文件的权限、属主及时间标记等属性不变(但不保留软链接文件) | | -r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 | | -a | 完整保留所有的信息(保留软链接属性) | | -v | 可视化 | | -u | 相当于增备,差异备份(只针对文件夹) | | -b | 当目标文件存在时,先进行备份再覆盖(只保留最近) | | -s | 复制成为符号连结文件 (symbolic link),亦即”快捷方式“档案; 作用为创建新的符号链接文件,指向原符号链接文件,能保证链接文件可以使用 |
zhangsan@localhost ~]$ ll 
#张三用户新建文件 
总用量 0 
-rw-rw-r--. 1 zhangsan zhangsan 0 8月  29 11:17 zhansan 

[root@localhost zhangsan]# cp -a zhansan /data/   //保留所有权限,包括软链接文件
[root@localhost data]# ll 
总用量 0
-rw-r--r--. 1 root     root     0 8月  29 11:06 1
-rw-rw-r--. 1 zhangsan zhangsan 0 8月  29 11:17 zhansan 

[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/f111.txt   //复制多个文件时目标如果不是目录,系统会提示无法复制。
cp: 目标"/opt/f111.txt" 不是目录 

mv(移动)

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

移动 或者改名 选项:

选项说明
-f强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-i交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-n如果目标文件已经存在,则不会覆盖移动,而且不询问用户
-v显示文件或目录的移动过程
[root@localhost test]# mv bbb aaa //将目录bbb改名为aaa
[root@localhost test]# mv aaa /tmp   //将目录aaa移动到/tmp目录下


[root@localhost test]# mv 1.txt 2.txt file01.txt //源文件为多个时目标必须是目录,否则系统会报错 
mv: 目标"file02" 不是目录

[root@localhost test]# mv 1.txt 2.txt /tmp/aaa   //将多个文件移动到/tmp/aaa目录下
[root@localhost test]# ls /tmp/aaa 
1.txt  2.txt

[root@localhost test]# which mv           //查看mv命令,发现mv=mv -i 
alias mv='mv -i'       
          /usr/bin/mv 
[root@localhost test]# ls /tmp/aaa 
1.txt  2.txt [root@localhost test]# mv 1.txt /tmp/aaa   //当目标文件存在时,提示是否覆盖 
mv:是否覆盖"/tmp/aaa/1.txt"

rm(删除)

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

选项说明
-f删除前不作询问,直接强制删除
-i删除前逐一询问确认
-r递归删除,将指定目录下的所有文件和子目录一并删除
[root@localhost ~]# rm -rf /     //操作十分危险,系统拒绝执行 
rm: 在"/" 进行递归操作十分危险 
rm: 使用 --no-preserve-root 选项跳过安全模式
[root@localhost ~]# rm -rf /data/*     //删除/data/目录下所有文件 
[root@localhost ~]# rm -rf /data /*   //注意和上一步之间的区别误操作,这样操作等于删根

-i:默认选项,系统在删除前会询问是否删除
[root@localhost test]# rm 1.txt
rm:是否删除普通空文件 "1.txt"

-f:强制删除,删除前不做询问
[root@localhost test]# ls 
1.txt  2.txt
[root@localhost test]# rm -f 1.txt   //删除前不做询问,强制删除 
[root@localhost test]# ls
2.txt

-r:删除目录时要加-r,将指定目录下的所有文件和子目录一并删除
[root@localhost test]# ls 
2.txt aaa 
[root如何删除特殊的文件localhost ceshi]# rm aaa       //删除目录时如果不加-r,系统会报错
rm: 无法删除"aaa": 是一个目录 
[root@localhost test]# rm -rf aaa   //删除目录时要加-r [root@localhost test]# ls
2.txt

删除特殊的文件,需要加路径或--
[root@localhost test]# touch ./-f   //创建-开头的文件
[root@localhost test]# ls 
2.txt -f 
[root@localhost test]# rm -f -f   //无法删除,文件还是存在 
[root@localhost test]# ls 
2.txt  -f 
[root@localhost test]# rm -f ./-f   //需要加路径,加路径后可删除 
[root@localhost test]# ls
2.txt 
[root@localhost test]# touch ./-f
[root@localhost test]# rm -- -f     //加--也可删除
rm:是否删除普通空文件 "-f"?y

友情提示:使用前请三思哦!