Linux学习笔记(第一周),内核的接口被称为系统


目录
  • Linux 笔记
    • 基本概念
      • UNIX 体系结构
      • 内核
      • 登录
      • shell
      • GNU工具
    • 常用指令
      • Linux系统的在线求助:man page info page
      • 编辑器:nano
      • 数据同步写入磁盘:sync
      • 关机命令:shutdown
      • 重新启动,关机:reboot
      • 切换运行等级:init
    • 文件权限
      • 文件权限概念
        • 权限对文件的重要性
        • 权限对目录的重要性
        • 切换用户:su
        • 创建用户:useradd
        • 修改用户密码:passwd
        • 删除用户:userdel
        • 查看当前用户信息:whoami
        • 注销用户:logout
      • 改变文件属性与权限
        • 改变所属群组:chgrp
        • 改变文件拥有者:chown
        • 改变权限:chmod
    • 文件与目录管理
      • 目录与路径
        • 变换目录:cd
        • 显示目前所在目录:pwd
        • 创建新目录:mkdir
        • 删除『空』的目录:rmdir
        • 环境变量 PATH
      • 文件与目录管理
        • 文件与目录检索:ls
      • 复制、删除、移动:cp rm mv
        • 复制:cp
        • 删除:rm
        • 移动文件与目录,或更名:mv
      • 文件内容查询
        • 直接打印
          • 顺序打印文件内容:cat
          • 反向打印文件内容:tac
          • 添加行号打印文件:nl
        • 按页打印
          • 一页一页翻动:moreless
        • 分片读取
          • 读取前几行:head
          • 读取后几行:tail
        • 显示非纯文字文件:od
        • 修改文件时间或建置新档: touch
      • 文件与目录默认权限
        • 创建/修改文件时默认权限:umask
        • 配置文件隐藏属性:chattr
        • 显示文件隐藏属性:lsattr
        • 文件特殊权限:SUID SGID SBIT
        • 配置特殊权限
        • 观察文件的基本类型:file
      • 命令与文件搜寻
        • 命令文件的搜寻:which
        • 特定文件的搜寻:whereis locate find

Linux 笔记

基本概念

UNIX 体系结构

操作系统(内核):一种软件,控制计算机硬件资源,提供程序运行环境。

​ 内核的接口被称为系统调用 (system call, 图中的阴影部分)。公用函数库构建在系统调用接口之上,应用程序既可使用公用函数库,也可使用系统调用。(我们将在 1.11节对系统调用和库函数做更多说明。) shell 是一个特殊的应用程序,为运行其他应用程序提供了一个接口。

内核

内核主要负责4种功能:

1. 系统内存管理
2. 软件程序管理
3. 硬件设备管理
4. 文件系统管理

登录

​ 用户在登录 UNIX 系统时,先键入登录名,然后键入口令。系统在其口令文件(通常是 /etc/passwd 文件)中查看登录名。口令文件中的登录项由 7 个以冒号分隔的字段组成,依次是:登录名、加密口令、数字用户 ID (205)、数字组 ID (105) 、注释字段、起始目录 (/home/sar) 以及shell 程序 (/bin/ksh) 。

sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh

shell

​ shell 是一个命令行解释器,它读取用户输入,然后执行命令。 shell 的用户输入通常来自于终端(交互式 shell) ,有时则来自千文件(称为 shell 脚本)。

​ 系统从口令文件中相应用户登录项的最后一个字段中了解到应该为该登录用户执行哪一个 shell 。

​ 大多数Linux 发行版都包括多种shell,但通常都会指定默认 shell 为 bash shell(Bourne again shell),由GNU 项目开发,被视为用来替代标准的 Unix shell —— Bourne shell 。

GNU工具

​ GNU组织开发了类似UNIX操作系统的标准计算机系统工具,和Linux内核一起构成了完整的GNU/Linux系统。

常用指令

Linux系统的在线求助:man page info page

# 查询date指令的使用手册(manual)
man date 

​ 在输出的第一行可以看到『DATE(1)』,DATE我们知道是命令的名称, (1)代表的是『一般用户可使用的命令』的意思。数字的意思表示如下表:

代号 代表内容
1 使用者在shell环境中可以操作的命令或可运行文件
2 系统核心可呼叫的函数与工具等
3 一些常用的函数(function)与函式库(library),大部分为C的函式库(libc)
4 装置文件的说明,通常在/dev下的文件
5 配置文件或者是某些文件的格式
6 游戏(games)
7 惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明
8 系统管理员可用的管理命令
9 跟kernel有关的文件

