概述
注意事项
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一些命令的细节注意事项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复