首页 > 代码库 > 巩固基础

巩固基础

知识回顾

   最近学习了脚本,但是在学习以及练习过程中,我发现许多以前学过的知识都模糊了,甚至都忘了技术分享,在用到的时候必须翻笔记才能回忆起来。有感而发,所以写了这篇博文,来巩固一下先前所学的知识,加深记忆。技术分享

一、内部命令与外部命令

  在创建完脚本并执行过之后,把脚本文件移动到别的目录再执行就会报错,这是因为在执行过一次之后该路径会被缓存到hash表,当你下次执行时会在hash表里边找,但是hash表里记录的是第一次执行时的路径,因此在移动了文件之后它就找不到了,便报错。这个点我当时也没想起来,因此在这里复习一下。技术分享

   type COMMAND 判断一个命令的类型

技术分享

技术分享

   enable -n COMMAND 禁用一个内部命令

   enable -n 显示所有被禁用的内部命令

        enable -n |wc -l 统计被禁用的内部命令数量

技术分享   

   enable COMMAND 启动一个内部命令

   enable 显示所有启用的内部命令

        enable |wc -l 统计启用的内部命令数量

   enable -a 显示所有的内部命令

        enable -a |wc -l 统计所有的内部命令数量

技术分享   

    hash 显示当前被hash的外部命令

  -l 显示当前被hash的外部命令,包含别名

技术分享

  由上图可见,当使用hash查看没有使用过的外部命令时,hash表中没有该记录,当使用过时,该命令就会缓存到hash表,在下次使用时直接在hash表里找,不在其路径中找,这样能加快速度。而且hash -l 显示的内容比hash要详细

  -p /.../.... name  手动增加一个hash缓存

        -d name 删除一个hash

  -r 清空所有的hash

二、man

   man显示的帮助信息要比help多得多,因此在学习linux时要时刻借助man来帮助自己了解如何正确使用命令。在这里就不再详细示例了,就大致说一下里面包含的内容。总之在遇到自己模糊的命令时,man一下它就知道怎么用了,但是文档都是英文的,像博主英文这么差的人还得词典翻译一下。技术分享

   man 章节:   1、用户命令

             2、系统调用

             3、C库调用

             4、设备文件即特殊文件

             5、配置文件格式

             6、游戏

             7、杂项

             8、管理类的命令

             9、Linux内核API

    man 帮助段落说明:

             N       名称及简要说明

             SYNOPSIS  用法格式说明:

                  []   可选内容 

                  <>   必选内容 

                  a|b  二选一 

                  {}   分组

                  ...  同一内容可出现多次

             SESCRIPTION  详细说明

             OPTIONS  选项说明

             EXAMPLES 示例

             FILES 相关文件

             AUTHOR 作者

             COPYRIGHT 版本信息

             REPORYING BUGS    bug信息

             SEE ALSO 其他帮助参考

      其实info也可以查看帮助信息,但是内容实在太多,还得翻半天,不实用,用man    一般就足够了。技术分享

三、时间戳

   在bash文件属性测试中,file1 -nt file2 是判断file1是否新于file2,新旧基于mtime,然而博主已经快忘了时间戳用法了,希望写出来能调取体内的洪荒之力。技术分享

atime 表示访问时间

mtime 表示文件数据修改时间

ctime 表示文件元数据修改时间,修改文件一定会触发ctime的更改(包含文件权限,大小,时间等等)

 stat filename  可以查看文件时间戳

技术分享

 touch filename 当文件不存在时,则创建一个空文件,名为filename

       当文件已存在时,则更新期时间戳

    -a 仅更新atime,ctime   

    -m 仅更新mtime, ctime 

        touch filename 会更新全部时间戳

 例  touch -a filename  对比可发现atime和ctime更改了,而mtime没有变化

技术分享

四、链接:

硬链接本质:一个文件,多个名字,即inode都一样。修改其中一个文件,所有都变;删除源之后,不影响。

删除一个文件时,就会减少其硬链接数,当减少到0,就释放inode号。

硬链接不能跨分区。 

    ln filename linkfilename 创建硬链接。目录不能创建硬链接。

技术分享

     在创建链接前,test1显示的链接数目为1,创建链接后test1和test2的链接数目都变为2,test1test2的inode号是一样的,test1test2显示的文件大小也是一样。可见进行了ln命令的操作结果:test1test2是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件test1的硬链接,就是为test1的文件索引节点在当前目录上建立一个新指针。

软链接:新建一个inode号,数据区存的路径,所以可以跨分区。删除源之后,链接就不管用了,删除链接不影响源。

     ln -s filename [linkname] 创建软链接

技术分享

 软链接原文件和链接文件拥有不同的inode号,表明他们是两个不同的文件,而硬链接原文件和链接文件公用一个inode号,说明他们是同一个文件;在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;在链接数目上也是不一样的,软链接的链接数目不会增加;文件大小也是不一样的,硬链接文件显示的大小是跟原文件是一样的,而软链接显示的大小与原文件就不同了。总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

五、特殊权限:

suid  当对一个可执行的二进制文件作用了SUID权限之后,任何拥有执行该文件权限的人,    在执行的过程时都临时拥有该文件所属人的权限。

   suid是作用在工具上的,工具本身所属人是谁,用户使用工具时就以谁的身份。        例如:chmod u+s cat 

   表示给cat加上suid,则任何使用cat命令的用户都以cat所属人的身份执行

   原本有x权限,权限位则显示小写s,原本没有则显示大写S

sgid  当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,    在执行的过程时都临时拥有该文件所属组的权限。

   当对一个目录作用了SGID权限之后,任何对该目录有wx权限的用户在该目录下创建      的文件及目录的所属组均为该目录的所属组。

   例如: chmod g+s /app

   在root下给/app目录加上sgid权限,则其他用户在该目录下创建的文件所属组都        为/app目录的所属组

技术分享

sticky 当对一个目录作用了sticky之后(只限制组用户,目录的owner不受影响),该目录    下的文件仅其所属人才能删除。

   作用方式:chmod o+t directory

   以上是我对以前一些知识的回顾,在重新复习之后又有了新的理解和掌握,希望大家都能时常巩固知识,直到把知识融汇贯通。如有其他知识或意见需要交流,欢迎留言。

 技术分享


巩固基础