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

[经验分享] 《Unix & Linux 大学教程》

[复制链接]

尚未签到

发表于 2016-3-11 12:58:35 | 显示全部楼层 |阅读模式
  
学习笔记,内容基础,适合初学者。

  
阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)
《Unix & Linux 大学教程》 - 第一、二章 学习笔记     Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记     Unix连接 & 开始使用Unix

《Unix & Linux 大学教程》 - 第五、六章 学习笔记     GUI:图形用户界面 & Unix工作环境

《Unix & Linux 大学教程》 - 第七、八章 学习笔记     Unix键盘使用 & 能够立即使用的程序

《Unix & Linux 大学教程》 - 第九、十章 学习笔记     文档资料:Unix手册与Info & 命令语法

《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记     shell & 使用shell:变量和选项

《Unix & Linux 大学教程》 - 第十三章 学习笔记     使用shell:命令和定制

《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记       使用shell:初始化文件

《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记  过滤器:简介和基本操作

《Unix & Linux 大学教程》 - 第十八章 学习笔记     过滤器:统计和格式化
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记     过滤器:选取、排序、组合及变换
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记   过滤器:选取、排序、组合及变换 正则表达式
  《Unix & Linux 大学教程》 - 第二十一章 学习笔记   显示文件
  《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记   vi文本编辑器(一)
  《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记   vi文本编辑器   (二)
  《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记   vi文本编辑器   (三)
