设为首页 收藏本站
查看: 785|回复: 0

一起学shell之(八-1)文件处理

[复制链接]
发表于 2018-8-16 13:56:43 | 显示全部楼层 |阅读模式
  
  序:7个小结,列出文件、使用touch更新修改时间、临时性文件的建立与使用、寻找文件、执行命令:xargs、文件系统的空间信息、比较文件。
  
  Ls
  语法:ls [ options ] [ file(s) ]
  用途:列出文件目录的内容。
  主要选项:百度结果,可以man ls查看。
  -------------------------------------------------------------------------------
  -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
  -b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
  -c 输出文件的 i 节点的修改时间,并以此排序。
  -d 将目录象文件一样显示,而不是显示其下的文件。
  -e 输出时间的全部信息,而不是输出简略信息。
  -f -U 对输出的文件不排序。
  -g 无用。
  -i 输出文件的 i 节点的索引信息。
  -k 以 k 字节的形式表示文件的大小。
  -l 列出文件的详细信息。
  -m 横向输出文件名,并以“,”作分格符。
  -n 用数字的 UID,GID 代替名称。
  -o 显示文件的除组信息外的详细信息。
  -p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通
  文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套
  接字(sockets)。
  -q 用?代替不可输出的字符。
  -r 对目录反向排序。
  -s 在每个文件名后输出该文件的大小。
  -t 以时间排序。
  -u 以文件上次被访问的时间排序。
  -x 按列输出,横向排序。
  -A 显示除 “.”和“..”外的所有文件。
  -B 不输出以 “~”结尾的备份文件。
  -C 按列输出,纵向排序。
  -G 输出文件的组的信息。
  -L 列出链接文件名而不是链接到的文件。
  -N 不限制文件长度。
  -Q 把输出的文件名用双引号括起来。
  -R 列出所有子目录下的文件。
  -S 以文件大小排序。
  -X 以文件的扩展名(最后一个 . 后的字符)排序。
  -1 一行只输出一个文件。
  --color=no 不显示彩色文件名
  --help 在标准输出上显示帮助信息。
  --version 在标准输出上输出版本信息并退出。
  -----------------------------------------------------------------
  
  注:Ls结果自适应shell窗口大小。
  -----------------------------------------------
  [root@bogon 9wjcl]# echo \a
  a
  [root@bogon 9wjcl]# echo \\a
  \a
  [root@bogon 9wjcl]# echo \\\a
  \a
  ------------------------------------------------
  # 隐藏文件
  [root@bogon 9wjcl]# touch .1 .2 .3
  [root@bogon 9wjcl]# ls
  one  three  two
  [root@bogon 9wjcl]# ls .*
  .1  .2  .3
  
  .:
  one  three  two
  
  ..:
  51ctodown  8csjb  9wjcl  down  nginx
  [root@bogon 9wjcl]# echo *
  one three two
  [root@bogon 9wjcl]# echo .*
  . .. .1 .2 .3
  [root@bogon 9wjcl]# echo \.*
  . .. .1 .2 .3
  [root@bogon 9wjcl]# echo \\.*
  \.*
  [root@bogon 9wjcl]# ls -d .*
  .  ..  .1  .2  .3
  [root@bogon 9wjcl]# ls -a
  .  ..  .1  .2  .3  one  three  two
  [root@bogon 9wjcl]# ls -l
  总计 0
  -rw-r--r-- 1 root root 0 05-21 17:48 one
  -rw-r--r-- 1 root root 0 05-21 17:48 three
  -rw-r--r-- 1 root root 0 05-21 17:48 two
  ------------------------------------------------------------------------------
  -l 每行上的首字符描述为文件类型:-为一般文件,d为目录,l为符号连接,接下来9个为文件权限,w写x执行r为读。
  第五栏以字节为单位的文件大小,六七八栏为最后修改时间、月、日、年。表示
  ----------------------
  显示完整的时间精准度:
  [root@localhost ~]# ls -l --full-time /bin/kill
  -rwxr-xr-x 1 root root 14864 2009-09-04 03:52:31.000000000 +0800 /bin/kill
  
  使用touch更新修改时间:百度参数
  ----------------------------------------------------------------------------------
  http://www.linuxso.com/command/touch.html
  touch   -   修改文件的时间戳记.
  总览
  touch   [-acm][-r   ref_file(参照文件)|-t   time(时间值)]   file(文件名)...
  被废弃的版本:
  touch   [-acm][ugly_time]   file(文件)...
  GNU版本:
  touch   [-acfm]   [-r   file(参照文件)]   [-t   decimtime(时间值)]   [-d   time(时间值)]   [--time={atime,access,use,mtime,modify}]   [--date=time]   [--reference=file]   [--no-create]   [--help]   [--version]   [--]   file(文件)...
  -------------------------------------------------
  [root@localhost ~]# touch -t 195002030000.00 a
  [root@localhost ~]# ls -l --full-time a
  -rw-r--r-- 1 root root 0 1950-02-03 00:00:00.000000000 +0800 a
  -r复制时间
  [root@localhost ~]# touch -r a b
  [root@localhost ~]# ls -l --full-time b
  -rw-r--r-- 1 root root 0 1950-02-03 00:00:00.000000000 +0800 b
  
  临时性文件的建立与使用:
  /tmp与/var/tmp
  介绍:/tmp会在系统开机时清空,而/var/tmp仍然存在,因为有些文字编辑程序,会将它们的备份文件存放在这里,从而系统毁损后可以用来恢复数据。大部分系统会将/tmp放在常人存型的文件系统里,以便快速访问。安全问题应该设置/tmp的权限。
  
  $$变量:
  Trap
  
  Mktemp:建立安全文件名。
  
  /dev/random与/dev/urandom特殊文件
  
  寻找文件:
  快速寻找文件:
  Locate
  --------------------------
  查看gcc所在地
  [root@localhost ~]# locate gcc
  /lib/libgcc_s-4.1.2-20080825.so.1
  /lib/libgcc_s.so.1
  /lib64/libgcc_s-4.1.2-20080825.so.1
  /lib64/libgcc_s.so.1
  /root/nginx/nginx-0.8.46/auto/cc/gcc
  ................................................
  
  寻找命令存储位置type:
  调味用一个没有路径的命令时,它在文件系统的位置。
  ------------------------------------------------
  [root@localhost ~]# type gcc
  gcc is /usr/bin/gcc
  [root@localhost ~]# type type
  type is a shell builtin
  [root@localhost ~]# type newgcc
  -bash: type: newgcc: not found
  [root@localhost ~]# type gcc
  gcc is /usr/bin/gcc
  [root@localhost ~]# type mypwd
  -bash: type: mypwd: not found
  [root@localhost ~]# type pwd
  pwd is a shell builtin
  [root@localhost ~]# type foobar
  -bash: type: foobar: not found
  -------------------------------------------
  Find查找
  Find与其他UNIX命令最大的不同处在于:要查找的文件与目录,要放在参数列表的第一位,且目录几乎是递归地向下深入(寻找),最终要显示而选定名称的选项或操作放在命令行的最后。
  1、find命令的一般形式为;
  
  find pathname -options [-print -exec -ok ...]
  2、find命令的参数;
  
  pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
  -print: find命令将匹配的文件输出到标准输出。
  -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{   }和\;之间的空格。
  -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
  ---------------------------------------------------------
  -name
  按照文件名查找文件。
  -perm
  按照文件权限来查找文件。
  -prune
  使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
  -user
  按照文件属主来查找文件。
  -group
  按照文件所属的组来查找文件。
  -mtime -n +n
  按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
  -nogroup
  查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
  -nouser
  查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
  -newer file1 ! file2
  查找更改时间比文件file1新但比文件file2旧的文件。
  -type
  查找某一类型的文件,诸如:
  b - 块设备文件。
  d - 目录。
  c - 字符设备文件。
  p - 管道文件。
  l - 符号链接文件。
  f - 普通文件。
  -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
  -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
  -fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
  -mount:在查找文件时不跨越文件系统mount点。
  -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
  -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
  另外,下面三个的区别:
  -amin n
  查找系统中最后N分钟访问的文件
  -atime n
  查找系统中最后n*24小时访问的文件
  -cmin n
  查找系统中最后N分钟被改变文件状态的文件
  -ctime n
  查找系统中最后n*24小时被改变文件状态的文件
  -mmin n
  查找系统中最后N分钟被改变文件数据的文件
  -mtime n
  查找系统中最后n*24小时被改变文件数据的文件
  取自:http://hi.baidu.com/minebin/blog/item/94671a361bffb8d7a3cc2bae.html
  ----------------------------------------------
  Find与ls和shell不同的地方:它没有隐藏文件的概念,点开头的文件名,find也能找到。另find不排序文件名。它以它读到目录的顺序依次显示。随机排序的。最后find处理目录时,它会自动弟宴深入目录结构,寻找在那之下的任何东西,除非你使用-prune选项要求不要这么做。
  
  注:当使用find进行破坏性目的的shell脚本时必须彻底执行调试,例如在命令前插入echo。
  ---------------------------
  查找s开头的文件名和文件
  [root@localhost test]# find s*
  sub
  sub/5
  不要在此目录查找文件
  [root@localhost test]# find -prune
  .
  [root@localhost test]# find . -prune
  .
