该笔记参考《鸟哥的Linux私房菜-基础学习篇 第四版》,结合Docker下载Center OS镜像进行学习。

书 第四章 首次登入与在线求助

图形界面与终端界面的切换

由于Docker容器不需要图形界面,此处指针对VM虚拟机或直装Linux系统而讲。

Linux 预设的情况下会提供六个Terminal(终端,即命令行界面)来让使用者登入,切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。

系统会将这六个终端分别命名为tty1 ~ tty6,一般而言,完整安装的centos系统,tty1会是图形界面。

当然,也可是使用 == startx== 命令,在当前的终端启动图形界面(前提是没有图形界面在其他终端启用)。

登入linux

显然,不管是打开图形界面还是终端界面,都需要首先登陆系统,登陆系统需要输入用户名和密码

[主机名] login: [输入用户名]
Password: <==这里输入你的密码(不显示)
Last login: [上次登入的时间]
[用户名@主机名 ~]$ _<==光标闪烁,等待你的指令输入

登入系统后,可以通过 exit退出系统

指令下达

Linux的指令一般由一下几方面组成

$ command [-options] parameter1 parameter2 ...指令     选项       参数(1)    参数(2)
  • 当一个指令有多个选项是,如 ls 可以有 -a 和 -l 参数,可以分开写,也可以写在一起,如 -al
  • 指令太长的时候,可以使用反斜杠 \ 来换行[Enter]符号,使指令连续到下一行。注意!反斜杠后就立刻接特殊字符,才能换行
  • Linux的命令需要注意大小写!

基础指令的操作

以下指令大部分在Docker容器中进行

日期指令 date

该指令用于显示目前Linux的系统时间

[root@aa4293387437 /]# date
Sat Aug 17 06:29:22 UTC 2019

也可以对date的结果进行格式化输出

  • 年 Y
  • 月 m
  • 日 d
  • 时 H
  • 分 M
  • 秒 S
[root@43cdeb1be227 /]# date +%Y/%m/%d
2019/08/17
[root@43cdeb1be227 /]# date +%H:%M:%S
06:35:40

日历指令 cal

该指令用于显示目前月的日历

[root@43cdeb1be227 /]# calAugust 2019
Su Mo Tu We Th Fr Sa1  2  34  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

也可以输入相应参数,显示某年日历(略)、某年某月日历

[root@43cdeb1be227 /]# cal 12 2019December 2019
Su Mo Tu We Th Fr Sa1  2  3  4  5  6  78  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

计算器指令 bc

Docker镜像不带这个功能

功能热键[Tab], [ctrl]-c, [ctrl]-d

[Tab] 具有『命令补全』与『文件补齐』的功能,

  • 当在终端输入一个指令时,会在下方显示补全的命令
  • 当输入一个目录路径时,会显示该目录的子目录和文件
  • 当跟在–之后,会显示该命令的相关参数

Centos 7.X中不一定会主动补齐档名

[root@43cdeb1be227 /]# ca
ca-legacy  cal        caller     capsh      captoinfo  case       cat        catchsegv
[root@43cdeb1be227 /]# ls -al ~/.bash
.bash_logout   .bash_profile  .bashrc

[Ctrl]-c 可以中断目前程序(如果目前程序需要很长时间的输出)

[Ctrl]-d 相当于 exit 并换行,直接退出当前终端
[shift]+{[PageUP]|[Page Down]} 换页

Linux系统助手

[Tab]补全

–help指令

显示某一个指令的用法(非常长,略)

man page

man 是 manual(操作说明)的简写,而不是找男人:)

Docker不提供在线求助支持

info page

info 与man 的用途其实差不多,都是用来查询指令的用法或者是文件的格式,且Docker支持info指令

info page 则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写,并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)

但Docker镜像似乎没有节点

