3.文件常见操作命令
linux下文件类型
查看文件 ls /dev/zero -l(字符) ls /dev/sda -l(硬盘)
硬盘文件 开头b
字符文件 开头c
d 目录文件directory蓝色
| 符号链接文件link 浅蓝色l开头 链接文件 快捷方式
b 块设备文件 block c 字符文件
p 管道文件pipe 黄色的 一进一出 实现a---b 通讯 单向传输 first input first output 先进先出
s 套接字文件 socket 紫色的 两个程序的双向通讯 a-b 双向
- 普通文件
蓝色的d 文件夹
更改查看目录 pwd
pwd 显示在哪个目录下 (定位)
cd /etc/sysconfig/network-scripts/ 根描述 绝对路径 已经在子目录下 直接写后面的
cd network-scripts (相对路径)
cd .. 当前目录的上及目录 cd ../../..(上级上级)
cd - 刚刚离开的目录的(再敲循环)原因 存在 echo $OLDPWD 里面了(改了就对应改的文件)
在此/date/kubernetes/a.txt 想要访问 /date/kubernetes/yaml/b.txt 可以用相对路径 cd yaml/b.txt
cd 回到自己的家目录 cd ~dai (涉及个人权限)
mkdir 建立文件夹 mv 搬家移动
/opt/kubernetes/a.txt /opt/kubernetes/yaml/b.txt
绝对与相对路径
总结 :
绝对路径:以/开头
相对路径:不以/开头 适用于项目内部的文件相互访问(看情况)
basename /etc/sysconfig/network-scripts 只取文件名 基名 不取前面的目录名 network-scripts
dirname /etc/sysconfig/network-scripts 只取目录名 不取文件名/etc/sysconfig
basename http://nginx.org/download/nginx-1.18.0.tar.gz 显示 nginx-1.18.0.tar.gz
wget http://nginx.org/download/nginx-1.18.0.tar.gz 下载
tar xf nginx-1.18.0.tar.gz 解压缩(nginx-1.18.0.tar.gz ) 此程序
tar xf 'basename http://nginx.org/download/nginx-1.18.0.tar.gz ' basename先执行取基础名然后在解压缩
echo 打印出来
列出目录内容(字目录)ls (可看一部分属性)
-a 包含隐藏文件
-l 显示额外的信息
-R 目录递归
-ld 目录和符号链接信息
-1 文件分行显示
-S 按从大到小排序
-t 按mtime排序
-u 配合-t选项,显示并按atime从新到旧排序
-U 按目录存放顺序显示
-X 按文件后缀排序
-F 对不同类型文件显示时附加不同的符号:*/=>@|
-C 文件多时,以多列的方式显示文件,默认是一列(标准输出)
别名ll
[root@centos8 ~]#alias ll
alias ll='ls -l --color=auto'
[root@ubuntu ~]#alias ll
alias ll='ls -alF'
文件属性(元数据)metadate 时间 大小 等等
stat 可以看到文件时间的所有属性
文件内容
文件时间:
内容修改时间 mtime(modifytime)
读(访问)时间 atime(access time) 更新条件:读时间超过一天以上 修改时间新于读时间
属性(元数据)更改时间 ctime (change time)
owner 所有者
chown 修改所有者
ll --time=mtime /../.. 看时间
检查文件的类型 file
linux的文件后缀不影响执行,但是影响判断文件类型。
file [options]
file /date 显示 /date:directory(文件夹)
file /dev/zero 显示 /dev/sda: block special (8/0) (块设备)
文件通配符模式 wildcard pattern
通配符采有特定的符号,表示特定的含义,此特符号称为元 meta 字符
* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
[10:32:27 dai@Rocky8> [ ~]$touch f{a..z}.txt
[10:33:54 dai@Rocky8> [ ~]$ls
Desktop fa.txt fd.txt fg.txt fj.txt fm.txt fp.txt fs.txt fv.txt fy.txt Pictures Videos
Documents fb.txt fe.txt fh.txt fk.txt fn.txt fq.txt ft.txt fw.txt fz.txt Public
Downloads fc.txt ff.txt fi.txt fl.txt fo.txt fr.txt fu.txt fx.txt Music Templates
[10:33:57 dai@Rocky8> [ ~]$touch f{a..z}.log
[10:34:51 dai@Rocky8> [ ~]$ls
Desktop fa.txt fc.txt fe.txt fg.txt fi.txt fk.txt fm.txt fo.txt fq.txt fs.txt fu.txt fw.txt fy.txt Pictures
Documents fb.log fd.log ff.log fh.log fj.log fl.log fn.log fp.log fr.log ft.log fv.log fx.log fz.log Public
Downloads fb.txt fd.txt ff.txt fh.txt fj.txt fl.txt fn.txt fp.txt fr.txt ft.txt fv.txt fx.txt fz.txt Templates
fa.log fc.log fe.log fg.log fi.log fk.log fm.log fo.log fq.log fs.log fu.log fw.log fy.log Music Videos
[10:34:54 dai@Rocky8> [ ~]$ls *log
fa.log fc.log fe.log fg.log fi.log fk.log fm.log fo.log fq.log fs.log fu.log fw.log fy.log
fb.log fd.log ff.log fh.log fj.log fl.log fn.log fp.log fr.log ft.log fv.log fx.log fz.log
? 匹配任何单个字符,一个汉字也算一个字符
~ 当前用户家目录
~mage 用户mage家目录
[0-9] 匹配数字范围
[a-z] 一个字母
[A-Z] 一个字母
[10:36:58 dai@Rocky8> [ ~]$touch f{A..Z}.txt
[10:46:09 dai@Rocky8> [ ~]$touch f{a..z}.txt
[10:46:24 dai@Rocky8> [ ~]$ls
a fa.log fc.log fe.log fg.log fi.log fk.log fm.log fo.log fq.log fs.log fu.log fw.log fy.log Music
ab fa.txt fc.txt fe.txt fg.txt fi.txt fk.txt fm.txt fo.txt fq.txt fs.txt fu.txt fw.txt fy.txt Pictures
abc fA.txt fC.txt fE.txt fG.txt fI.txt fK.txt fM.txt fO.txt fQ.txt fS.txt fU.txt fW.txt fY.txt Public
Desktop fb.log fd.log ff.log fh.log fj.log fl.log fn.log fp.log fr.log ft.log fv.log fx.log fz.log Templates
Documents fb.txt fd.txt ff.txt fh.txt fj.txt fl.txt fn.txt fp.txt fr.txt ft.txt fv.txt fx.txt fz.txt Videos
Downloads fB.txt fD.txt fF.txt fH.txt fJ.txt fL.txt fN.txt fP.txt fR.txt fT.txt fV.txt fX.txt fZ.txt
[10:46:28 dai@Rocky8> [ ~]$ls f[c-f].txt
fc.txt fC.txt fd.txt fD.txt fe.txt fE.txt ff.txt[10:47:31 dai@Rocky8> [ ~]$ls f[A-C].txt
fA.txt fb.txt fB.txt fc.txt fC.txt
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z表示小写
[:upper:]: 任意大写字母,表示 A-Z表示大写
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
排除 取反
[^a-z] 匹配列表中的所有字符以外的字符
. 和 ~+ 当前工作目录
~- 前一个工作目录
汉子算一个字符 空间会占用一个字节
英文一个字母占一个字节
创建空文件和刷新时间 touch
复制文件和目录 cp(copy) 生产中要备份
i 如果目标已存在,覆盖前提示是否覆盖
-n 不覆盖,注意两者顺序
-r, -R 递归复制目录及内部的所有内容
-a 归档,相当于-dR --preserv=all,常用于备份功能(原封不动,时间都没有不变)
-d --no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST
-b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份
--backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多
个版本
etc配置文件很重要
移动和重命名文件 mv
mv 命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化
利用 rename 可以批量修改文件名
格式:
rename [options] <expression> <replacement> <file>...
rename .txt.txt.bak *.txt
删除命令rm (ReMove) -rf (Rubbish Files)
\rm [option]
-i 交互式
-f 强制删除 rm -f
-r 递归
--no-preserve-root 删除/
ls-----list(列出)
目录操作 tree
tree /date
#mkdir dir1/dir2/dir3 -p 建文件夹dir1.dir2.dir3
rmdir(删除文件夹 里面不能有数据有数据删除不了基本上不用)
unalias取消别名
文件元数据和节点表结构
meta(元数据)存在inode(index node)
inode number 节点号 和分区的大小有关
sda1 sdb2
lsblk 查看硬盘 df -i 查看节点最大值 ,硬盘越大,节点号越多
IUsed已使用 ,IFree还剩多少
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
df -h 看硬盘空间显示常规
#cat /dev/null > /boot/zero (清空一个文件内容)先执行这个,在执行#rm -f /boot/zero 删除大文件的方式 内存释放
已经删除了#rm -f /boot/zero 但是程序还在运行空见不释放,可以#lsof |grep delete ,有个程序编号000在占用,关掉这个程序 #kill 000
总结:删除的垃圾文件的方法
1.#cat /dev/null > /path/bigfile
2.#rm -f /path/bigfile
I/O重定向 redirect
I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标
标准错误 ,标准输入,标准输出
ll /dev/std(starded) 显示 stderr stdin stdout (3中设备)对应上面
[dai@Rocky8 ~]$ ll /dev/std*
lrwxrwxrwx. 1 root root 15 Mar 31 13:25 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Mar 31 13:25 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Mar 31 13:25 /dev/stdout -> /proc/self/fd/1
文件描述符 上面链接结尾的2.0.1 ,一个程打开文件时,会给每个打开的文件分配唯一的数字
0 stdin 标准输入 ,1 stdout标准输出 ,2 stderr 标准错误
#tail -f /var/log/messages( 打开一个文件),#pidof tail 显示1759(运行找到tail程序的编号)找到程序的编号,#ls /proc/ 会显示带数字的文件夹, 在#ls /proc/1759/fd 显示0 1 2 3 4 。在#ls /proc/1759/fd -l 会显示固定的0 1 2 ,和现在文件夹中的3 4(由当前窗口来实现 tty )
重定向 (正常情况下是默认的窗口输出,现在要在另外一个窗口输出)改变方向
#hostname回车,显示主机名(rocky8.magedu.org) 现在所显示的窗口,需要在#tty回车显示 /dev/pts/1这个窗口下显示,做法:#hostname 1> /dev/pts/1 (标准输出的重定向),会在/dev/pts/1这个窗口下显示(rocky8.magedu.org),#whoami > /dev/pts/1(标准输入重定向的另一种写法),#whoami > /data/a.out(重定向a.out文件到文件夹data中),#cat /data/a.out(显示文件在root中)
# cat /dev/null > /path/bigfile^c(清理大型文件设备)(通用命令),#ll /dev/null(显示属性)是一个c开头的字符相当于太空中的黑洞 # > a.txt(也可以直接清空文件)>是bash shell 中的命令,其他的csh shell不支持。
#ls > a.txt (把这个文件的执行结果先放在文件里面),#cat /a.txt(显示这个文件里的内容:a.txt,xxx.cfg),#hostname >> a.txt(>> 把主机名追加到a.txt里面)#cat a.txt ( 显示一下)。
>只定向标准输出 ,要想重定向标准错误#ls /dataa 2> err.txt (加2)
现在有个文件,把标准输出和标注错误都放在这个文件里面怎么弄?:既有对的又有错的 #ls /data/error(error为错误文件夹),回车显示这个文件夹里正确和错误的信息。如果要让他们输出不同的文件#ls /data /error >stdout.txt 2> stderr.txt, #cat stdout.txt(显示正确结果/data:a.out)#cat stderr.txt(放的是错误结果 cannot.access....)>的前后顺序没有关系。
把对的错的放一个文件?:#ls /data /error 2> all.txt > all.txt , #cat all.txt (显示正确的错误的都放一个文件里了 /data : a.out app2.0 error': no such file or directory),另一种写法:#ls /data/xxx &>all.txt(里面会既显示对的又显示错的输出),最早是这样写的:#ls /data /xxxx > all.txt 2>&1(前后次序不能呢换),#ls /opt /xx 2> all.txt 1>&2(也可以实现)
#rm -f a.txt (删除,不显示任何 标注输出)
bc (标准输入,可以输入2+3+4+xxx)标准输入重定向
#echo 2+3 > bc.txt(把echo 2+3这个公式重定向到bc.txt这个文件夹里面),#cat bc.txt ,换行显示2+3(有内容了),#bc < bc.txt,换行显示5( “<” 标准输入的重定向),
#seq -s + 10(生成1+2+3+4+5+6+7+8+9+10公式),#seq -s + 10 > bc.txt;bc < bc,txt(显示结果55),bc.txt为临时中间文件。
#cat,(回车可以输入hello,再回车显示打印hello)(既支持标准输出也支持标注输入),#cat < bc.txt ,或者#cat bc.txt。
多行重定向 #cat > a.txt <<EOF(EOF,多行重定向的开始符,成对出现 end of file文件夹结束),>newline1 >newline2 >newline3 >EOF。
高级重定向写法(cmd <<< "string")含义是把标准输入的命令传给string
简化上面bc的那个案例:#bc <<<'seq -s + 10',回车算出值55( ‘ ’ 先执行里面的命令,再把结果重定向给bc),
高级重定向写法(cmd1 < <(cmd2))把cmd2的输出写入一个临时文件,再传个cmd1 ,作为第一个命令的标准输入。
#bc <<<'seq -s + 10',可以换成#bc < <(seq -s + 10),功能是一样的。(seq -s + 10)会形成一个临时文件。
管道:(使用符号“|”表示)用来连接多个命令
cmd1 | cmd2 | cmd3 | ...
功能说明:1.将命令1的stdpout发送给命令2的stdin,命令2的sdtout发送到命令3的stdin 2.所有命令会在当前shell进程的子shell进程中执行
3.组合多种工具的功能
注意:STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现,格式如下
命令1 2>&1 | 命令2
命令1 |& 命令2
#echo 1+2 |bc (echo 输出1+2的结果传给了bc)
#mail -s hello wang 回车 how are you . EOT结束(mail给wang发邮件)mail支持标注输入, 群发邮寄#vim mail.txt 回车编辑邮件内容hello,welcome to madedu! ,wq退出, #cat mail.txt(显示 hello,welcome to madedu!),#cat mail.txt | mail -s hello wang, #mail wang(查看邮件输入1)
实现互联网邮件
Rocky yum -y install postfix systemctl enable --now postfix yum -y install mailx(装上三个软件) QQ申请SMTP功能,开通授权码 yum -y install mailx nano /etc/mail.rc 或者#vim /etc/mail.rc 调到最后复制 .... set from=xxxx@qq.com set smtp=smtp.qq.com set smtp-auth-user=xxx@qq.com set smtp-auth-password=23234232323
#cat mail.txt | mail -s hi xxxxxxx@qq.com 回车
#yum -y install xxx(装软件) ubuntu 装软件用#apt install xxx
硬(hard)链接 一个文件取不同的名字 放在不同的目录下 节点编号一样仅支持文件,不支持文件夹 创建的文件和原文件不在一个设备里是不成功的 (跨分区不可以,名字有可能一样但是文件不是一个。创建后的文件和原文件是平行关系 无主次之分。)
ln 创建硬软链接
ln f1.txt f1.txt.link 创建一个f1的硬链接名 ,生成一个 f1.txt.link文件 ll-i 节点编号都是133 (会有两个文件 一个没有 .link。实际上是一个文件。
rm -f fl.txt 删除这个文件就少了一个名字 实际上的链接还在。 rm -f fl.txt.link 这个删除了就没有了。节点编号也没有了。
链接数=一个文件多了几个名字。
符号 symbolic (或软 soft)链接
ln -s aa aaa 对现有的aa文件创建软链接叫aaa 显示颜色蓝色是7个重要文件的一种,是个链接文件 aaa ->aa
ln -s /data/aa /opt/aaaa 创建data下aa文件到opt下的aaaa文件。显示/opt/aaaa ->/data/aa(这两个访问效果一样的)。vim /opt/aaaa 打开文件写入 WELCOME TO MAGE 。cat /opt/aaaa ll /opt/aaaa cat /data/aa 显示的是一样的WELCOME TO MAGE。
#mkdir app (建一个目录叫“是在当前显示窗口下及 date” app),#touch app/web (建一个叫web的app),#tree /data/ (查看data下的树状图/date/app/web), #mv app/ app1.0 (重命名app为app1.0版本),#mkdir app2.0 (创建app2.0版本),#ll (显示蓝色app1.0 app2.0),#ln -s app1.0 app (创建一个软链接app去访问app1.0版本) ,#cd (回退到data),#ll /data/app(用户访问显示app及app1.0版本的程序 /data/app -> app1.0),后续软件升到app2.0怎么做? #cd /data ,#ls,显示app app1.0 app2.0, #rm -f app(删除app的软链接),#ln -s app2.0 app(重新创建软链接app来指向app2.0版本),#ll 显示app ->app2.0,#ll /data/app (访问app路径及为app2.0版本)/data/app -> app2.0 。访问的目录不变但是软件升级到2.0版本了。
上面app2.0有bug 要回到app1.0版本做法: #rm -f /data/app (直接删掉这个app软链接),#ln -s app1.0 app(重新创建软链接app访问app1.0),#ll 显示 app -> app1.0,降级。回退。
软链接删除的时候不要删除内容,#rm -f app (删除软链接)不要这样rm -rf app/
创建软链接的路径问题: 放到其他分区的文件名下。#ln -s /data/app1.0 /opt/app(使用绝对路径)或者#ln -s ../app1.0 /opt/app( 相对路径,要相对opt的路径 要回到data下),#rm -f app1.0(删除app1.0版本)软链接也失效。硬链接都是名字没有依赖关系,软链接可以跨设备,分区的。
硬链接和软链接区别总结
-
本质: 硬链接:本质是同一个文件 软链接:本质不是同一个文件
-
跨设备 硬链接:不支持 软链接:支持
-
inode 硬链接:相同 软链接:不同
-
链接数 硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少 软链接:创建或删除,链接数不会变化
-
文件夹 硬链接:不支持 软链接:支持
-
相对路径 硬链接:原始文件相对路径是相对于当前工作目录 软链接:原始文件的相对路径是相对于链接文件的相对路径
-
删除源文件 硬链接:只是链接数减一,但链接文件的访问不受影响 软链接:链接文件将无法访问
-
文件类型 硬链接:和源文件相同 软链接:链接文件,和源文件无关
-
文件大小 硬链接: 和源文件相同 软链接: 源文件的路径的长度
转换tr:实现转换 压缩 删除
#tr 123 abc 回车2423424 回车会显示b4bc4b4(2423424里面有123就会转化为abc)
#tr a-z A-Z (把小写字母转换成大写字母)
#tr -d abc (把里面有abc的删除其他的保留)
#tr -dc abc 输入完了Ctrl+d结束 (除了abc以外的都删除)
#tr -s adc (发现延续的abc压缩成一个 aaabbbccc abc)
tee 命令:利用 tee 命令可以重定向到多个目标,经常配合管道符一起使用
命令1 | tee [-a ] 文件名 | 命令2
以上可以把命令1的STDOUT保存在文件中,做为命令2的输入
-a 追加
功能:
保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出
#tee out.txt (屏幕显示输入的的hell,同时out.txt 文件里也会有hello)