我是靠谱客的博主 彩色大船,最近开发中收集的这篇文章主要介绍Linux一些命令的细节注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

注意事项

1.元字符的使用

通配符[a-z]表示的其实不是 小写字母a-z,而是包含大写字母。
其中a-z包含 a,A,b,B·······,y,Y,z 不包含Z
[a-Z]会包含Z

[10:49:31 root@centos8-3-node1 data]#touch f{a..z}.txt
[10:49:50 root@centos8-3-node1 data]#ls
fa.txt  fC.txt  ff.txt  fH.txt  fk.txt  fM.txt  fp.txt  fR.txt  fu.txt  fW.txt  fz.txt
fA.txt  fd.txt  fF.txt  fi.txt  fK.txt  fn.txt  fP.txt  fs.txt  fU.txt  fx.txt  
fb.txt  fD.txt  fg.txt  fI.txt  fl.txt  fN.txt  fq.txt  fS.txt  fv.txt  fX.txt
fB.txt  fe.txt  fG.txt  fj.txt  fL.txt  fo.txt  fQ.txt  ft.txt  fV.txt  fy.txt
fc.txt  fE.txt  fh.txt  fJ.txt  fm.txt  fO.txt  fr.txt  fT.txt  fw.txt  fY.txt
[10:49:52 root@centos8-3-node1 data]#ls f[a..d].txt
fa.txt  fd.txt
[10:50:04 root@centos8-3-node1 data]#ls f[a-d].txt 
fa.txt  fA.txt  fb.txt  fB.txt  fc.txt  fC.txt  fd.txt
[10:50:09 root@centos8-3-node1 data]#ls f[a-D].txt
fa.txt  fA.txt  fb.txt  fB.txt  fc.txt  fC.txt  fd.txt  fD.txt
[10:50:16 root@centos8-3-node1 data]#ls f[A-D].txt
fA.txt  fb.txt  fB.txt  fc.txt  fC.txt  fd.txt  fD.txt
[10:50:27 root@centos8-3-node1 data]#ls f[A-Z].txt
fA.txt  fd.txt  fF.txt  fi.txt  fK.txt  fn.txt  fP.txt  fs.txt  fU.txt  fx.txt  fZ.txt
fb.txt  fD.txt  fg.txt  fI.txt  fl.txt  fN.txt  fq.txt  fS.txt  fv.txt  fX.txt
fB.txt  fe.txt  fG.txt  fj.txt  fL.txt  fo.txt  fQ.txt  ft.txt  fV.txt  fy.txt
fc.txt  fE.txt  fh.txt  fJ.txt  fm.txt  fO.txt  fr.txt  fT.txt  fw.txt  fY.txt
fC.txt  ff.txt  fH.txt  fk.txt  fM.txt  fp.txt  fR.txt  fu.txt  fW.txt  fz.txt
[10:52:06 root@centos8-3-node1 data]#

2.cp 多次的结果

幂等性:多次执行,效果一样。

cp -R /etc/ /data/etc
[root@centos8-3-node1 data]#ls /data/etc/et
etc/        ethertypes  

该复制命令执行两次之后,结果不一样。
第一次文件不存在,创建。
第二次文件已存在,cp到该文件夹下作为子目录。

3.cp最好带-a选项

cp的默认别名是 cp -i,带有提示功能。
cp文件默认只复制文件,文件的元数据信息,属组属主时间戳等都不会携带。
cp -p可以携带上面这些信息。
cp -d可以不复制链接文件指向的源文件,仅复制链接文件。
cp -a 包含-dR -p的功能。
例:

[root@centos8-3-node1 ~]#cp /dev/zero /boot/zero
^C
[root@centos8-3-node1 ~]#ll /boot/zero 
-rw-r--r-- 1 root root 335781888 Mar 27 09:22 /boot/zero
[root@centos8-3-node1 ~]#ll /boot/zero  -h
-rw-r--r-- 1 root root 321M Mar 27 09:22 /boot/zero
[root@centos8-3-node1 ~]#rm -rf /data/zero.bak 
[root@centos8-3-node1 ~]#cp -a /dev/zero /data/zero.bak
[root@centos8-3-node1 ~]#ll /data/zero.bak 
crw-rw-rw- 1 root root 1, 5 Mar 27 09:01 /data/zero.bak
[root@centos8-3-node1 ~]#

4. 删除一些特殊的文件

To remove a file whose name starts with a ‘-’

[root@centos8-3-node1 data]#touch -- -f
[root@centos8-3-node1 data]#ls
-f
[root@centos8-3-node1 data]#rm /data/-f   #带着目录选择文件进行删除
[root@centos8-3-node1 data]#rm -rf -- -f   #带着--进行删除

5.删除其他人正在使用的文件,立即释放空间

一般做法:
rm -rf /boot/bigfile.img #被其他程序再用,不会立即释放空间
lsof |grep delete #找打删除文件被使用的对应PID
kill -9 PID

正确做法,清空,立即释放空间:

/boot/bigfile.img #依赖于SHELL,CSH不支持
cat /dev/null > /boot/bigfile.img #通用

6.软连接时的绝对路径和相对路径

绝对路径:cp复制链接文件,链接文件指向的是一个绝对路径,cp之后的文件可以正常访问

[root@centos8-3-node1 bin]#ll /bin/bash
-rwxr-xr-x. 1 root root 1150704 Jul 22  2020 /bin/bash
[root@centos8-3-node1 bin]#ln -s /bin/bash binbash
[root@centos8-3-node1 bin]#ll binbash 
lrwxrwxrwx 1 root root 9 Mar 27 11:04 binbash -> /bin/bash
[root@centos8-3-node1 bin]#cp -a binbash /data/
[root@centos8-3-node1 bin]#ll /data/binbash 
lrwxrwxrwx 1 root root 9 Mar 27 11:04 /data/binbash -> /bin/bash