[root@0dc3464804cd /]# info info
File: dir,      Node: Top       This is the top of the INFO treeThis (the Directory node) gives a menu of major topics.Typing "q" exits, "?" lists all Info commands, "d" returns here,"h" gives a primer for first-timers,"mEmacs<Return>" visits the Emacs manual, etc.In Emacs, you can click mouse button 2 on a menu item or cross referenceto select it.* Menu:-----Info: (dir)Top, 11 lines --All-------------------------------------------------------------------------------------------------------------------------------------------------------------No menu in node `(dir)Top'.

/usr/share/doc/文件

一般而言,在/usr/share/doc/这个目录下,会存放部分指令或者软件的说明文件

[root@3fb7b46fc03e /]# ls /usr/share/doc/
coreutils-8.22  gnupg2-2.0.22     pam-1.1.8    python-kitchen-1.1.1
dbus-1.10.24    krb5-libs-1.15.1  pygpgme-0.3  python-pycurl-7.19.0

关机指令

有些Linux版本需要root权限

  • 数据同步:sync
  • 常用关机指令:shutdown
  • 重新启动,关机:reboot,halt,poweroff

书 第五章 Linux的文件权限与目录配置

使用者和群组概念

  1. 文件拥有者(owner)
  2. 群组(group)
  3. 其他人(ohter)
    以上3种使用者,与相应的权限相搭配,可以操控不同文件在不同用户情况下的可读可写关系

这类使用者的相关信息都被记录在 /etc/passwd 这个文件内
,个人密码记录在 /etc/shadow 文件下,组名记录在 /etc/group

文件权限

文件属性

通过 ls 指令可以查看文件,例如通过 ls -al 查看到一下信息

[root@3fb7b46fc03e ~]# ls -al
total 32
dr-xr-x--- 2 root root 4096 Mar  5 17:36 .
drwxr-xr-x 1 root root 4096 Aug 17 07:49 ..
-rw-r--r-- 1 root root   18 Dec 29  2013 .bash_logout
-rw-r--r-- 1 root root  176 Dec 29  2013 .bash_profile
-rw-r--r-- 1 root root  176 Dec 29  2013 .bashrc
-rw-r--r-- 1 root root  100 Dec 29  2013 .cshrc
-rw-r--r-- 1 root root  129 Dec 29  2013 .tcshrc
-rw------- 1 root root 3415 Mar  5 17:36 anaconda-ks.cfg

这其中分为7个部分,包括 权限连接数拥有者群组文件大小修改日期档名

权限说明

以 -rwxrwx— 这个权限来说明

第一栏代表这个文件的类型与权限

第一个字符代表这个文件是 目录文件链接文件中的一种

  • d代表目录
  • -代表文件
  • l代表连接档(link file),类似于快捷方式

接下来的字符,以三个为一组,且均为 rwx形式的组合

  • r代表可读
  • w代表可写
  • x代表可执行(execute)
    三组分别表示,文件拥有者可具备的权限该群组用户的权限非本人且没有加入该群组用户的权限
第二栏表示有多少档名连结到此节点(i-node)

这个属性记录的,就是有多少不同的档名连结到相同的一个i-node 号码去就是了。(原话)

第七栏为这个文件的档名

档名之前如果有 . ,则表示该档为一个隐藏档,隐藏档会在 ls -al 指令中显示,不会在 ls 中显示
若需要root 的权限时,可以使用su - 这个指令来切换身份。处理完毕则使用exit 离开su 的指令环境。

文件属性、权限的改变

  • chgrp :改变文件所属群组
  • chown :改变文件拥有者
  • chmod :改变文件的权限, SUID, SGID, SBIT 等等的特

改变所属群组,chgrp

使用方式为

chgrp [-R] 组名 文件或目录 ...

其中,-R 参数可以对目录进行递归,使该目录下的所有文件、目录的群组都相应改变

可以记忆为ch为change改变的前缀,grp是group的缩写

改变拥有者,chown

使用方式为

chgrp [-R] 账号名称 文件或目录
chgrp [-R] 账号名称:组名 文件或目录

同样地,-R 属性可以递归

以上的账号名称和组名必须已在系统中进行注册

chgrp、chown可以实现用户文件复制给其他用户,由于复制指令会连带文件属性一同复制,因此需要更改相应的使用者和群组

改变权限,chmod

数字类型改变文件权限

有一个小技巧,前面提到过的三个为一组的文件权限r、w、x可以理解为2进制位数,
通过

chmod [-R] xyz 文件或目录如
chmod 777 .bashrc

修改文件权限,其中xyz分别是三组2进制数字的值

符号类型改变文件权限

同样地,文件权限为三个一组,分别为user(u),group(g),other(o)以及all(a),可以使用+、-、=来直接设定相应的权限,设定相同权限的组可以连写,如

# 设定
chmod u=rwx,go=rx .bashrc
# 添加
chmod a+w .bashrc
# 移除
chmod a-x .bashrc

权限的意义

权限对文件的重要性

  • r:读取文件内容
  • w:可以编辑、修改文件(但不能删除文件)
  • x:可以执行文件

权限对目录的重要性

  • r:可以读取目录(体现在 ls 指令上),但不能进入目录
  • w:可以新建、删除、移动、重命名文件和目录(实现了文件的w权限不能实现的功能)
  • x:可以进入该目录(体现在 cd 指令上)

文件种类与拓展名

连接档(link)

连接档类似于Windows系统的快捷方式,文件属性中以l表示

拓展名

Linux文件的拓展名和Windows的不同,它没有明显的拓展名显示,文件能否被执行,与文件属性第一栏第10个值有关,只要权限中具有x的话,文件有能被执行。

但能被执行与能执行成功不同,海域文件内容有关。

为了方便起见,文件还是会有适当的拓展名,如.sh表示脚本、.tar、.zip表示压缩文件、.html、.php表示网页文件等

单一文件或目录的最大允许文件名为255bytes,以每个中文字占用2bytes 来说, 最大档名就是大约在128个中文字

Linux目录配置

Filesystem Hierarchy Standard (FHS) 让使用者可以了解到已安装软件通常放置于哪个目录

  • / (root, 根目录):与开机系统有关;
  • /usr (unix software resource):与软件安装/执行有关;
  • /var (variable):与系统运作过程有关。

/usr

/usr 不是指user的缩写,是指 Unix Software Resource 的缩写,FHS 建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。

/var

var 目录主要针对常态性变动的文件,包括快取(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL 数据库的文件

绝对路径与相对路径

  • 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
  • 相对路径:相对于目前路径的文件名写法。例如./home/dmtsai 或…/…/home/dmtsai/ 等等。反正开头不是/就属于相对路径的写法
    特别注意两个.的用法的区别
  • . :代表当前的目录,也可以使用 ./ 来表示;
  • … :代表上一层目录,也可以 …/ 来代表。

书 第六章 Linux文件与目录管理

目录的相关操作

  • . 代表此层目录
  • … 代表上一层目录
    • 代表前一个工作目录
  • ~ 代表『目前用户身份』所在的家目录
  • ~account 代表 account 这个用户的家目录(account 是个账号名称)
    几个常见的处理目录的指令
  • cd:变换目录
  • pwd:显示当前目录
  • mkdir:建立一个新的目录
  • rmdir:删除一个空的目录

cd (change directory,变换目录)

cd [相对路径或绝对路径]
cd ~username # 代表去到 username用户的家目录
cd .. # 表示去到目前的上层目录
cd -  # 表示回到刚刚的那个目录

pwd (显示目前所在的目录)

pwd [-P]
# -P :显示出确实的路径,而非使用链接 (link) 路径。

mkdir (建立新目录)

mkdir [-mp] 目录名称
# -m :配置文件案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~
# -p :帮助你直接将所需要的目录(包含上层目录)递归建立起来!
  • 如果没有加上 -m 来强制设定属性,系统会使用默认属性
  • 一般情况下,目录需要一层层才能建立,如果需要建立多个递归子目录,在没有中间层目录的情况下,需要使用 -p 参数,逐层建立目录

rmdir (删除『空』的目录)

被删除的目录里面必定不能存在其他的目录或文件

rmdir [-p] 目录名称
# -p :连同『上层』『空的』目录也一起删除

文件与目录管理

检视文件与目录

ls [-aAdfFhilnrRSt] 文件名或目录名称..
ls [--color={never,auto,always}] 文件名或目录名称..
ls [--full-time] 文件名或目录名称..
# -a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
# -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
# -l :长数据串行出,包含文件的属性与权限等等数据;(常用)

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

cp (复制文件或目录)

cp [-adfilprsu] 来源文件(source) 目标文件(destination)
cp [options] source1 source2 source3 .... directory  # 可同时复制多个文件
# -a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
# -i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
# -p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
# -r :递归持续复制,用于目录的复制行为;(常用)

复制文件并不能完整复制权限,并且复制文件需要考虑到

  • 是否需要完整的保留来源文件的信息?
  • 来源文件是否为连结档(symbolic link file)?
  • 来源档是否为特殊的文件,例如FIFO, socket 等?
  • 来源文件是否为目录?

rm (移除文件或目录)

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

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

 mv [-fiu] source destinationmv [options] source1 source2 source3 .... directory  # 同样,移动也可以对多个档进行
# -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
# -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
# -u :若目标文件已经存在,且 source 比较新,才会更新 (update)

使用 mv 指令也可以对档进行重命名,

mv mvtest mvtest2 <== 这样就更名了!简单~
# 其实在 Linux 底下还有rename指令,进行多个档名的同时更名,并非针对单一档名变更

取得路径的文件名与目录名称

当目录与最终的文件名过长时,需要知道该文件或目录的档名或目录名,可以采用以下指令

basename /etc/sysconfig/network
network <== 很简单!就取得最后的档名~
dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的变成目录名了!

文件内容查阅

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示
  • nl 显示的时候,顺道输出行号
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页
  • head 只看头几行
  • tail 只看末尾几行
  • od 以二进制的方式读取文件内容

直接检视文件内容

cat (concatenate)
cat [-AbEnTv]
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号
# -n :打印出行号,连同空白行也会有行号,与 -b 的选项不同

当文件内容的行数超过40行以上时,不建议使用cat,配合 more 或 less 来执行比较好

tac (反向列示)

tac 的输出结果是由最后一行到第一行反向在屏幕上显示

nl (添加行号打印)
nl [-bnw] 文件
# -b :指定行号指定的方式,主要有两种:
# -b a :表示不论是否为空行,也同样列出行号(类似 # cat -n);
# -b t :如果有空行,空的那一行不要列出行号(默认值);
# -n :列出行号表示的方法,主要有三种:
# -n ln :行号在屏幕的最左方显示;
# -n rn :行号在自己字段的最右方显示,且不加 0 ;
# -n rz :行号在自己字段的最右方显示,且加 0 ;
# -w :行号字段的占用的字符数。

nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐0等功能

翻页检视

more (一页一页翻动)

在more的状态下,最后一行会显示目前显示的百分比,同事还可以在最后一行输入一些有用的指令

  • 空格键 (space):代表向下翻一页;
  • Enter :代表向下翻『一行』;
  • /字符串 :代表在这个显示的内容当中,向下搜寻『字符串』这个关键词;
  • :f :立刻显示出文件名以及目前显示的行数;
  • q :代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
    输入了 / 只收,输入字符串病按下 [enter]进行搜索,more 开始向下搜索该字符串,直接按下 n 可以重复搜寻同一个字符串,按下 q 离开 more
less (一页一页翻动)

less 的用法比 more 更加有弹性,可以通过[pageup] [pagedown] 等按键的功能来往前往后翻看文件

除此之外,在less 里头可以拥有更多的『搜寻』功能喔!不止可以向下搜寻,也可以向上搜寻

  • 空格键 :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字符串 :向下搜寻『字符串』的功能;
  • ?字符串 :向上搜寻『字符串』的功能;
  • n :重复前一个搜寻 (与 / 或 ? 有关!)
  • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • g :前进到这个资料的第一行去;
  • G :前进到这个数据的最后一行去 (注意大小写);
  • q :离开 less 这个程序;

资料撷取

head (取出前面几行)
head [-n number] 文件
# -n :后面接数字,代表显示几行的意思
# -n 20表示显示前20行
# -n -100表示除后面100行外,其余的从第一行开始显示
tail (取出后面几行)
tail [-n number] 文件
# -n :后面接数字,代表显示几行的意思
# -n 20表示显示后20行
# -n +100表示只列出100行以后的数据
# -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c 才会结束tail 的侦测
# 由于某文件随时会有数据写入,可以用 -f 来一直侦测该文件

非纯文本档: 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 ;

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

Linux文件会记录许多的时间参数,其中有三个主要的变动时间

  • modification time (mtime):[内容数据]变更更新的时间
  • status time(ctime):[状态]改变更新的时间
  • access time (atime):[文件被读取]是更新的时间
touch [-acdmt] 文件
# -a :仅修订 access time;
# -c :仅修改文件的时间,若该文件不存在则不建立新文件;
# -d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
# -m :仅修改 mtime ;
# -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
# 上述的时间都可以按照相应的格式输出
# 若该文件不存在,则会主动的建立一个新的空的文件

touch 通常在下面两种情况中用到

  • 建立一个空的文件;
  • 将某个文件日期修订为目前(mtime 与atime)

文件与目录的默认权限与隐藏权限

文件的预设权限:umask

预设权限只目前用户在建立文件或目录时的权限默认值
可以通过 umask 查看

[root@5bbc663a8330 etc]# umask
0022
[root@5bbc663a8330 etc]# umask -S
u=rwx,g=rx,o=rx

umask 的分数指的是『该默认值需要减掉的权限!』,且使用者建立为『文件』则预设『没有可执行( x )权限』

[root@5bbc663a8330 etc]# touch test1
[root@5bbc663a8330 etc]# mkdir test2
[root@5bbc663a8330 etc]# ll -d test*
-rw-r--r-- 1 root root    0 Aug 20 11:13 test1
drwxr-xr-x 2 root root 4096 Aug 20 11:13 test2

可以通过 umask 数字 来制定预设权限的值

文件隐藏属性

隐藏属性不能在Docker 镜像中使用

chattr (配置文件案隐藏属性)
chattr [+-=][ASacdistu] 文件或目录名称
# a :当设定 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设定这属性
# i :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、设定连结也无法写入或新增数据!』对于系统安全性有相当大的帮助!只有 root 能设定此属性
lsattr (显示文件隐藏属性)
lsattr [-adR] 文件或目录
# -a :将隐藏文件的属性也秀出来;
# -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
# -R :连同子目录的数据也一并列出来!

文件特殊权限: SUID, SGID, SBIT

[root@5bbc663a8330 tmp]# ls -ld /tmp ;ls -l /usr/bin/passwd
drwxrwxrwt 1 root root 4096 Aug 20 11:30 /tmp
-rwsr-xr-x 1 root root 27832 Jun 10  2014 /usr/bin/passwd
Set UID

SUID是指s在文件拥有者(U指user)的x权限,基本上SUID 有这样的限制与功能:

  • SUID 权限仅对二进制程序(binary program)有效;
  • 执行者对于该程序需要具有x 的可执行权限;
  • 本权限仅在执行该程序的过程中有效(run-time);
  • 执行者将具有该程序拥有者(owner) 的权限。
    该权限的作用是,若我使用某用户账号去执行文件时,那这个用户账号将会取得root的支持,比如在 /usr/bin/passwd 中,单用户可以修改自己账号的密码,虽然 /usr/bin/passwd 的拥有者是roo用户;但不能对 /usr/bin/passwd 读取,因为没有 SUID 权限

另外,SUID 仅可用在binary program 上, 不能够用在shell script 上面!

Set GID

SGID指s在群组的x权限,SGID 有如下的功能:

  • SGID 对二进制程序有用;
  • 程序执行者对于该程序来说,需具备x 的权限;
  • 执行者在执行的过程中将会获得该程序群组的支持

与SUID 非常的类似,若我使用某用户账号去执行文件时,那这个用户账号将会取得所属群组的支持

Sticky Bit

SBIT 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是:

  • 当用户对于此目录具有w, x 权限,亦即具有写入的权限时;
  • 当用户在该目录下建立文件或目录时,仅有自己与root 才有权力删除该文件
    当甲这个用户于A 目录是具有群组或其他人的身份,并且拥有该目录w 的权限, 这表示『甲用户对该目录内任何人建立的目录或文件均可进行"删除/更名/搬移" 等动作。』不过,如果将A 目录加上了SBIT 的权限项目时,则甲只能够针对自己建立的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。
SUID/SGID/SBIT 权限设定

同样地,视SUID、SGID、SBIT为2进制位数,分别表示

  • 4 为SUID
  • 2 为SGID
  • 1 为SBIT
    在使用 chmod 权限值 设定文件权限时,这些隐藏权限由4个数字中的第1个来设定;当然也可以通过 chmod [ugo][±=]权限 来具体设定
观察文件类型:file

可以利用 **file== 这个指令来检阅文件(Docker 镜像不支持)

指令与文件的搜寻

脚本文件名的搜寻

which (寻找『执行档』)

which [-a] command
# -a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称

这个指令是根据『PATH』这个环境变量所规范的路径,去搜寻『执行档』的档名
(Docker 镜像不支持)

文件档名的搜寻

whereis (由一些特定的目录中寻找文件文件名)

whereis [-bmsu] 文件或目录名
# -l :可以列出 whereis 会去查询的几个主要目录而已
# -b :只找 binary 格式的文件
# -m :只找在说明文件 manual 路径下的文件
# -s :只找 source 来源文件
# -u :搜寻不在上述三个项目当中的其他特殊文件

whereis 的查询速度会比较快相比find),因为whereis 只找几个特定的目录,并没有全系统去查询

locate / updatedb

locate [-ir] keyword
# -i :忽略大小写的差异;
# -c :不输出档名,仅计算找到的文件数量
# -l :仅输出几行的意思,例如输出五行则是 -l 5
# -S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
# -r :后面可接正规表示法的显示方式

locate 的使用更简单,直接在后面输入『文件的部分名称』后,就能够得到结果。但该指令的限制在于需要从『已建立的数据库/var/lib/mlocate/』搜寻得到结果,该数据库会每天更新一次,也可以手动更新,直接输入 updatedb 进行更新。

  • updatedb:根据/etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新/var/lib/mlocate 内的数据库
    文件;
  • locate:依据/var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名。

find

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 还要新的文件档名
# 例:搜索一天内的文件
find / -mtime 0
# 例:在/etc下搜索比、etc/passwd较新的文件
find /etc -newer /etc/passwd

其中,时间参数有正负之分,如

  • +4 代表大于等于5 天前的檔名:ex> find /var -mtime +4
  • -4 代表小于等于4 天内的文件档名:ex> find /var -mtime -4
  • 4 则是代表4-5 那一天的文件档名:ex> find /var -mtime 4
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 搜寻。
# 例:搜索不属于任何人的文件,用于查找那些账户被删除的用户遗留文件
find / -nouser
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.... 的属性存在!
# 例:搜索文件类型为Socker的档名
find / -type s
# 例:搜索文件包含SGID 或 SUID 或 SBIT的属性
find / -perm /7000

并且,find后面可以接多个目录来进行搜寻

4. 额外可进行的动作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
-print :将结果打印到屏幕上,这个动作是预设动作!

find 的特殊功能就是能够进行额外的动作(action),如

find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
# 可以在之后将找到的文件使用 ls -l 列出来

极其重要的复习!

一、让用户能进入某目录成为『可工作目录』的基本权限为何:

  • 可使用的指令:例如cd 等变换工作目录的指令;
  • 目录所需权限:用户对这个目录至少需要具有x 的权限
  • 额外需求:如果用户想要在这个目录内利用ls 查阅文件名,则用户对此目录还需要r 的权限。

二、用户在某个目录内读取一个文件的基本权限为何?

  • 可使用的指令:例如本章谈到的cat, more, less 等等
  • 目录所需权限:用户对这个目录至少需要具有x 权限;
  • 文件所需权限:使用者对文件至少需要具有r 的权限才行!

三、让使用者可以修改一个文件的基本权限为何?

  • 可使用的指令:例如nano 或未来要介绍的vi 编辑器等;
  • 目录所需权限:用户在该文件所在的目录至少要有x 权限;
  • 文件所需权限:使用者对该文件至少要有r, w 权限

四、让一个使用者可以建立一个文件的基本权限为何?

  • 目录所需权限:用户在该目录要具有w,x 的权限,重点在w 啦!

五、让用户进入某目录并执行该目录下的某个指令之基本权限为何?

  • 目录所需权限:用户在该目录至少要有x 的权限;
  • 文件所需权限:使用者在该文件至少需要有x 的权限

Linux,不过是从头再来(一)相关推荐

  1. java从头再来--java

    java从头再来–java语言 第一站 java语言 一起学习进步,欢迎留言指正 文章目录 java从头再来--java语言 一.java是什么? 1.面向对象 2.强类型编程语言 3.跨平台 二.j ...

  2. 虚拟机Ubuntu崩了?只不过是从头再来罢了。

    今天运行虚拟机,电脑不知道为什么就卡了,如愿以偿,它崩了.我能怎么办嫩,只不过是从头再来罢了. 安装虚拟机,首先就是需要有软件VMware,其次还需要有Ubuntu系统镜像.这里安装的系统镜像是ubu ...

  3. 我的2021年终总结:初为人父,从头再来

    [年终总结]| 作者/Edison 最近公司开始一股年终总结浪潮,看着同事们写大作文式的"内卷"总结,我不禁在想我这一年做了什么,那么也就有了这篇总结推文,当然它也是我每年的习惯. ...

  4. 不再年轻,仍从头再来

    近日我的两个宝贝相继过生日,给我很多感触,被生命和生活所感动,被各种爱和各种细节所激动,我是一个可怕可恨的工科男,有时敏感,有时性情,有时忧郁,有时愤青,有时假装文艺,有时也很装,这些五花八门乱七八糟 ...

  5. 从头再来博客_免费课程:从头开始构建博客吗?

    从头再来博客 by ZAYDEK 由ZAYDEK 瓷砖... (TIL-) 免费课程:从头开始构建博客吗? (Free Course: Build A Blog From Scratch ?‍?) 可 ...

  6. 不过是从头再来(下)

    休学回来后,我便想转专业到计算机.奈何虽然转专业的成绩够了,但是申请时间已经过了(我们学校是大一下学期提交申请),无缘转专业.当时经过学长介绍,我花了一万块钱报了一个编程班,想系统的学习编程. 机缘巧 ...

  7. JavaSE从头再来(七)——增强IO流

    JavaSE从头再来(七)--增强IO流 从头再来第七弹,主要涉及到缓冲流.转换流.序列化流和打印流 一.缓冲流 能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等.这些功能 ...

  8. JavaSE从头再来(一):面向对象、常用API

    JavaSE从头再来(一) 一.数组 case1 数组反转 int[] array = {10,20,30,40,50};for (int min = 0,max = array.length-1;m ...

  9. 2012 从头再来

    今天是2012年 第一天 所有的一切从头再来 加油~ 相信你是最棒的~ 转载于:https://blog.51cto.com/pchome/756088

  10. 遭散伙危机,他掏家底结清百名员工工资,从头再来又成淘宝销量王

    从年营收5000万一下子跌入谷底,带着7个仍愿意追随他的员工,他从头再来,连续三年蝉联淘宝双12智能门锁销量冠军. 文|宁函夏 王震背水一战的故事从一栋3层高的居民楼开始.2014年,王震和合作5年的 ...

最新文章

  1. nyoj——297(期望)
  2. 《JavaScript权威指南》笔记(一)
  3. 8.Deep Interest Evolution Network for Click-Through Rate Prediction论文详解
  4. 微信小程序code 换取 session_key
  5. 置顶java[常用]-[语法]-[基础操作]
  6. PL/SQL编程基本概念
  7. tcpcopy使用方法
  8. Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法
  9. php中数据类型、数组排序、循环语句、混编、操作本地文件流程、常用API、函数、魔术常量
  10. 华为云新加坡峰会发布CloudAI创新实验室,四大核心优势助力智能化升级
  11. 怎么解决VMware“该虚拟机似乎正在使用中”问题
  12. Openlayer:学习笔记之图标与提示信息
  13. 华为freebuds pro和airpods pro降噪对比 华为freebuds pro和airpods pro参数对比
  14. google手机等相关产品{时间不同步}最简解决方法
  15. tns:无监听 解决之一:由于 linstener.log 贮存过满导致
  16. AG9311/AG9310 Type-C转HDMI设计方案|替代AG9310/AG9311芯片|GSV2201可完全替代兼容AG9310/AG9311
  17. 图片搜索引擎 - WebCrawler
  18. PINQ-查询数据集-简介
  19. 从代码角度看CAN网络层协议 ISO 15765-2 (二)
  20. 关于SpringCloud Alibaba,动力节点的这份笔记教程真香

热门文章

  1. The life cycle of a typical project 一个典型的项目生命周期
  2. 设备全生命周期管理第一股凌雄科技上市,京东、腾讯等长期看好
  3. 浏览器的用户代理(User-Agent)
  4. 深度学习图像数据增强data augmentation
  5. Hdu 1247 Hat's Words(Trie树)
  6. 分享几个苹果CMS采集资源站
  7. 笔记:关于QMap使用时候的一点技巧
  8. 【C++ 科学计算】获取矩阵每个元素绝对值大小值
  9. 面向服务及其在互联系统策略中的角色
  10. 【多道批处理系统】计算完成两个作业需要的最少时间,并图文叙述