文章目录
- 一、目录与路径
- 1.相对路径与绝对路径
- 2.目录的相关操作与指令:cd、pwd、mkdir、rmdir
- (2)cd (change directory, 变换目录)
- (a)注意cd /usr后,再进入里面的目录需要用cd lib/,当前目录下的./,根目录下的~/
- (3)pwd ( Print Working Directory ,显示目前所在的目录),注意-P选项
- (4)mkdir ( make directory,建立新目录)
- (5)rmdir (删除『空』的目录)
- 3.关于执行文件路径的变量: $PATH:简单介绍下
- 二、文件与目录管理
- 1.文件与目录的检视: ls
- 2.复制、删除与移动: cp, rm, mv
- (1)cp (复制文件或目录,链接档的功能了解下即可)
- (2)rm (移除文件或目录)
- (3)mv (移动文件与目录,或更名):用于改文件或目录名字的更好的指令
- 3.取得路径的文件名与目录名称:basename和dirname
- 三、文件内容查询: 最常使用的显示文件内容的指令可以说是 cat 与 more 及 less 了!
- 1.直接检视文件内容:注意cat和tac
- (1)cat (concatenate):用的很少,但能输出行号
- (2)tac (反向列示)
- (3)nl (添加行号打印)
- 2. 可翻页检视:less比more多好
- (1)more (一页一页翻动)
- (2)less (一页一页翻动)
- 3.资料截取:head 与 tail 都是以『行』为单位来进行数据截取的喔!
- (1)head (取出前面几行)
- (2)tail (取出后面几行)
- 4.非纯文本档: od——查看二进制文件,
- 5.修改文件时间或建置新档: touch
- (2)注意:同条指令同时执行以及指令换行还能执行的写法。至于分号『; 』则代表连续指令的下达啦!
- 四、文件与目录的默认权限与隐藏权限(连文件拥有者都不能修改的属性,强啊!)
- 1.文件/目录的默认权限: umask
- (4)umask重要性:当我们需要新建文件给同群组的使用者共同编辑时
- 2.文件隐藏属性:
- (1)chattr (配置文件的隐藏属性):这个选项配置了,连root都无法操作,+i和+a属性最重要
- (2)lsattr (显示文件隐藏属性)
- 3.文件特殊权限(x会被替换): SUID, SGID, SBIT
- (1)Set UID:只与文件有关
- (2)Set GID:可以针对文件或目录来设定
- (3)Sticky Bit:SBIT,只对目录有效
- (4)SUID/SGID/SBIT 权限设定
- 4.文件类型的查看: file
- 五、指令与文件的搜寻
- 1.脚本文件名的搜寻:就是一些指令
- (1)which (寻找『指令』 ),以及alias的意思
- (2)type:第十章再谈
- 2.文件名的搜索:以文档名为主,但是指令也可以,但是搜出来的东西很多
- (2)whereis (由一些特定的目录中寻找文件文件名):注意范围
- (3)locate / updatedb:最好用
- (4)find:如果你要找的文件是具有特殊属性的,例如 SUID 、 文件拥有者、 文件大小等等, 那么利用 locate是没有办法达成你的搜寻的!
- 小节: find 在寻找数据的时后相当的操硬盘,所以先用whereis和locate
- 六、极重要的复习!权限与指令间的关系
- 七、重点知识回顾
- 八、重要的题目
- (1)两个用户共同支持一个名为project的群组的开发工作
一、目录与路径
1.相对路径与绝对路径
(1)相对路径与绝对路径的定义是:
(2)相对路径与绝对路径的用途是:
相对路径: 有时候用起来很方便,eg:『cd …/cctm 』(感觉像是把前面重复的地址用…/代替了);
绝对路径: 如果是在写程序 (shell scripts) 来管理系统的条件下,务必使用绝对路径的写法。
2.目录的相关操作与指令:cd、pwd、mkdir、rmdir
(1) 底下这些就是比较特殊的目录,得要用力的记下来才行:
eg: Linux 底下,根目录下有没有上层目录(…)存在?
下面是常见的处理目录的指令:
(2)cd (change directory, 变换目录)
(a)注意cd /usr后,再进入里面的目录需要用cd lib/,当前目录下的./,根目录下的~/
(b)
说明:
(i)利用相对路径的写法必须要确认你目前的路径才能正确的去到想要去的目录;
(ii)其实,我们的提示字符,亦即那个 [root@study ~]# 当中,就已经有指出当前目录了,就是这个~,也可以观察别的当前目录;
(iii)如果仅输入 cd 时,代表的就是『cd ~ 』的意思喔
(iiii)我们的 Linux 的默认指令列模式 (bash shell) 具有文件补齐,利用 [tab] 按键
(3)pwd ( Print Working Directory ,显示目前所在的目录),注意-P选项
(4)mkdir ( make directory,建立新目录)
注意:不过鸟哥不建议常用-p 这个选项,因为担心如果妳打错字,那么目录名称就会变的乱七八糟的!
(5)rmdir (删除『空』的目录)
注意:目录最好一层一层的删除!!
3.关于执行文件路径的变量: $PATH:简单介绍下
(1)我们知道查阅文件属性的指令 ls 完整文件名为: /bin/ls(这是绝对路径),那你会不会觉得很奇怪:『为什么我可以在任何地方执行/bin/ls 这个指令呢? 』
为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢?
答案:这是因为环境变量PATH 的帮助所致呀!
举例来说『ls』好了,系统会依照 PATH 的设定去每个 PATH 定义的目录下搜寻文件名为 ls 的可执行文件。
(2)echo 有『显示、印出』的意思;
而 PATH 前面加的 $ 表示后面接的是变量,所以会显示出目前的 PATH !
(3)一些关于环境变量PATH的eg:
总结:
二、文件与目录管理
1.文件与目录的检视: ls
(1)当你只有下达 ls 时,默认显示的只有: 非隐藏档的档名、 以档名进行排序及文件名代表的颜色显示如此而已。
(2)下面的内容去看第五章的内容
查找类似文件名的比较好的方法是:ls -al .bashrc* ;
查找类似目录的比较好的方法是:ls -ld test*;
注意查询目录的指令: ls -l / 与ls -l之间的区别(ls -al /与ls -al的区别);
(3)ls具体的说明和用法(不会用的时候可以参考)
具体的操作:
2.复制、删除与移动: cp, rm, mv
(1)cp (复制文件或目录,链接档的功能了解下即可)
(a)文件->文件
~/表示当前目录,一定要注意[root@study ~]#里面的符号。
文件->文件中的实体链接与符号链接
说明:那个 -l 就是所谓的实体链接(hard link),至于 -s 则是符号链接(symbolic link);
bashrc_slink 是一个『快捷方式』,这个快捷方式会连结到 bashrc 去!
至于 bashrc_hlink 文件与 bashrc 的属性与权限完全一模一样。
(b)文件->目录
说明:
(i)举例来说, 上面的范例二中,由于我是 root 的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了!
(ii)例如密码文件 (/etc/shadow) 以及一些配置文件,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项才行!(c)目录->目录
(d)关于文件->文件的eg:
(e)关于cp指令的总结
(2)rm (移除文件或目录)
(a)移除文件
(b)移除目录
(c)说明:
这是移除的指令(remove);
不过,使用『rm -r 』这个指令之前,请千万注意了,因为该目录或文件『肯定』会被 root 杀掉! 不过,如果你确定该目录不要了,那么使用 rm -r 来循环杀掉是不错的方式!
档名最好不要使用 “-” 号开头, 因为 “-” 后面接的是选项。
(3)mv (移动文件与目录,或更名):用于改文件或目录名字的更好的指令
(a)文件->目录
(b)更改目录名字
(c)补充说明
这是搬移 (move) 的意思!
同样的,你也可以使用 -u ( update )来测试新旧文件,看看是否需要搬移啰!
3.取得路径的文件名与目录名称:basename和dirname
每个文件的完整档名包含了前面的目录与最终的文件名,那么你怎么知道那个是档名?那个是目录名?
三、文件内容查询: 最常使用的显示文件内容的指令可以说是 cat 与 more 及 less 了!
1.直接检视文件内容:注意cat和tac
(1)cat (concatenate):用的很少,但能输出行号
(a)一些eg
(b)补充说明:
cat 主要的功能是将一个文件的内容连续的印出在屏幕上面!
此外,如果是一般的DOS 文件时,就需要特别留意一些奇奇怪怪的符号了。
(2)tac (反向列示)
(3)nl (添加行号打印)
nl 可以将输出的文件内容自动的加上行号!
其预设的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能呢。
2. 可翻页检视:less比more多好
(1)more (一页一页翻动)
(a)eg:
说明:
最后一行会显示出目前显示的百分比, 而且还可以在最后一行输入一些有用的指令喔!
(b)eg:比较有用的是搜寻字符串的功能
若想要在该文件内搜寻 MANPATH 这个字符串时,可以这样做:
(2)less (一页一页翻动)
(a)less 的用法比起 more 又更加的有弹性;
在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件。
你是否会觉得 less 使用的画面与环境与 man page 非常的类似呢?
没错啦!因为 man 这个指令就是呼叫 less 来显示说明文件的内容的!
(b)除此之外,在 less 里头可以拥有更多的『搜寻』功能喔
(c)eg:
3.资料截取:head 与 tail 都是以『行』为单位来进行数据截取的喔!
(1)head (取出前面几行)
若没有加上 -n 这个选项时,默认只显示十行,若只要一行呢?那就加入『head -n 1
filename 』即可!
(2)tail (取出后面几行)
这个 tail 的用法跟 head 的用法差不多类似,只是显示的是后面几行就是了!默认也是显示十行,若要显示非十行,就加 -n number 的选项即可。(3)eg:
4.非纯文本档: od——查看二进制文件,
(1)事实上,由于执行档通常是 binary file ,举例来说,例如想读取/usr/bin/passwd 这个执行档的内容时,咋办?
可以透过 -t c 的选项与参数来将数据内的字符以 ASCII 类型的字符来显示但,对于工程师来说, 这个指令可以将 binary file 的内容作一个大致的输出!!
(2)
其实没有那个C,输出结果一样
(3)eg:
5.修改文件时间或建置新档: touch
(1)每个文件在 linux 底下都会记录以下三个主要的变动时间
(2)注意:同条指令同时执行以及指令换行还能执行的写法。至于分号『; 』则代表连续指令的下达啦!
说明:
在默认的情况下, ls 显示出来的是该文件的 mtime ,也就是这个文件的内容上次被更动
的时间。
文件的时间是很重要的,因为,如果文件的时间误判的话,可能会造成某些程序无法顺利的运作。
(3)至于某些情况下,由于 BIOS 的设定错误,导致系统时间跑到未来时间,并且你又建立了某些文件。 等你将时间改回正确的时间时,该文件不就变成来自未来了?
使用了『ll』这个指令(两个英文 L 的小写),这个指令其实就是『ls -l』。
至于执行的结果当中,我们可以发现数据的内容与属性是被复制过来的,因此文件内容时间(mtime)与原本文件相同。
但是由于这个文件是刚刚被建立的,因此状态(ctime)就变成现在的时间啦!
那如果你想要变更这个文件的时间呢?可以这样做:
说明:
即使我们复制一个文件时,复制所有的属性,但也没有办法复制 ctime 这个属性的。
我们平时看的文件属性中,比较重要的还是属于那个 mtime 啊! 我们关心的常常是这个文件的『内容』是什么时候被更动的说!!
(4)总结:
touch 这个指令最常被使用的情况:
- 建立一个空的文件;
- 将某个文件日期修订为目前 (mtime 与 atime);
四、文件与目录的默认权限与隐藏权限(连文件拥有者都不能修改的属性,强啊!)
我们还可以设定其他的系统隐藏属性, 这部份可使用 chattr 来设定,而以 lsattr 来查看,最重要的属性就是可以设定其不可修改的特性!
让连文件的拥有者都不能进行修改! 这个属性可是相当重要的,尤其是在安全机制上面(security)!
(1)复习一些知识
1.文件/目录的默认权限: umask
(1)你知道当你建立一个新的文件或目录时,他的默认权限会是什么吗?呵呵!那就与 umask 这个玩意儿有关了!
umask 就是指定 『目前用户在建立文件或目录时候的权限默认值』。
(2)查阅的方式有两种: 第一组是特殊权限用的,我们先不要理他,所以先看
后面三组即可。
- 一种可以直接输入 umask ,就可以看到数字型态的权限设定分数,
- 一种则是加入 -S (Symbolic) 这个选项,就会以符号类型的方式来显示出权限了!
(3)在默认权限的属性上,目录与文件是不一样的。
因为umask的存在,导致文件/目录的默认权限的不一样
so,
(4)umask重要性:当我们需要新建文件给同群组的使用者共同编辑时
(a)『如果 umask 订定为 022 ,那新建的数据只有用户自己具有 w 的权限, 同群组的人只有 r 这个可读的权限而已,并无法修改喔! 』
所以,当我们需要新建文件给同群组的使用者共同编辑时,那么 umask 的群组就不能拿掉 2 这个 w的权限! 所以啰, umask 就得要是 002 之类的才可以!
这样新建的文件才能够是 -rw-rw-r-- 的权限模样喔!
说明:
在预设的情况中, root 的 umask 会拿掉比较多的属性, root 的 umask 默认是 022 , 这是基于安全的考虑啦~
至于一般身份使用者,通常他们的 umask 为 002 ,亦即保留同群组的写入权力!
(b)eg:
2.文件隐藏属性:
注意:
chattr 指令只能在Ext2/Ext3/Ext4 的 Linux 传统文件系统上面完整生效,xfs 仅支持部份参数
这两个指令在使用上必须要特别小心,否则会造成很大的困扰。例如:某天你心情好,突然将 /etc/shadow 这个重要的密码记录文件给他设定成为具有 i 的属性,那么过了若干天之后, 你突然要新增使用者,却一直无法新增!别怀疑,赶快去将 i 的属性拿掉吧!
(1)chattr (配置文件的隐藏属性):这个选项配置了,连root都无法操作,+i和+a属性最重要
(2)lsattr (显示文件隐藏属性)
3.文件特殊权限(x会被替换): SUID, SGID, SBIT
- SUID:只与文件有关
- SGID:文件和目录都有关,比较重要
- SBIT:只与目录有关
(1)Set UID:只与文件有关
(a)SUID 的特殊权限和功能如下:
(b)我们的 Linux系统中,所有账号的密码都记录在 /etc/shadow 这个文件里面,这个文件的权限为:『---------- 1 rootroot』,意思是这个文件仅有 root 可读且仅有 root 可以强制写入而已。
但是,你可以使用你自己的账号输入『passwd』这个指令来看看,嘿嘿!一般用户当然可以修改自己的密码了!
why??这就是SUID的功能:
(c)SUID 仅可用在 binary program 上, 不能够用在 shell script 上面!
这是因为 shell script 只是将很多的 binary 执行档叫进来执行而已!所以 SUID 的权限部分,还是得要看 shell script 呼叫进来的程序的设定, 而不是 shell script 本身
(2)Set GID:可以针对文件或目录来设定
(a)当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID 啰!
(b)SGID 对文件有如下的功能:
eg:
(c)SGID 对目录有如下的功能:——对于项目开发很重要
(3)Sticky Bit:SBIT,只对目录有效
(a)对目录的作用是:
(b) 如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己建立的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。
eg:我们的 /tmp 本身的权限是『drwxrwxrwt』, 在这样的权限内容下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录建立者与 root 能够删除自己的目录或文件。
(4)SUID/SGID/SBIT 权限设定
(a)现在你应该已经知道数字型态更改权限的方式为『三个数字』的组合, 那么如果在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限了!
(b)一些eg:
符号表示法
4.文件类型的查看: file
五、指令与文件的搜寻
1.脚本文件名的搜寻:就是一些指令
ls 这个常用的指令放在哪里呢?
(1)which (寻找『指令』 ),以及alias的意思
(a)which 预设是找 PATH 内所规范的目录, 『bash 内建的指令』如history就找不到
(b)
(2)type:第十章再谈
2.文件名的搜索:以文档名为主,但是指令也可以,但是搜出来的东西很多
(1)一般我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦!find操硬盘!
因为 whereis 只找系统中某些特定目录底下的文件而已;
locate则是利用数据库来搜寻文件名;
当然两者就相当的快速。
(2)whereis (由一些特定的目录中寻找文件文件名):注意范围
(a)whereis 主要是针对 /bin /sbin 底下的执行档, 以及 /usr/share/man 底下的 man page 文件
(b)
(3)locate / updatedb:最好用
(a)
(b)
这个 locate 的使用更简单,直接在后面输入『文件的部分名称』后,就能够得到结果。
locate为啥快?
这是因为 locate 寻找的数据是由『已建立的数据库 /var/lib/mlocate/』 里面的数据所搜寻到的。
那么有什么限制呢?
就是因为他是经由数据库来搜寻的,而数据库的建立默认是在每天执行一次 。
更新 locate 数据库的方法非常简单,直接输入『updatedb 』就可以了! updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库文件啰!因为 updatedb 会去搜寻硬盘,所以当你执updatedb 时,可能会等待数分钟的时间喔!
(c)总结
(4)find:如果你要找的文件是具有特殊属性的,例如 SUID 、 文件拥有者、 文件大小等等, 那么利用 locate是没有办法达成你的搜寻的!
(a)find用法如下:
时间参数的说明:
(2)如果你想要找出某个用户在系统底下建立了啥,或者如果你将系统里面某个账号删除了,但是该账号已经在系统内建立很多文件时,就可能会发生无主孤魂的文件存在!
(3)搜索包含某个关键字的文件;搜索怪异的文件;
-perm 这个选项啦!他的重点在找出特殊权限的文件啰!
(4)find的特殊功能:能够进行额外的动作(action)
(5)find 还可以利用通配符来找寻文档名呢!
举例来说,你想要找出 /etc 底下檔名包含 httpd 的文件
小节: find 在寻找数据的时后相当的操硬盘,所以先用whereis和locate
六、极重要的复习!权限与指令间的关系
(1)我们就将这两者结合起来,说明一下什么指令在什么样的权限下才能够运作吧!
(2)eg:
七、重点知识回顾
(1) 绝对路径:『一定由根目录 / 写起』;相对路径:『不由 / 写起,而是由相对当前目录写起』
(2)特殊目录有: ., …, -, ~, ~account 需要注意;
(3)与目录相关的指令有: cd, mkdir, rmdir, pwd 等重要指令;
(4)rmdir 仅能删除空目录,要删除非空目录需使用『rm -r 』指令;
(5)用户能使用的指令是依据 PATH 变量所规定的目录去搜寻的;
(6)ls 可以检视文件的属性,尤其 -d, -a, -l 等选项特别重要!
(7)文件的复制、删除、移动可以分别使用: cp, rm , mv 等指令来操作;
(8)检查文件的内容(读文件)可使用的指令包括有: cat, tac, nl, more, less, head, tail, od 等
(9)cat -n 与 nl 均可显示行号,但默认的情况下,空白行会不会编号并不相同;
(10)touch 的目的在修改文件的时间参数,但亦可用来建立空文件;
(11)一个文件记录的时间参数有三种,分别是 access time(atime), status time (ctime), modification time(mtime), ls默认显示的是 mtime。
(12)除了传统的 rwx 权限之外,在 Ext2/Ext3/Ext4/xfs 文件系统中,还可以使用 chattr 与 lsattr 设定及观察隐藏属性。 常见的包括只能新增数据的 +a 与完全不能更动文件的 +i 属性。
(13)新建文件/目录时,新文件的预设权限使用 umask 来规范。默认目录完全权限为 drwxrwxrwx, 文件则为-rw-rw-rw-。
(14)文件具有 SUID 的特殊权限时,代表当用户执行此一 binary 程序时,在执行过程中用户会暂时具有程序拥有者的权限
(15)目录具有 SGID 的特殊权限时,代表用户在这个目录底下新建的文件之群组都会与该目录的组名相同。
(16)目录具有 SBIT 的特殊权限时,代表在该目录下用户建立的文件只有自己与 root 能够删除!
(17)观察文件的类型可以使用 file 指令来观察;
(18)搜寻指令的完整文件名可用 which 或 type ,这两个指令都是透过 PATH 变量来搜寻文件名;
(19)搜寻文件的完整档名可以使用 whereis 找特定目录或 locate 到数据库去搜寻,而不实际搜寻文件系统;
(20)利用 find 可以加入许多选项来直接查询文件系统,以获得自己想要知道的档名。
八、重要的题目
(1)两个用户共同支持一个名为project的群组的开发工作
接下来是实际的操纵:
(2)其它练习题