​ 在 man指令中,还有很多常用功能如下:

按键 进行工作
空格键 向下翻一页
[Page Down] 向下翻一页
[Page Up] 向上翻一页
[Home] 去到第一页
[End] 去到最后一页
/string 向『下』搜寻 string 这个字符串,如果要搜寻 vbird 的话,就输入 /vbird
?string 向『上』搜寻 string 这个字符串
n, N 利用 / 或 ? 来搜寻字符串时,可以用 n 来继续下一个搜寻 (不论是 / 或 ?) ,可以利用 N 来进行『反向』搜寻。举例来说,我以 /vbird 搜寻 vbird 字符串, 那么可以 n 继续往下查询,用 N 往上查询。若以 ?vbird 向上查询 vbird 字符串, 那我可以用 n 继续『向上』查询,用 N 反向查询。
q 结束这次的 man page

​ 与 man不同,info的说明文件将内容分成多个node,并且每个node都有定位与连结。 在各连结之间还可以具有类似『超链接』的快速按钮,可以透过[tab]键在各个超链接间移动。

# 查询date指令的使用手册(info)
info dir 
按键 进行工作
空格键 向下翻一页
[Page Down] 向下翻一页
[Page Up] 向上翻一页
[tab] 在 node 之间移动,有 node 的地方,通常会以 * 显示。
[Enter] 当光标在 node 上面时,按下 Enter 可以进入该 node 。
b 移动光标到该 info 画面当中的第一个 node 处
e 移动光标到该 info 画面当中的最后一个 node 处
n 前往下一个 node 处
p 前往上一个 node 处
u 向上移动一层
s(/) 在 info page 当中进行搜寻
h 显示求助菜单
? 命令一览表
q 结束这次的 info page

编辑器:nano

# nano 文本编辑器
nano text.txt
  • [ctrl]-G:取得联机帮助(help),很有用的!
  • [ctrl]-X:离开naon软件,若有修改过文件会提示是否需要储存喔!
  • [ctrl]-O:储存文件,若你有权限的话就能够储存文件了;
  • [ctrl]-R:从其他文件读入数据,可以将某个文件的内容贴在本文件中;
  • [ctrl]-W:搜寻字符串,这个也是很有帮助的命令喔!
  • [ctrl]-C:说明目前光标所在处的行数与列数等信息;
  • [ctrl]-_:可以直接输入行号,让光标快速移动到该行;
  • [alt]-Y:校正语法功能开启或关闭(单击开、再单击关)
  • [alt]-M:可以支持鼠标来移动光标的功能

数据同步写入磁盘:sync

# 将内存中尚未被升级的数据写入硬盘中
sync

关机命令:shutdown

# 关机
shutdown [-t 秒] [-arkhncfF] 时间 [警告信息] 
选项与参数: 
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思 
-k     : 不要真的关机,只是发送警告信息出去! 
-r     : 在将系统的服务停掉之后就重新启动(常用) 
-h     : 将系统的服务停掉后,立即关机。 (常用) 
-n     : 不经过 init 程序,直接以 shutdown 的功能来关机 
-f     : 关机并启动之后,强制略过 fsck 的磁盘检查 
-F     : 系统重新启动之后,强制进行 fsck 的磁盘检查 
-c     : 取消已经在进行的 shutdown 命令内容。 
时间   : 这是一定要加入的参数!指定系统关机的时间!时间的范例底下会说明。 

# 示例:告诉大家,这部机器会在十分钟后关机!并且会显示在目前登陆者的屏幕前方! 
shutdown -h 10 'I will shutdown after 10 mins' 
# 立刻关机
shutdown -h now

重新启动,关机:reboot

# 重启
reboot
# 不理会目前系统状态,硬件关机
halt
# 直接关机
poweroff

切换运行等级:init

# 直接切换关机
init 0
# 纯文本模式
init 3
# 含有图形接口模式
init 5
# 重新启动
init 6

文件权限

文件权限概念

​ 在Linux里面,任何一个文件都具有『User, Group及Others』三种身份的个别权限,可以用下图表示:

​ 若王大毛是user,二毛三毛是group,张小猪是others。

​ 若我们想要查看某一目录下所有Linux相关文件的属性,可以使用如下命令:

# 选项『-al』则表示列出所有的文件详细的权限与属性
ls -al

​ 查询的结果如下:

​ 这七个字段表示的意思如下:

​ 其中第一个字段表示的是权限,权限一共通过10个字符表示,各部分表示的含义如下:

  • 第一个字符代表这个文件是『目录、文件或链接文件等等』:

    • 当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
    • 当为[ - ]则是文件,例如上表档名为『install.log』那一行;
    • 若是[ l ]则表示为连结档(link file);
    • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
  • 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

​ 第二栏表示有多少文件名连结到此节点(i-node):

​ 每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node啰!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去就是了。

权限对文件的重要性

​ 文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:

  • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x (execute):该文件具有可以被系统执行的权限。

权限对目录的重要性

  • r (read contents in directory):表示具有读取目录结构列表的权限,可以查询该目录下的文件名数据,可以利用 ls 这个指令将该目录的内容列表显示出来!
  • w (modify contents of directory):对于目录来说,可写入权限表示具有异动该目录结构列表的权限,包括以下权限:
    • 建立新的文件与目录;
    • 删除已经存在的文件与目录(不论该文件的权限为何!)
    • 将已存在的文件或目录进行更名;
    • 搬移该目录内的文件、目录位置。
  • x (access directory):目录的x代表的是用户能否进入该目录成为工作目录。

切换用户:su

# 切换用户
su - user

创建用户:useradd

# 创建用户名为aaa的用户
sudo useradd -m aaa
# -m 表示自动建立用户的登入目录

修改用户密码:passwd

# 更新用户aaa的密码
sudo passwd aaa

删除用户:userdel

# 删除用户aaa
sudo uesrdel -r aaa
# -r 表示同时删除主目录里该用户的文件

查看当前用户信息:whoami

# 查看当前用户信息
whoami

注销用户:logout

# 注销当前用户
logout
exit

改变文件属性与权限

改变所属群组:chgrp

# 改变所属群组(change group)
chgrp [-R] dirname/filename
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。

​ 我们使用指令更改所属群组的结果如下:

改变文件拥有者:chown

# 改变所属群组(change group)
chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:组名 文件或目录
选项与参数:
-R : 进行递归(recursive)的持续变更,进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更。

​ 使用chown更改的效果如下:

改变权限:chmod

​ 刚刚提到Linux文件权限字符为:『-rwxrwxrwx』,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

r:4 w:2 x:1

​ 每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:『-rwxrwx---』分数则是:

owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0

​ 所以我们设定权限的变更,只要计算出权限数字作为参数输入就好。变更权限的指令 chmod 语法如下:

# 改变文件权限(change mode)
chmod [-R] xyz 文件或目录
选项与参数:
xyz : 刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

​ 使用效果如下:

​ 除了上述办法外,还可以使用下面的方法设置:

# 设置user为rwx,group和others为rx
chmod  u=rwx,go=rx  .bashrc
# 为所有用户增加写权限
chmod  a+w  .bashrc
# 为所有用户取消执行权限
chmod  a-x  .bashrc

​ 设定的指令规则如下表格:

chmod u g o a +(加入) -(除去) =(设定) r w x 文件或目录

文件与目录管理

目录与路径

变换目录:cd

# 切换目录(Change Directory)
cd [相对路径或绝对路径]
# 切换home
cd ~
# 切换vbird使用者的home目录
cd ~vbird
# 不加任何路径,表示切换home目录
cd
# 切换目前的上一级目录
cd ..
# 切换回到刚刚的目录
cd -
# 切换绝对路径
cd /var/spool/mail
# 切换相对路径
cd ../mqueue

显示目前所在目录:pwd

# 显示所在目录(Print Working Directory)
pwd [-P]
# 选项与参数:
-P  :显示出确实的路径,而非使用连结 (link) 路径。

创建新目录:mkdir

# 创建新目录(make directory)
mkdir [-mp] 目录名称
# 选项与参数:
-m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上一级目录)递回创建起来!

删除『空』的目录:rmdir

# 删除空目录(remove directory)
rmdir [-p] 目录名称
选项与参数:
-p :连同上一级『空的』目录也一起删除

环境变量 PATH

​ 当我们在运行一个命令的时候,举例来说ls好了,系统会依照PATH的配置去每个PATH定义的目录下搜寻档名为ls的可运行档, 如果在PATH定义的目录中含有多个档名为ls的可运行档,那么先搜寻到的同名命令先被运行。

# 查看环境变量
echo $PATH

