【Linux基础命令:通配符、alias、du、mkdir、touch、硬链接、软链接、cp

208 阅读11分钟

文件管理

一、Linux基础命令

1. 通配符

去匹配文件名(包括目录)

符号效果
匹配一个字符 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

示例:

1)*的使用。

[root@localhost data]# ls -a *   //不显示隐藏文件
1
[root@localhost data]# ls -a     //显示隐藏文件
.  ..  1
[root@localhost data]# ls *      //*不包括.开头的
ls: 无法访问*: 没有那个文件或目录
[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

2)使用{a..z}和{A..Z},[a-z]和[A-Z]。大小写字母的区别比较。

[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

3)使用{1..10}和[0-9],数字的匹配。

[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

4)显示隐藏文件

[root@localhost data]# ls /etc/.*   //显示隐藏文件也包括..的上层目录

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

2. 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命令>外部命令。
  • 实际项目中需先查看其他人有没有定义别名命令。

3. du (disk usage) 统计目录或文件所占磁盘空间大小的命令

命令格式:du 空格 [选项] 空格 [文件或目录… ]

选项说明
-a统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录(包括隐藏文件)
-h以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果
-s只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小
--max-depth=n最大显示到第n层 (-d n)
--exclude排除某些文件后,显示剩余大小
-x仅当前文件夹
示例:
[root@localhost ~]# du --max-depth=1   //统计当前目录大小,只显示到第二级目录
3800    ./.cache
4   ./.dbus
108 ./.config
0   ./桌面
0   ./下载
0   ./模板
0   ./公共 
0   ./文档
0   ./音乐
0   ./图片
0   ./视频
312 ./.local
4272    .

注意:

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

4. mkdir (make direction)创建目录或文件夹

命令格式:mkdir 空格 [选项] 空格 目录位置及名称…

  • -p 递归创建多层目录,当上级目录不存在时,会按目录层级自动创建目录。
  • -v 显示建立过程。
[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
03月  14:00:53  28日  2024年  CST  星期四

5. touch 创建文件

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 Inode:9381005     硬链接: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 Inode:9381005     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2024-03-28 14:10:24.305128380 +0800
最近更改:2024-03-28 14:10:24.305128380 +0800
最近改动:2024-03-28 14:10:24.305128380 +0800
创建时间:-

[root@localhost data]# touch `date`  //创建含有当天日期、时间的文件
[root@localhost data]# ls
03月  14:10:24  28日  2024年  CST  星期四

6. ln 创建链接文件

6.1 硬链接

硬链接(hard link, 也称链接 )就是一个文件的一个或多个文件名, 把文件名和计算机文件系统使用的节点号链接起来。可以将它理解为一个 “指向原始文件 inode 的指针”, 系统不为它分配独立的 inode 和 文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。

硬链接引用的是文件在文件系统中的物理索引(也称为inode)。当移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。

注意事项

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

6.2 软链接

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

注意事项

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

硬链接和软链接对比

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

6.3 如何创建硬链接和软链接

ln命令格式

  • 创建硬链接文件: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

7. cp (copy)复制文件

cp命令格式

  • 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" 不是目录