巩固基础

简介:

知识回顾

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

一、内部命令与外部命令

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

   type COMMAND 判断一个命令的类型

wKiom1mFJEChpCKJAAAtFjS3ToM827.jpg

wKioL1mFJEDAXjkkAABAUhHhWcw682.jpg

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

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

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

wKiom1mFJEGjaRVsAAA9pL2COf0102.jpg   

   enable COMMAND 启动一个内部命令

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

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

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

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

wKiom1mFJEHSlXaoAABXDTCY72k920.jpg   

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

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

wKioL1mFJEHDZCKhAAA01cqjEHg778.jpg

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

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

        -d name 删除一个hash

  -r 清空所有的hash

二、man

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

   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    一般就足够了。j_0057.gif

三、时间戳

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

atime 表示访问时间

mtime 表示文件数据修改时间

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

 stat filename  可以查看文件时间戳

wKiom1mFLwODr5JHAAC79YWFeiw829.jpg

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

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

     -a 仅更新atime,ctime   

     -m 仅更新mtime, ctime 

        touch filename 会更新全部时间戳

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

wKiom1mFL8zBFInrAABe-97Yxxs324.jpg

四、链接:

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

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

硬链接不能跨分区。 

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

wKiom1mFNGOgnPwjAACPeDjaQHs127.jpg

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

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

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

wKiom1mFNojAaF-5AACiBL0w-hY462.jpg

 软链接原文件和链接文件拥有不同的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目录的所属组

wKioL1mFPSLSfnzmAAERHDx22_8013.jpg

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

   作用方式:chmod o+t directory

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

 j_0002.gif




















本文转自lc0108131451CTO博客,原文链接:http://blog.51cto.com/13150617/1953780 ,如需转载请自行联系原作者



相关文章
基础联系-4
基础联系-4
64 1
|
网络架构 Windows
基础修炼
基础修炼
62 0
基础练习-2
基础练习-2
83 0
|
3月前
|
程序员 编译器 C++
【C++基础】初识C++
这篇文章是C++入门教程,介绍了第一个C++程序的编写、注释的使用、变量和常量的定义、C++关键字以及标识符命名规则。
25 4
|
编译器 C语言 C++
C++程序基础
本文介绍了C++中的数据类型,输入输出和函数知识。
47 0
|
7月前
|
存储
数字电子技术基础
数字电子技术基础
72 0
|
IDE C# 开发工具
C#基础总结(1)
C#基础总结(1)
81 0
|
存储 安全 JavaScript
安全基础总结
安全基础总结 @Date 2016.06.02 XSS(跨站脚本攻击) 反射型 : 非持久化 交互性 欺骗用户自己去点击链接才能触发XSS代码 存储型 : 持久化 代码是存储在服务器中(文本框,留言里输入Script脚本) 盗窃用户Coo...
1128 0
|
JavaScript 前端开发 索引