相对路径:cp复制链接文件,链接文件指向的是一个相对路径,cp之后的文件不能访问

[root@centos8-3-node1 bin]#ln -s bash binbashbak
[root@centos8-3-node1 bin]#ll binbashbak
lrwxrwxrwx 1 root root 4 Mar 27 11:05 binbashbak -> bash
[root@centos8-3-node1 bin]#cp -a binbashbak /data/
[root@centos8-3-node1 bin]#ll /data/binbashbak 
lrwxrwxrwx 1 root root 4 Mar 27 11:05 /data/binbashbak -> bash
[root@centos8-3-node1 bin]#
[root@centos8-3-node1 data]#./binbash 
[root@centos8-3-node1 data]#./binbashbak
binbash: ./binbashbak: No such file or directory

所以创建链接文件需得使用绝对路径,相对路径会有小问题。

7. 文件能不能删和文件本身权限无关,和文件所在目录的文件夹w权限有关

[root@centos8-3-node1 data]#ll -d dir/
drwxr-xr-x 2 maple maple 19 Mar 29 21:35 dir/
[root@centos8-3-node1 data]#chmod 555 dir/
[root@centos8-3-node1 data]#ll -d dir/
dr-xr-xr-x 2 maple maple 19 Mar 29 21:35 dir/
[root@centos8-3-node1 data]#cd dir/
[root@centos8-3-node1 dir]#ll
total 0
-rw-r--r-- 1 maple maple 0 Mar 29 21:35 a.txt
[root@centos8-3-node1 ~]#su - maple
[maple@centos8-3-node1 data]$cd dir/
[maple@centos8-3-node1 dir]$ll
total 0
-rw-r--r-- 1 maple maple 0 Mar 29 21:35 a.txt
[maple@centos8-3-node1 dir]$rm -rf a.txt 
rm: cannot remove 'a.txt': Permission denied
[maple@centos8-3-node1 dir]$

8.删除软连接目录 带/ 和不带/

为dir目录创建了软连接 dirlinks,
删除 目录软连接需注意

带/是删除该目录下的所有文件.
不带/ 才是删除目录软连接本身.
[root@centos8 data]# mkdir dir
[root@centos8 data]# touch dir/a.txt
[root@centos8 data]# touch dir/b.txt
[root@centos8 data]# ls dir/
a.txt  b.txt
[root@centos8 data]# ln -s /data/dir/ dirlinks
[root@centos8 data]# ll
total 0
drwxr-xr-x. 2 root root 32 Apr  2 20:01 dir
lrwxrwxrwx. 1 root root 10 Apr  2 20:02 dirlinks -> /data/dir/
[root@centos8 data]# ls dirlinks/
a.txt  b.txt
[root@centos8 data]# rm -rf dirlinks
[root@centos8 data]# ll
total 0
drwxr-xr-x. 2 root root 32 Apr  2 20:01 dir
[root@centos8 data]# ls dir/
a.txt  b.txt
[root@centos8 data]# ln -s /data/dir/ dirlinks
[root@centos8 data]# ll
total 0
drwxr-xr-x. 2 root root 32 Apr  2 20:01 dir
lrwxrwxrwx. 1 root root 10 Apr  2 20:02 dirlinks -> /data/dir/
[root@centos8 data]# rm -rf dirlinks/
[root@centos8 data]# ll
total 0
drwxr-xr-x. 2 root root  6 Apr  2 20:02 dir
lrwxrwxrwx. 1 root root 10 Apr  2 20:02 dirlinks -> /data/dir/
[root@centos8 data]# ls dir
[root@centos8 data]# 

9.sed 的模式字符串最好使用单引号括起来。

双引号括起来的模式字符串, !p本意是取反,这里解析成了最近一次用p开头的命令。 主要还是""弱引用和 ''强引用的区别

[root@centos8-3-node1 data]#sed -n "/^#/!p" fstab 
sed -n "/^#/paste a.txt b.txt " fstab 
sed: -e expression #1, char 6: extra characters after command
[root@centos8-3-node1 data]#sed -n '/^#/!p' fstab 

UUID=bf246ecd-cf13-4d99-908a-9e1a4760a5f8 /                       xfs     defaults        0 0
UUID=d07396a3-004a-468b-806a-00bbe11be10c /boot                   ext4    defaults        1 2
UUID=a00e510a-4d04-41b8-90e1-deecdc2988da /data                   xfs     defaults        0 0
UUID=a8f213bd-c09b-4dca-b9bb-84449307c75e none                    swap    defaults        0 0

10. ()和{}的的细节,()会自动启动新的子shell

在主SHELL里面打印当前的bashid是1669,在()里面运行打印命令可以看到ID不一样,说明新生成了一个子shell进程,在另一个窗口使用pstree -p可以看到在1669下面挂了一个36910的子shell。

[root@centos8 data]# echo $BASHPID
1669
[root@centos8 data]# (echo $BASHPID;sleep 100)
36910

在这里插入图片描述
使用{}可以看到没有生成新的子shell执行。

[root@centos8 data]# echo $BASHPID
1669
[root@centos8 data]# { echo $BASHPID;sleep 100; }
1669

在这里插入图片描述

对变量的影响:

[root@centos8 data]# name=Liang; { name=Wang; echo $name; }; echo $name
Wang
Wang
[root@centos8 data]# name=Liang; ( name=Wang; echo $name; ); echo $name   
Wang
Liang
[root@centos8 data]# 

不定时持续更新中····

最后

以上就是彩色大船为你收集整理的Linux一些命令的细节注意事项的全部内容,希望文章能够帮你解决Linux一些命令的细节注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部