DSC0000.jpg

  注:
  -size选项必须接上一个数字参数,默认值以512字节为单位的大小 。
  -type选项必须接上一个单词母参数,以标明文件类型。
  -follow选项要求find接上符号连接,你可以用此来找出断掉的连接:
  -links选项要求接上一个整数,如未指定正负号,它会只选择具有指定数量的直接连接的文件,如果为负号、则只寻找连接数小于该数字(绝对值)的文件,如果是正号,则权选择连接数大于该数的文件。 Find . -links +1
  -atime\-ctime\-mtime选项必须接上一个以天为单位的整数,如果未指定正负号,即指确实的几天前,如果为负,则指少于该天数(绝对值)。为正,则大于该天数。一般用find . -mtime -7 查改一周前修改过的文件。
  -------------------------------------------------------
  寻找文件大小块小于10(5120字节)的非空文件
  [root@localhost test]# find . -size +0 -a -size -10
  .
  ./sub
  ./sub/sub3
  寻找空文件,或过去一年都未读取过的文件
  [root@localhost test]# find . -size 0 -o -atime +365
  ./.4
  ./2
  ./.3
  ./sub/5
  ./sub/sub3/6
  ./1
  --------------------------------------------------------
  
  寻找问题文件:-print0
  ---------------------------------------------------------------------------
  将问题字符转换为可见的S与N
  [root@localhost test]# find -print0 | tr ' \n\0' 'SN\n'|sort
  .
  ./1
  ./2
  ./.3
  ./.4
  ./sub
  ./sub/5
  ./sub/sub3
  ./sub/sub3/6
  -------------------------------------------------------------
  煮酒品茶:好像没看出有问题,不知道是没有找到问题文件还是出错了。
  


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552743-1-1.html 上篇帖子: 用shell生成json文件 下篇帖子: 如何解决shell执行派生子shell问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表