《Unix & Linux 大学教程》 - 第二十三章 学习笔记   Unix文件系统
  《Unix & Linux 大学教程》 - 第二十四章 学习笔记   目录操作
  《Unix & Linux 大学教程》 - 第二十五章 学习笔记   文件操作
  《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记   进程和作业控制
  《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记   进程和作业控制
  《Unix & Linux 大学教程》 - 附录F  时区与24小时制时间
  
  
  
  第二十五章:文件操作
  自动创建文件的情况:
  1.很多程序,当需要时会自动创建
  2.将输出重定向到文件
  3.复制文件
  4.touch
  
  touch
  语法:
  touch  [-acm ] [-t  timefile ...
  作用:不改变文件的情况下,改变文件修改时间和访问时间
  time 是时间和日期,格式为[[YY]YY]MMDDhhmm[.ss]
  默认情况下,touch将修改时间和访问时间设置为当前的时间和日期
  
  
  ll
  total 28
  drwxrwxrwx  2 su1216 su1216 4096 2012-09-14 20:42 ./
  drwxr-xr-x 17 su1216 su1216 4096 2012-10-25 16:10 ../
  -rwxrwxrwx  1 su1216 su1216   20 2012-09-14 16:44 age*
  -rwxrwxrwx  1 su1216 su1216   12 2012-09-14 16:43 name*
  
  touch *;ll
  total 28
  drwxrwxrwx  2 su1216 su1216 4096 2012-09-14 20:42 ./
  drwxr-xr-x 17 su1216 su1216 4096 2012-10-25 16:10 ../
  -rwxrwxrwx  1 su1216 su1216   20 2012-10-29 11:36 age*
  -rwxrwxrwx  1 su1216 su1216   12 2012-10-29 11:36 name*
  
  
  -m :只改变修改时间
  -a :只改变访问时间
  -t :设置具体时间和日期
  -c :不创建新文件
  
  touch -m -t 201212210000 age;ll age(把age文件修改时间改为世界末日那天……)
  -rwxrwxrwx 1 su1216 su1216 20 2012-12-21 00:00 age*
  
  
  touch -c file1 file2(如果文件不存在,则不创建)
  
  
  文件命名
  1.最长为255个字符(最大长度由文件系统设置)
  2.可以包含除了 / (斜线)和 null 字符之外的任何字符
  最好不要使用特殊字符
  最好不要使用test作为文件名,shell拥有一个名为test的内置命令
  大写字母留给重要的文件
  
  
  
  复制文件
  cp
  语法:
  cp  [-ip ] file1 file2
  -i(interactive,交互) :cp在替换已有文件时进行询问
  -p(preserve,保持) :目标文件和源文件拥有相同的
  
  cp  [ -ip ]  file... directory
  作用:将文件复制到指定目录
  
  
  cp  -r  [ -ip ]   directory1 ... directory2
  作用:将目录复制到指定目录
  
  
  
  移动文件
  mv
  语法:
  mv  [-iffile... directory
  -i(interactive,交互) :cp在替换已有文件时进行询问
  -f(force,强制) :与-i相反,强制替换
  
  
  重命名文件或目录
  
  mv
  语法:
  mv  [ -if ]  oldname newname
  mv  directory1 directory2 (如果directory2不存在,则重命名directory1为directory2;如果directory2存在,则合并directory1到directory2中)
  
  
  
  删除文件
  rm
  语法:
  rm  [-firfile ...
  -i(interactive,交互) :删除前进行询问
  -f(force,强制) :与-i相反,忽略文件权限和-i选项(某些系统上)
  -r(recursive,递归) :删除整个目录树
  ************************************
  注意:
  rm -fr $HOME/$FILE
  如果上面两个变量都没有定义,那么该命令则变为
  rm -rf /
  ************************************
  
  
  
  文件权限
普通文件
读取文件
写入文件
执行执行文件
目录
读取目录
创建、移动、复制或删除目录条目
执行搜索目录
  每个文件有三组权限:一组针对属主;一组针对组;一组针对其他用户
  
  setuid用来允许普通用户表示运行从root拥有的程序中挑选的程序。这意味着无论哪个用户标识运行程序,它都以root特权运行
  
  
  
  Unix维护文件权限的方式:id、groups
  属主 :创建文件的用户标识就是文件
  属主是可以改变文件权限的唯一用户标识,第一组文件权限描述属主如何访问文件
  每个用户都属于一个组,第二组权限应用于和属主位于同一组的所有其他用户标识
  第三组权限应用于系统上的其他人以及剩下的每个人单独分配读、写和执行权限
  
  
  查看用户所在组
  id(显示当前用户信息)
  uid=1000(su1216) gid=1000(su1216) groups=1000(su1216),4(adm),20(dialout),24(cdrom),46(plugdev),111(lpadmin),119(admin),122(sambashare)
  groups  username
  
  
  显示文件权限
  ls -l
  -rwxrwxrwx 1 su1216 su1216  2547 2012-10-29 16:36 setup.py
  上面的信息分别对应为:
  文件权限   链接数量   用户标识   属主的组   大小   日期   上次修改时间   文件名称
  其中最左边十个字符分为4个部分
  第一个代表类型(文件夹为d,文件为-)
  第2-4个表示文件属主的权限
  第5-7个表示组的权限
  第8-10个表示系统上所有其他用户标识的权限
  
  文件模式:
  4=读权限
  2=写权限
  1=执行权限
  0=没有权限
执行 分量
---0+0+00
--0+0+11
--0+2+02
-0+1+23
--4+0+04
-4+0+15
-4+2+06
4+2+17
  
  
  
  改变文件权限
  chmod
  语法:
  chmod  mode file...
  只有属主和超级用户才可以改变文件的文件模式
  
  
  为新文件指定权限的方式
  umask用户掩码(user mask)
  语法:
  umask  [mode ]
  
  Unix创建新文件时,将根据文件的类型为文件指定下述几种模式:
  666:不可执行的普通文件
  777:可执行的普通文件
  777:目录
  在这模式基础上,Unix再减去用户掩码(user mask)值。
  除非有有很好的理由,否则应该将 umask 077 放入登录文件中
  
  
  
  清空文件内容
  shred
  语法:
  shred -fvuz  [file ...]
  -v(verbose,详细) :处理过程中显示处理消息
  -z :结束任务时将文件全部填充为0
  -u :处理之后删除文件
  f(force,强制) :忽略受限文件
  作用:多次覆盖硬盘上已有的数据,使得难以恢复
  
  
  
  链接
  Unix创建文件时会做两件事情
  1.Unix在存储设备上保留一块空间用来存储数据
  2.Unix创建一个称为 索引节点(index node) i节点(i-node) 的结构,来存放文件的基本信息
  
  i节点内容
  stat
  语法:
  stat filename
  作用:查看文件的i节点内容

  • 以字节为单位的文件长度
  • 包含文件的设备名称
  • 属主的用户标识
  • 组id
  • 文件权限
  • 上一次修改时间
  • 上一次访问时间
  • i节点上次修改时间
  • 指向该文件的链接数
  • 文件的类型(普通、目录、特殊、符号链接……)
  • 分配给该文件的块数
  (各个文件系统之间i节点的准确内容可能有所不同)
  文件系统将所有的i节点存放在一个大表中,称为 i节点表(mode table)
  i节点表中,每个i节点由所谓的 索引号(index number) i节点号(i-number) 表示
  
  目录不包含文件本身,只包含文件名称和其i节点号
  文件名和i节点之间的连接称为链接
  链接将文件名和文件本身连接起来 (所以i节点不包含文件名,一个i节点可以由不只一个文件名引用)
  
  
  多重链接
  ln
  语法:
  ln  file newname
  file 是一个已有普通文件的名称
  newname 是希望赋予链接的名称
  
  语法:
  ln  file... directory
  作用:为多个普通文件建立新链接,并将新链接放入指定目录
  ln *txt linux_learned/
  
  
  注意:这种方式不能为目录创建链接;不能为不同文件系统中的文件创建链接
  此链接称为硬链接(hard link),简称为链接
  
  
  基本文件命令的工作方式
  1.创建文件,创建目录(mkdir)
  Unix留出相应的存储空间并创建i节点,然后Unix在适当的目录中通过使用指定的文件名或目录以及新i节点号置入一个新条目
  2.复制文件(cp)
  复制已有文件时(覆盖),Unix用源文件的内容替换已有内容,但是i节点号并不进行修改。
  复制不存在的文件时(复制),Unix首先用新文件自己的i节点号创建一个全新的文件,然后将旧文件的内容复制到新文件中。旧文件名对应于旧的i节点号,新文件名对应新的i节点号
  3.重命名文件或移动文件(mv)
  Unix改变文件名,或者移动目录条目,或者两者都进行,但是保持相同的i节点号
  4.创建链接(ln)
  Unix使用指定的文件名创建一个新的目录条目,并指向原始文件的i节点号
  5.移除链接(rm、rmdir)
  Unix通过移除目录条目,消除文件名和i节点号之间的连接,如果文件已经没有链接,Unix会删除该文件
  
  
  
  符号链接(symbol link、symlink) (软链接,soft link)
  语法:
Usage: ln -s(--symbolic) TARGET LINK_NAME   (1st form)
  or:  ln -s(--symbolic)... TARGET                  (2nd form)
  or:  ln -s(--symbolic)... TARGET... DIRECTORY     (3rd form)
  or:  ln -s(--symbolic)... -t DIRECTORY TARGET...  (4th form)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
When creating hard links, each TARGET must exist.  Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.
(我觉得还是help中讲解的比较清楚)
 
  
  ls -l显示的链接数量为硬链接数量,没有办法显示软链接数量
  如果某一文件存在符号链接,那么删除这个文件时符号链接不会被删除,如果试图使用该链接,则会显示错误信息
  
  
  
  ls -l /bin/sh
  lrwxrwxrwx 1 root root 4 2012-02-02 11:30 /bin/sh -> dash
该文件为符号链接,文件大小为4字节,仅能容下实际文件的路径名(实际文件的路径名只有4个字符长)
  
  查看文件本身长列表则必须指定文件实际名称
  
  ls -l /bin/dash 
  -rwxr-xr-x 1 root root 105704 2010-06-25 04:02 /bin/dash
  
  
  
  --------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- -----------
  目录使用符号链接
  当目录使用符号链接时,cd和pwd命令可以有两种作用:
  1.命令可以将符号链接视为一个实体,即实际目录的一个同义词,更像普通文件的硬链接
  2.链接只不过是真实目录的一个跳板
  
  cd、pwd
  -L(logical,逻辑) :将符号链接视为真实的目录
  -P(physical,物理) :用真实目录替换符号链接
  
  
  
  查找与Unix命令相关的文件
  whereis
  语法:
  whereis  [-bmscommand ...
  -b(binary,二进制) :只显示可执行文件的路径名
  -m :只显示联机手册中章节
  -s :只显示源文件路径
  
  
  
  通过搜索数据库查看文件
  locate
  语法:
  locate  [-bcirSpattern ...
  -r :启用正则
  -i :忽略大小写
  -c(count,总计) :显示匹配文件的总数
  -b :匹配路径名的最后一部分,基名
  -S(statistics,统计) :显示系统上locate数据库信息
  注意:locate是在一个特殊的数据库中查找(该数据库中包含所有可公共访问的文件的路径名),该数据库自动维护并定期更新
  当有新文件创建时,它并不会立即出现在数据库中,直至下一次更新
  
  
  通过搜索目树查找文件
  find
  语法:
  find  path... test... action...
  1.路径
  2.检测(书上翻译为测试,感觉不通顺阿!):对遇到的每个文件,find应用指定的检测条件
  3.动作:搜索完成后,find对结果的每个文件执行的操作
  
  下面为重要的检测选项
文件名
-name pattern包含pattern 的文件名
-iname pattern包含pattern 的文件名(不区分大小写)
文件特征
-type [dfbcpl]文件类型:d=目录,f=文件,b=块设备,c=字符设备,p=命名管道,l=符号链接
-perm mode设置为mode 的文件权限
-user userid属主为userid
-group groupid组为groupid
-size [-+]n [cbkMG]大小为n [字节、块、k字节、M字节、G字节]
-empty空文件(大小=0)
访问时间、修改时间
-amin [-+]nn 分钟前访问
-anewer filefile 文件之后访问
-atime [-+]nn 天前访问
-cmin [-+]nn 分钟之前状态改变
-cnewer filefile 文件之后状态改变
-ctime [-+]nn 天前状态改变
-mmin[-+]nn 分钟之前修改
-mtime [-+]nn 天之前修改
-newer filefile 文件之后修改
  在检测条件前使用“!”运算符可以对检测求反
  下面是对比结果
  
  $ find -name "*.txt"
  ./address.txt
  ./email Notes.txt
  ./so.txt
  ./test.txt
  $ find '!' -name "*.txt"
  .
  ./txt2
  ./name
  ./txt1
  ./todo
  ./age
  $ ls
  address.txt  age  email Notes.txt  name  so.txt  test.txt  todo  txt1  txt2
 
  
  查找中可能会遇到没有权限的清空,下面命令可不显示此信息
  find . -type d -name bin -print 2> /dev/null
  
  
  
  下面为重要的动作选项
动作
-print将路径名写入到标准输出
-fprint file同-print:将输出写入到file
-ls显示长目录列表
-fls file同-ls:将输出写入到file
-delete删除文件
-exec command  {} \;执行command ,{}指示匹配的文件名
-ok command  {} \;同-exec,但是在运行command 之前进行确认
  -exec command {} \;
  -exec将搜索输出发送给相应程序
  command可以是任何命令,包括选项和参数
  {}表示find查找到的路径名
  为了表明路径的末尾必须以;(分号)结束命令(这里必须被引用)
  
  
  find也支持正则,但是针对文件的全路径
  手册中给出了一个例子
  
  to match a file named `./fubar3',  you  can  use the  regular  expression `.*bar.' or `.*b.*3', but not `f.*r3'
  
  相当于默认加上了^(脱字符)和$
  $ find -regex './a.*'
  ./address.txt
  ./age
注意:在find中使用正则,圆括号和竖线都需要转义
  
  处理查找到的文件
  xargs
  语法:
  xargs  [-prt ] [-i  string ] [command  [argment ...]]
  command 是命令名称
  string 是占位符
  argment 是从标准输入读取的参数
  注意:默认情况下,xargs运行指定命令至少一次
  
  find -type f | xargs echo
  ./txt2 ./name ./address.txt ./email Notes.txt ./so.txt ./txt1 ./todo ./test.txt ./age
(结果显示到了一行中)
 
  下面是书中的一个例子
  find -type f | xargs echo | wc -w(用来统计当前目录下有多少文件)
  其实我不是很明白
  首先,为什么要用echo,直接使用find -type f | wc -w不是更好
  其次,这条命令并不能准确的统计出文件个数,如果你文件名中有空格,那么统计就会出错
  我觉得使用下面的命令比较合适
  find -type f | wc -l
  
  -i(insert,插入) :允许使用{}做占位符,占位符在命令运行之前被参数取代
  使用 -i 的时候,不要把其他选项和i连起来,否则会作为占位符处理
  
  find -type f | xargs -i echo {} {}
  ./txt2 ./txt2
  ./name ./name
  ./address.txt ./address.txt
  ./email Notes.txt ./email Notes.txt
  ./so.txt ./so.txt
  ./txt1 ./txt1
  ./todo ./todo
  ./test.txt ./test.txt
  ./age ./age
结果居然有换行了,执行 find -type f | xargs -i echo {} 结果也是有换行的
  
  ps:-i已经过时了(我的版本为xargs (GNU findutils) 4.4.2),应该使用-I。下面是手册中的说明
man xargs 写道
-I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead
the separator is the newline character. Implies -x and -L 1.

--replace[=replace-str]
-i[replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified, and for -I{} otherwise. This option is deprecated; use -I instead.
  使用 -I 的时候,占位符不能省略
  
  
  -p :执行新命令的时候进行许可提示
  find -name '[abcde].junk' | xargs -i -p echo {}
  即使是echo,也是会给出提示需要确认的
  
  -t: 显示生成了哪些命令 (如果设置了-p就不用设置此项了,因为提示的时候就会看到)
  
  find -name '[abcde].junk' | xargs -i -t echo {}
  echo ./a.junk 
  ./a.junk
  echo ./e.junk 
  ./e.junk
  echo ./d.junk 
  ./d.junk
  echo ./b.junk 
  ./b.junk
  echo ./c.junk 
  ./c.junk
 
  -r:当xargs没有输入参数时,不运行命令 (默认情况下,xargs运行指定命令至少一次)
  
  $ find -empty | xargs -t ls -l
  ls -l ./b ./a ./d ./e ./c 
  -rw------- 1 su1216 su1216 0 2012-10-31 16:01 ./a
  -rw------- 1 su1216 su1216 0 2012-10-31 16:01 ./b
  -rw------- 1 su1216 su1216 0 2012-10-31 16:01 ./c
  -rw------- 1 su1216 su1216 0 2012-10-31 16:01 ./d
  -rw------- 1 su1216 su1216 0 2012-10-31 16:01 ./e
  (发现有5个空文件)
  
  $ rm [abcde]*
  (删除上面5个空文件)
  
  $ find -empty | xargs ls -l
  total 24
  -rwxrwxrwx 1 su1216 su1216   12 2012-10-29 11:36 name
  -rw-r--r-- 4 su1216 su1216  952 2012-10-12 15:22 so.txt
  -rw-r--r-- 3 su1216 su1216 1979 2012-10-12 14:56 test.txt
  (再次运行,发现还是执行了ls)
  
  $ find -empty | xargs -r ls -l
  (使用-r后,就不再执行)
  
  xargs可以和任何程序一起使用,只要这些程序可以想xargs提供作为参数使用的字符串即可
  
  $ (whoami; date) | xargs
  su1216 2012年 10月 31日 星期三 16:13:57 CST
 
  $ cat < so.txt | xargs > t.txt
  (上面的例子书中不是这么写的,原文是: xargs cat < filenames > master ,此命令无法执行,我也没看懂)
  
  
  
转贴请保留以下链接

本人blog地址

http://su1216.iyunv.com/

http://blog.csdn.net/su1216/

运维网声明 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.iyunv.com/thread-189435-1-1.html 上篇帖子: (转载)Linux下的FTP服务器配置 下篇帖子: 图解Linux下如何搭建C#开发环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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