3.文件常见操作命令

3.文件常见操作命令

linux下文件类型

查看文件  ls /dev/zero -l(字符)   ls /dev/sda -l(硬盘)

硬盘文件  开头

字符文件  开头

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版本)软链接也失效。硬链接都是名字没有依赖关系,软链接可以跨设备,分区的。

硬链接和软链接区别总结

  1. 本质: 硬链接:本质是同一个文件 软链接:本质不是同一个文件

  2. 跨设备 硬链接:不支持 软链接:支持

  3. inode 硬链接:相同 软链接:不同

  4. 链接数 硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少 软链接:创建或删除,链接数不会变化

  5. 文件夹 硬链接:不支持 软链接:支持

  6. 相对路径 硬链接:原始文件相对路径是相对于当前工作目录 软链接:原始文件的相对路径是相对于链接文件的相对路径

  7. 删除源文件 硬链接:只是链接数减一,但链接文件的访问不受影响 软链接:链接文件将无法访问

  8. 文件类型 硬链接:和源文件相同 软链接:链接文件,和源文件无关

  9. 文件大小 硬链接: 和源文件相同 软链接: 源文件的路径的长度


转换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) 

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值