@WillireamAngel
2018-05-21T02:56:35.000000Z
字数 7991
阅读 2073
Linux
.
代表此层目录 ..
代表上一层目录 -
代表前一个工作目录 ~
代表『目前使用者身份』所在的家目录 ~account
代表account 这个使用者的家目录(account是个帐号名称) cd
:(Change Directory)变换目录 cd ~
=cd
,均返回当前账号家目录 pwd
:(Print Working Directory)显示目前的目录 pwd -P
,查看原始目录 mkdir
:建立一个新的目录
mkdir [-mp]目录名称
mkdir -m 权限号码 目录名称(强制设置权限)
mkdir -p 连续目录(强制建立补全父目录)
rmdir
:删除一个空的目录,非空目录(本目录或上层目录包括其它文件/目录)
rmdir -P
:删除所有非空目录(含父目录)
1.3 关于执行文件路径的变量:PATH`:可显示usr可查询路径,可执行环境变量,对于无权访问的命令,可通过绝对路径执行。
添加$PATH:PATH="$PATH":[文件夹路径]
查询文件路径或粗略查询路径:find
or locate
https://www.cnblogs.com/ccode/p/4033088.html
e.g.
[root@localhost ~]# find / -name httpd.conf
find: ‘/run/user/1000/gvfs’: Permission denied
Linux 复制粘贴快捷键: ctrl +insert(copy);shift + insert(paste)
注意:由于使用PATH查询的目录是经常使用的命令,为了安全起见,不建议将‘.’加入PATH查询目录
- 不同身份使用者预设的PATH不同,预设能够随意执行的指令也不同(如root与dmtsai);
- PATH是可以修改的;
- 使用绝对路径或相对路径直接指定某个指令的档名来执行,会比搜寻PATH来的正确;
- 指令应该要放置到正确的目录下,执行才会比较方便;
- 本目录(.)最好不要放到PATH当中。
2. 文件与目录管理
2.1 查看文件与目录:ls
常用的参数有:-a
,-d
,-l
[root@study ~]# ls [-aAdfFhilnrRSt]档名或目录名称..
[root@study ~]# ls [--color={never,auto,always}]档名或目录名称..
[root@ study ~]# ls [--full-time]档名或目录名称..
2.2 复制、删除与移动:cp、rm、mv(可直接rename
)
2.2.1 cp
常用的参数有:-a
(特性完全复制),-i
,-p
,-r
(可复制目录,文件目录权限可能改变)
[root@study ~]# cp [-adfilprsu]来源档(source)目标档(destination)
[root@study ~]# cp [options] source1 source2 source3 .... directory
直接cp
不加任何参数是复制的是源文件,而不是连接文件的属性
cp
可以将多个文件复制到一个文件夹,最后一个一定是文件夹
2.2.2 rm
[root@study ~]# rm [-fir]档案或目录
参数:-f :就是force 的意思,忽略不存在的档案,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!
\rm
可以忽略alias的指定参数
2.2.3 mv
[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f :force 强制的意思,如果目标档案已经存在,不会询问而直接覆盖;
-i :若目标档案(destination) 已经存在时,就会询问是否覆盖!
-u :若目标档案已经存在,且source 比较新,才会更新(update)
2.3 取得路径的文件名与目录名称
basename
:文件名
dirname
:目录名
3. 文件内容查询
cat 由第一行开始显示档案内容
tac 从最后一行开始显示,可以看出tac 是cat 的倒着写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示档案内容
less 与more 类似,但是比more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
od 以二进位的方式读取档案内容!
3.1 直接查看文件内容
3.1.1 cat:concatenate
cat [-AbEnTv]
参数:
-A :相当于-vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字元$ 显示出来;
-n :列印出行号,连同空白行也会有行号,与-b 的选项不同;
-T :将[tab] 按键以^I 显示出来;
-v :列出一些看不出来的特殊字符。
其中,cat -A
可以显示出空格和TAB的差别
3.1.2 tac(反向列示)
3.1.3 nl(添加行号打印)
[root@study ~]# nl [-bnw]档案
参数:
-b :指定行号指定的方式,主要有两种:
-ba :表示不论是否为空行,也同样列出行号(类似cat -n);
-bt :如果有空行,空的那一行不要列出行号(预设值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加0 ;
-n rz :行号在自己栏位的最右方显示,且加0 ;
-w :行号栏位的占用的字元数。
nl可自动加上行号,相比于cat -n具有更多的显示设计
3.2 可翻页查看
3.2.1 more(一页一页翻动)
快捷键:
空白键(space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
:f :立刻显示出档名以及目前显示的行数;
q :代表立刻离开more ,不再显示该档案内容。
b 或[ctrl]-b :代表往回翻页,不过这动作只对档案有用,对管线无用。
3.2.2 less(一页一页翻动)
快捷键:
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n :重复前一个搜寻(与/ 或? 有关!)
N :反向的重复前一个搜寻(与/ 或? 有关!)
g :前进到这个资料的第一行去;
G :前进到这个资料的最后一行去(注意大小写);
q :离开less 这个程式;
3.3 数据选取
3.3.1 head(取出前面几行)
如果后面100行的资料都不列印,只列印/etc/man_db.conf的前面几行,该如何是好?
[root@study ~]# head -n -100 /etc/man_db.conf
3.3.2 tail(取出后面几行)
[root@study ~]# tail [-n number]档案
参数:
-n :后面接数字,代表显示几行的意思(预设中显示十行)
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
取出第十行到第二十行的操作:
head -n 20 /etc/man_db.conf | tail -n 10
3.4 非纯文本文件:od
od [-t TYPE]档案
参数:
-t :后面可以接各种『类型(TYPE)』的输出,例如:
a :利用预设的字元来输出;
c :使用ASCII 字元来输出
d[size] :利用十进位(decimal)来输出资料,每个整数占用size bytes ;
f[size] :利用浮点数值(floating)来输出资料,每个数占用size bytes ;
o[size] :利用八进位(octal)来输出资料,每个整数占用size bytes ;
x[size] :利用十六进位(hexadecimal)来输出资料,每个整数占用size bytes ;
ASCII码对照实例:
echo password | od -t oCc
echo可以在萤幕上面显示任何资讯,而这个资讯不由萤幕输出,而是传给od去继续处理!就可以得到ASCII code对照
3.5 修改档案时间或建置新档: touch
时间参数:
modification time (mtime):文件内容资料变更
status time (ctime):权限与属性变更
access time (atime):文件内容读取
[root@study ~]# touch [-acdmt]档案
参数:
-a :仅修订access time;
-c :仅修改档案的时间,若该档案不存在则不建立新档案;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用--date="日期或时间"
-m :仅修改mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
备注:ll
=ls -l
touch的主要应用:创建空的文件、修改文件日期为当前日期 (mtime与atime)
4. 文件与目录的默认权限与隐藏权限
修改属性:'chown',修改权限:'chmod'
4.1 文件默认权限:umask
创建文件默认权限为:-rw-rw-rw-
创建目录默认权限为:drwxrwxrwx
[willireamangel@localhost ~]$ umask
0002
'umask'的分数指的是该预设值需要减掉的权限.r、w、x分别是4、2、1分。
4.2 文件隐藏属性chattr,lsattr
4.2.1 chattr(设置文件的隐藏属性)
[root@study ~]# chattr [+-=][ASacdistu]档案或目录名称
选项:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设定一定,且仅有后面接的参数
重要参数:
a :当设定a 之后,这个档案将只能增加资料,而不能删除也不能修改资料,只有root 才能设定这属性
i :i 可以让一个档案『不能被删除、改名、设定连结也无法写入或新增资料!』(即使root也无权限修改),对于系统安全性有相当大的助益!只有root 能设定此属性
4.2.2 lsattr(显示文件隐藏属性)
[root@study ~]# lsattr [-adR]档案或目录
参数:
-a :将隐藏档的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
-R :连同子目录的资料也一并列出来!
利用chattr设置的权限,可以利用lsattr显示出来
4.3 文件特殊权限:SUID、SGID、SBIT
4.3.1 Set UID
功能:
- SUID 权限仅对二进位程式(binary program)有效;
- 执行者对于该程式需要具有x 的可执行权限;
- 本权限仅在执行该程式的过程中有效(run-time);
- 执行者将具有该程式拥有者(owner) 的权限。
可以类比于暂时利用root权限的操作,SUID仅可用在binary program上,不能够用在shell script上面。
4.3.2 Set GID
当s 标志在档案拥有者的x 项目为SUID,s 在群组的x 时则称为Set GID。
功能:
- SGID 可以针对档案或目录来设定
- SGID 对二进位程式有用;
- 程式执行者对于该程式来说,需具备x 的权限;
- 执行者在执行的过程中将会获得该程式群组的支援!
具体功能:
- 使用者若对于此目录具有r 与x 的权限时,该使用者能够进入此目录;
- 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
- 用途:若使用者在此目录下具有w的权限(可以新建档案),则使用者所建立的新档案,该新档案的群组与此目录的群组相同。
4.3.3 Sticky Bit
Sticky Bit, SBIT 目前只针对目录有效,对于档案没有效果
功能:
- 当使用者对于此目录具有w, x 权限,亦即具有写入的权限时;
- 当使用者在该目录下建立档案或目录时,仅有自己与root 才有权力删除该档案。
e.g. 如果将A目录加上了SBIT的权限项目时,则甲只能够针对自己建立的档案或目录进行删除/更名/移动等动作,而无法删除他人的档案。
SUID&SGID&SBIT权限设置:
4 为SUID 2 为SGID 1 为SBIT
符号法:SUID=u+s SGID=g+s SBIT=o+t
SUID 不是用在目录上,而SBIT 不是用在档案上的
4.4 观察档案类型:file
5. 命令与文件的查询
5.1 脚本文件名的查询
which(寻找'执行文件')
[root@study ~]# which [-a] command
参数:
-a :将所有由PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
这个指令是根据『PATH』这个环境变数所规范的路径,去搜寻『执行档』的档名~所以,重点是找出『执行档』
5.2 档案档名的搜寻
5.2.1 whereis(寻找特定文件)
whereis [-bmsu]档案或目录名
参数:
-l :可以列出whereis 会去查询的几个主要目录而已
-b :只找binary 格式的档案
-m :只找在说明档manual 路径下的档案
-s :只找source 来源档案
-u :搜寻不在上述三个项目当中的其他特殊档案
whereis按照数据库里的参数进行文件的查找,所有均以数据库为准
5.2.2 locate
[root@study ~]# locate [-ir] keyword
参数:
-i :忽略大小写的差异;
-c :不输出档名,仅计算找到的档案数量
-l :仅输出几行的意思,例如输出五行则是-l 5
-S :输出locate 所使用的资料库档案的相关资讯,包括该资料库纪录的档案/目录数量等
-r :后面可接正规表示法的显示方式
locate是按照数据库进行查询,有一定更新时延,centos是每天更新一次
updatedb
:根据/etc/updatedb.conf 的设定去搜寻系统硬碟内的档名,并更新/var/lib/mlocate 内的资料库档案;
locate
:依据/var/lib/mlocate 内的资料库记载,找出使用者输入的关键字档名。
5.2.3 find
[root@study ~]# find [PATH] [option] [action]
选项与参数:
- 与时间有关的选项:共有-atime, -ctime 与-mtime ,以-mtime 说明
-mtime n :n 为数字,意义为在n 天之前的『一天之内』被更动过内容的档案;
-mtime +n :列出在n 天之前(不含n 天本身)被更动过内容的档案档名;
-mtime -n :列出在n 天之内(含n 天本身)被更动过内容的档案档名。
-newer file :file 为一个存在的档案,列出比file 还要新的档案档名
- 与使用者或群组名称有关的参数:
-uid n :n 为数字,这个数字是使用者的帐号ID,亦即UID ,这个UID 是记录在
/etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
-gid n :n 为数字,这个数字是群组名称的ID,亦即GID,这个GID 记录在
/etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者帐号名称喔!例如dmtsai
-group name:name 为群组名称喔,例如users ;
-nouser :寻找档案的拥有者不存在/etc/passwd 的人!
-nogroup :寻找档案的拥有群组不存在于/etc/group 的档案!
当你自行安装软体时,很可能该软体的属性当中并没有档案拥有者,
这是可能的!在这个时候,就可以使用-nouser 与-nogroup 搜寻。
- 与档案权限及名称有关的参数:
-name filename:搜寻档案名称为filename 的档案;
-size [+-]SIZE:搜寻比SIZE 还要大(+)或小(-)的档案。这个SIZE 的规格有:
c: 代表byte, k: 代表1024bytes。所以,要找比50KB
还要大的档案,就是『 -size +50k 』
-type TYPE :搜寻档案的类型为TYPE 的,类型主要有:一般正规档案(f), 装置档案(b, c),
目录(d), 连结档(l), socket (s), 及FIFO (p) 等属性。
-perm mode :搜寻档案权限『刚好等于』 mode 的档案,这个mode 为类似chmod
的属性值,举例来说, -rwsr-xr-x 的属性为4755 !
-perm -mode :搜寻档案权限『必须要全部囊括mode 的权限』的档案,举例来说,
我们要搜寻-rwxr--r-- ,亦即0744 的档案,使用-perm -0744,
当一个档案的权限为-rwsr-xr-x ,亦即4755 时,也会被列出来,
因为-rwsr-xr-x 的属性已经囊括了-rwxr--r-- 的属性了。
-perm /mode :搜寻档案权限『包含任一mode 的权限』的档案,举例来说,我们搜寻
-rwxr-xr-x ,亦即-perm /755 时,但一个档案属性为-rw-------
也会被列出来,因为他有-rw.... 的属性存在!
- 额外可进行的动作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
-print :将结果列印到萤幕上,这个动作是预设动作!
权限与指令的关系
一、让使用者能进入某目录成为『可工作目录』的基本权限为何:
可使用的指令:例如cd 等变换工作目录的指令;
目录所需权限:使用者对这个目录至少需要具有x的权限
额外需求:如果使用者想要在这个目录内利用ls 查阅档名,则使用者对此目录还需要r 的权限。
二、使用者在某个目录内读取一个档案的基本权限为何?
可使用的指令:例如本章谈到的cat, more, less等等
目录所需权限:使用者对这个目录至少需要具有x 权限;
档案所需权限:使用者对档案至少需要具有r的权限才行!
三、让使用者可以修改一个档案的基本权限为何?
可使用的指令:例如nano或未来要介绍的vi编辑器等;
目录所需权限:使用者在该档案所在的目录至少要有x 权限;
档案所需权限:使用者对该档案至少要有r, w权限
四、让一个使用者可以建立一个档案的基本权限为何?
目录所需权限:使用者在该目录要具有w,x的权限,重点在w啦!
五、让使用者进入某目录并执行该目录下的某个指令之基本权限为何?
目录所需权限:使用者在该目录至少要有x 的权限;
档案所需权限:使用者在该档案至少需要有x 的权限
范例一:
特殊的地方有{} 以及\; 还有-exec 这个关键字,这些东西的意义为:
{} 代表的是『由find 找到的内容』,如上图所示,find 的结果会被放置到{} 位置中;
-exec 一直到\; 是关键字,代表find 额外动作的开始(-exec) 到结束(\;) ,在这中间的就是find 指令内的额外动作。在本例中就是『 ls -l {} 』啰!因为『 ; 』在bash 环境下是有特殊意义的,因此利用反斜线来跳脱。
范例二:
找出/etc 底下,档案容量大于50K 且档案所属人不是root 的档名,且将权限完整的列出(ls -l);
find /etc -size +50k -a ! -user root -exec ls -ld {} \;
or
find /etc -size +50k -a ! -user root -type f -exec ls -l {} \;
上面两式均可!注意到! ,那个!代表的是反向选择,亦即『不是后面的项目』之意!