​ 关于PATH环境变量需要注意的:

  • 不同身份使用者默认的PATH不同,默认能够随意运行的命令也不同(如root与vbird);
  • PATH是可以修改的,所以一般使用者还是可以透过修改PATH来运行某些位于/sbin或/usr/sbin下的命令来查询;
  • 使用绝对路径或相对路径直接指定某个命令的档名来运行,会比搜寻PATH来的正确;
  • 命令应该要放置到正确的目录下,运行才会比较方便;
  • 本目录(.)最好不要放到PATH当中。

文件与目录管理

文件与目录检索:ls

# 检索文件和目录
ls [-aAdfFhilnrRSt] 目录名称
ls [--color={never,auto,always}] 目录名称
ls [--full-time] 目录名称
选项与参数:
-a  :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
-A  :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录
-d  :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f  :直接列出结果,而不进行排序 (ls 默认会以档名排序!)
-F  :根据文件、目录等资讯,给予附加数据结构,例如:
      *:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h  :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i  :列出 inode 号码,inode 的意义下一章将会介绍;
-l  :长数据串列出,包含文件的属性与权限等等数据;(常用)
-n  :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
-r  :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R  :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来;
-S  :以文件容量大小排序,而不是用档名排序;
-t  :依时间排序,而不是用档名。
--color=never  :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto   :让系统自行依据配置来判断是否给予颜色
--full-time    :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime) 
                       而非内容变更时间 (modification time)

​ 在 ubuntu 中,可以设置别名(alias)来将长命令用短命令表达。ls 使用别名指定默认显示:非隐藏档的文件名、 以文件名进行排序及文件名代表的颜色显示如此而已。

​ 对于ls,在 ~/.bashrc 配置里,已经将其设置了ls -l 等同 llls -A 等同 lals -CF 等同于 l

​ 可以使用alias命令来查看别名:

复制、删除、移动:cp rm mv

复制:cp

cp [-adfilprsu] 来源档(source) 目标档(destination)
cp [options] source1 source2 source3 .... directory
选项与参数:
-a  :相当於 -pdr 的意思,至于 pdr 请参考下列说明;(常用)
-d  :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
-f  :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i  :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l  :创建硬式连结(hard link),而非复制文件本身;
-p  :连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r  :递回持续复制,用于目录的复制行为;(常用)
-s  :创建符号连结(symbolic link),亦即快捷方式;
-u  :若 destination 比 source 旧才升级 destination !
最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!
  • 在默认的条件中, cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是命令操作者本身。假如是 root 的身份,复制过来的文件拥有者与群组就改变成为 root 所有了。
    ​ 由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码档 (/etc/shadow) 以及一些配置档,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项才行。
  • Hard Link:每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向。想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。
    Symbolic link:创建一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的文件名。

删除:rm

# 移除文件或者目录
rm [-fir] 文件或目录
选项与参数:
-f  :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-i  :互动模式,在删除前会询问使用者是否动作
-r  :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!

移动文件与目录,或更名:mv

# 移动文件或者更名
mv [-fiu] source destination
mv [options] source1 source2 source3 .... directory
选项与参数:
-f  :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i  :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u  :若目标文件已经存在,且 source 比较新,才会升级 (update)

文件内容查询

直接打印

顺序打印文件内容:cat
# 打印文件内容(Concatenate)
cat [-AbEnTv] test.txt
选项与参数:
-A  :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b  :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E  :将结尾的断行字节 $ 显示出来;
-n  :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T  :将 [tab] 按键以 ^I 显示出来;
-v  :列出一些看不出来的特殊字符
反向打印文件内容:tac
# 反向打印文件内容
tac test.txt
添加行号打印文件:nl
# 指定以某种模式添加行号打印(Number of Lines)
nl [-bnw] 文件
选项与参数:
-b  :指定行号指定的方式,主要有两种:
      -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
      -b t :如果有空行,空的那一行不要列出行号(默认值);
-n  :列出行号表示的方法,主要有三种:
      -n ln :行号在萤幕的最左方显示;
      -n rn :行号在自己栏位的最右方显示,且不加 0 ;
      -n rz :行号在自己栏位的最右方显示,且加 0 ;
-w  :行号栏位的占用的位数。

按页打印

一页一页翻动:moreless
# 选择按页翻动文件
more text
# 具体操作
空白键 (space):代表向下翻一页;
Enter         :代表向下翻『一行』;
/字串         :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
:f            :立刻显示出档名以及目前显示的行数;
q             :代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
# 选择按页翻动文件
less text
# 具体操作
空白键    :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup]  :向上翻动一页;
/字串     :向下搜寻『字串』的功能;
?字串     :向上搜寻『字串』的功能;
n         :重复前一个搜寻 (与 / 或 ? 有关!)
N         :反向的重复前一个搜寻 (与 / 或 ? 有关!)
q         :离开 less 这个程序;

分片读取

读取前几行:head
# 显示前几行
head [-n number] 文件 
选项与参数:
-n  :后面接数字,代表显示几行的意思
读取后几行:tail
# 显示后几行
tail [-n number] 文件 
选项与参数:
-n  :后面接数字,代表显示几行的意思
-f  :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测

显示非纯文字文件:od

# 显示非纯文字文件(Octal Dump)
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 ;

修改文件时间或建置新档: touch

有关时间的三个参数:

  • modification time (mtime):当该文件的『内容数据』变更时,就会升级这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔
  • status time (ctime)
    当该文件的『状态 (status)』改变时,就会升级这个时间,举例来说,像是权限与属性被更改了,都会升级这个时间啊。
  • access time (atime)
    当『该文件的内容被取用』时,就会升级这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man.config , 就会升级该文件的 atime 了。
# 修订文件的日期与时间 或 创建空文件
touch [-acdmt] 文件
选项与参数:
-a  :仅修订 access time;
-c  :仅修改文件的时间,若该文件不存在则不创建新文件;
-d  :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m  :仅修改 mtime ;
-t  :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]

文件与目录默认权限

创建/修改文件时默认权限:umask

# 表示默认权限需要去掉的数值 
# 理解为 umask XOR {目录777;文件777} = mode
umask 
# 按符号显示默认权限
umask -S

# 修改umask默认权限
umask 022

配置文件隐藏属性:chattr

该命令只能在Ext2/Ext3的文件系统上面生效

# 设置文件属性(change attributes)
chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+   :添加某一个特殊参数,其他原本存在参数则不动。
-   :移除某一个特殊参数,其他原本存在参数则不动。
=   :配置一定,且仅有后面接的参数

A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
S  :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root才能配置这个属性。 
c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
i  :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!
u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还存在磁碟中,可以使用来救援该文件喔!
# 注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置

​ 尝试冻结文件效果如下:

显示文件隐藏属性:lsattr

# 列出文件隐藏属性(list attributes)
lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏档的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
-R :连同子目录的数据也一并列出来! 

文件特殊权限:SUID SGID SBIT

  • Set UID:当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。SUID如下限制与功能:

    1. SUID 权限仅对二进制程序(binary program)有效;
    2. 运行者对於该程序需要具有 x 的可运行权限;
    3. 本权限仅在运行该程序的过程中有效 (run-time);
    4. 运行者将具有该程序拥有者 (owner) 的权限。

    例如用户使用passwd指令修改密码的时候,他会临时获得root的权限,可以对 /usr/bin/passwd写入。

  • Set GID:当 s 标志在群组的 x 时则称为 Set GID, SGID。

  • Sticky Bit:SBIT 目前只针对目录有效,对於文件已经没有效果了。

    • 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;
    • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件

    换句话说:当甲这个使用者於 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示『甲使用者对该目录内任何人创建的目录或文件均可进行 "删除/更名/搬移" 等动作。』 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。

配置特殊权限

​ 在原有三个表示权限的数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限了:

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

观察文件的基本类型:file

# 查看文件类型
file

命令与文件搜寻

命令文件的搜寻:which

# 寻找运行文件
which [-a] command
选项或参数:
-a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称

which根据PATH这个环境变量所规范的路径,去搜寻运行文件的文件名。

特定文件的搜寻:whereis locate find

# 寻找指定文件
whereis [-bmsu] 文件或目录名
选项与参数:
-b    :只找 binary 格式的文件
-m    :只找在说明档 manual 路径下的文件
-s    :只找 source 来源文件
-u    :搜寻不在上述三个项目当中的其他特殊文件

# 以数据库方式搜索文件
locate [-ir] keyword
选项与参数:
-i  :忽略大小写的差异;
-r  :后面可接正规表示法的显示方式

# 按条件查找文件
find [PATH] [option] [action]
选项与参数:
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
   -mtime  n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件;
   -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
   -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
   -newer file :file 为一个存在的文件,列出比 file 还要新的文件档名
2. 与使用者或群组名称有关的参数:
   -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 搜寻。
3. 与文件权限及名称有关的参数:
   -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.... 的属性存在!

相关内容