Linux小记

文章目录

一 Linux 安装

1.1 磁盘分区

​ 我们知道一块磁盘是可以被分区成多个分区槽的(partition),以旧有的 Windows 观点来看,你可能会有一颗磁盘并且将他分区成为 C:, D:, E: 槽对吧!那个 C, D, E 就是分区槽(partition)啰。

​ 但是 Linux 的装置都是以文件的型态存在。

	>那分区槽的档名又是什么? 
	>
	>如何进行磁盘分区?
	>
	>磁盘分区有哪些限制?
	>
	>目前的 `BIOS` 与 `UEFI` 分别是啥?
	>
	>`MSDOS`(MBR) 与 `GPT` 又是啥?   两种磁盘分区表

都是我们这个小节所要探讨的内容啰。

1.1.1 磁盘连接方式装置文件名的关系

​ 正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境底下,为了加速,可能就会使用/dev/vd[a-p] 这种装置文件名喔!

为何要分区?

  1. 数据的安全 比如windows c 盘 系统重装,不影响其他盘的数据等等。
  2. 系统的效能 读取数据集中到某个分区中,搜索范围减少。

1.1.2 MSDOC(MBR)GPT 磁盘分区表(partition table

1.1.2.1 MBR 分区表格式与限制

​ 早期的 Linux 系统为了兼容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot
Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则
通通放在磁盘的第一个扇区,这个扇区通常是 512bytes 的大小 (旧的磁盘扇区都是 512bytes 喔!),
所以说,第一个扇区 512bytes 会有这两个数据:

  • 主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
  • 分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes

​ 由于分区表所在区块仅有 64 bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启
始与结束的磁柱号码。 若将硬盘以长条形来看,然后将磁柱以柱形图来看,那么那 64 bytes 的记录
区段有点像底下的图示:

在这里插入图片描述

在这里插入图片描述

1.1.2.2 GUID partition table, GPT 磁盘分区表

MBR 仅使用第一个 512bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!

​ 并不是所有的操作系统都可以读取到 GPT 的磁盘分区格式喔!同时,也不是所有的硬件都可以支持GPT 格式喔!是否能够读写 GPT 格式又与开机的检测程序有关! 那开机的检测程序又分成啥鬼东西呢?就是 BIOSUEFI 啦!那这两个又是啥东西?就让我们来聊一聊!

1.2.3 开机流程中的 BIOSUEFI 开机检测程序

简单的说,整个开机流程到操作系统之前的动作应该是这样的:

  1. BIOS:开机主动执行的韧体,会认识第一个可开机的装置;
  2. MBR:第一个可开机装置的第一个扇区内的主要启动记录区块,内含开机管理程序;
  3. 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
  4. 核心文件:开始操作系统的功能;

UEFI (Unified Extensible Firmware Interface)这个统一可延伸韧体界面

1.1.3 Linux 安装模式下,磁盘分区及其重要

1.1.3.1 目录树结构 (directory tree)

二 Linux----挂载

参考:Linux——常用命令(挂载)

https://www.cnblogs.com/DonCharles/p/9929931.html

2.1 挂载概念简述:

根文件系统之外的其他文件要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为“挂载点”,解除此关联关系的过程称之为“卸载

  1. 挂载:根文件系统外通过关联至根文件系统上的某个目录来实现访问
  2. 挂载点:mount_point,用于作为另一个文件系统的访问入口;
    • 事先存在;
    • 应该使用未被或不会被其它进程使用到的目录;
    • 挂载点下原有的文件将会被隐藏;

2.2 挂载与卸载

2.2.1 挂载方法:mount DECE MOUNT_POINT

​ mount:通过查看/etc/mtab(文章最后会对/etc/mtab有个解释)文件显示当前系统已挂载的所有设备

​ /etc/mtab文件内容如下:

sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=4011380k,nr_inodes=1002845,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=808552k,mode=755 0 0
/dev/sda1 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=26,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=14270 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,relatime,pagesize=2M 0 0
mqueue /dev/mqueue mqueue rw,relatime 0 0
configfs /sys/kernel/config configfs rw,relatime 0 0

命令使用格式:mount [-fnrsvw] [-t vfstype] [-o options] device dir

device:指明要挂载的设备;

1. 设备文件:例如/dev/sda5
2. 卷标:-L 'LABEL', 例如 -L 'MYDATA'
	3. UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
	4. 伪文件系统名称:proc, sysfs, devtmpfs, configfs

dir:挂载点

1. 事先存在;建议使用空目录;
2. 进程正在使用中的设备无法被卸载;

常用命令选项:

-t vsftype:指定要挂载的设备上的文件系统类型;

-r: readonly,只读挂载;

-w: read and write, 读写挂载;

-n: 不更新/etc/mtab;

-a:自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)

-L ‘LABEL’: 以卷标指定挂载设备;

-U ‘UUID’: 以UUID指定要挂载的设备;

-B, --bind: 绑定目录到另一个目录上;

注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts

-o options:(挂载文件系统的选项)

async:异步模式;

sync:同步模式;

atime/noatime:包含目录和文件;

diratime/nodiratime:目录的访问时间戳

auto/noauto:是否支持自动挂载

exec/noexec:是否支持将文件系统上应用程序运行为进程

dev/nodev:是否支持在此文件系统上使用设备文件;

suid/nosuid:是否支持在此文件系统上使用特殊权限

remount:重新挂载

ro:只读

rw:读写

user/nouser:是否允许普通用户挂载此设备

acl:启用此文件系统上的acl功能

注意:上述选项可多个同时使用,彼此使用逗号分隔;

默认挂载选项:defaults:rw, suid, dev, exec, auto, nouser, and async

上述信息可以通过查看超级块信息看到,这里不再对其进行演示。

2.2.2 命令演示:

  1. 指定文件系统将块设备挂载至指定空文件夹内:

    演示内容:

    1)没有指定文件系统,命令是否能正确执行;

    2)指定错误文件系统,命令是否能正确执行;

    3)挂载点有内容的文件夹,查看被挂载后其内容是否消失。

执行命令

sudo -i 切换到管理员账户

fdisk -l

fdisk --help

用法:
fdisk [选项] <磁盘> 更改分区表
fdisk [选项] -l [<磁盘>] 列出分区表

显示或操作磁盘分区表。

选项:
-b, --sectors-size <大小> 显示扇区计数和大小
-B, --protect-boot 创建新标签时不要擦除 bootbits
-c, --compatibility[=<模式>] 模式,为“dos”或“nondos”(默认)
-L, --color[=<时机>] 彩色输出(auto, always 或 never)
默认启用颜色
-l, --list 显示分区并退出
-o, --output <列表> 输出列
-t, --type <类型> 只识别指定的分区表类型
-u, --units[=<单位>] 显示单位,“cylinders”柱面或“sectors”扇区(默认)
-s, --getsz 以 512-字节扇区显示设备大小[已废弃]
-b, --bytes 以字节为单位而非易读的格式来打印 SIZE
-w, --wipe <模式> 擦除签名(auto, always 或 never)
-W, --wipe-partitions <模式> 擦除新分区的签名(auto, always 或 never)

-C, --cylinders <数字> 指定柱面数
-H, --heads <数字> 指定磁头数
-S, --sectors <数字> 指定每条磁道的扇区数

-h, --help display this help
-V, --version display version

response:

fdisk -l
Disk /dev/sda:465.8 GiB,500107862016 字节,976773168 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:dos
磁盘标识符:0x9b3ceb02

设备       启动  起点      末尾      扇区   大小 Id 类型
/dev/sda1  *     2048 976771071 976769024 465.8G 83 Linux

三 初次使用

3.1 首次登入系统

​ 一般来说,我们不建议您直接使用 root 的身份登入系统喔!请使用一般账号登入!等到有需要修改或者是建立系统相关的管理工作时, 才切换身份成为 root!为什么呢?因为系统管理员的权限太高了!而 Linux 底下很多的指令行为是『没有办法复原』的!所以, 使用一般账号时,『手滑』的灾情会比较不严重!

3.2 文本模式下指令

3.2.1 来几个好玩的指令

  • 显示日期与时间的指令: date
  • 显示日历的指令: cal
  • 简单好用的计算器: bc

3.2.2 重要的几个热键

  • [shift]+{[PageUP]|[Page Down]}按键 // 指令页面翻页操作

3.3 正确的关机方法

Linux 系统有可能多用户同时使用, 执行who命令查看当前用户

who

chenershuai tty1 2020-05-11 13:23 (:0)

sync

​ 数据同步到磁盘, Linux 系统为提高数据存取速度,延缓同步数据到磁盘,so, 关机前可以执行sync命令同步下数据.

shutdown 关机命令

​ 更多参数 shut --help 或者 man shutdown

​ 下图为部分命令:

在这里插入图片描述

3.4 tty1~tty6 终端机界面如何切换

四 文件权限和目录配置

4.1 使用者和群组

先来了解下 (1) 使用者及 (2)群组与 (3)非本群组外的其他人三个概念.

文件拥有者 User

​ 就是我自己

群组概念 Group

​ 组, 小队嘛 很好理解

其他人的概念 Others

​ 其他不知道,不认识的甲乙丙丁.

root

​ 此为

4.1.1 Linux 用户身份与群组记录的文件

​ 在我们 Linux 系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个 root 的相关信息,都是记录在/etc/passwd 这个文件内的。

​ 至于个人的密码则是记录在/etc/shadow 这个文件下。

​ 此外,Linux 所有的组名都纪录在/etc/group 内!这三个文件可以说是 Linux 系统里面账号、密码、群组信息的集中地啰! 不要随便删除这三个文件啊! _

4.2 Linux 文件权限概念

4.2.1 Linux 文件属性

sudo -i

ls -al

response:

drwxr-xr-x  3 root root  4096 5月   9 16:14 .m2
-rw-r--r--  1 root root   140 5月   9 10:37 .profile

解释下上面七个字段的意思:

下图: 文件属性示意图

在这里插入图片描述

  • 类型权限: 第一栏代表这个文件的类型与权限(permission):

    共有 10 个字符

    -rw-r–r-- : - 表示没有权限, r: read w: write x: excute

    • 1 : 为文件类型
      • - : 默认文件类型
      • d : 目录
      • l : 链接
      • b : 表示为装置文件里面的可供储存的接口设备(可随机存取装置);
      • c : 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
    • 2~4: 为 拥有者 权限 ,分别为 rwx
    • 5~7: 为 所属群组 权限,分别为 rwx
    • 8~10: 为 其他人 权限,分别为 rwx
  • 连接数: 第二栏表示有多少档名连结到此节点(i-node):

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

  • 文档拥有者

  • 文档所属群组

  • 文档容量 文件的容量大小

  • 文档最近修改时间

  • 文档名

? 连接数 TODO

!!! others 的权限中[r–]虽然有 r ,但是由于没有 x 的权限,因此 others 的使用者,并不能进入相关此目录!

4.2.2 如何改变文件属性和权限

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

chgrp --> change group ,_。不过,请记得,要被改变的组名必须要在/etc/group 文件内存在才
行,否则就会显示错误!

语法: chgrp [-R] [群组名] [文件/目录...]

如下:

root@chenershuai-PC:~# mkdir test1
root@chenershuai-PC:~# ls -l
总用量 8
drwxr-xr-x 2 root root 4096 511 16:41 test1
drwxr-xr-x 2 root root 4096 59 10:37 模板
root@chenershuai-PC:~# sudo chgrp chener test1/
chgrp: 无效的组:"chener"
root@chenershuai-PC:~# sudo chgrp chenershuai test1/
root@chenershuai-PC:~# ls
test1  模板
root@chenershuai-PC:~# ls -l
总用量 8
drwxr-xr-x 2 root chenershuai 4096 511 16:41 test1

4.2.2.2 改变文件拥有者, chown

chown --> change owner 要注意的是, 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变.

chown 的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录
或文件同时更改文件拥有者的话,直接加上 -R 的选项即可!我们来看看语法与范例:

语法: chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:组名 文件或目录

如下:

root@chenershuai-PC:~# mkdir test2
root@chenershuai-PC:~# ls -l
总用量 8
drwxr-xr-x 2 root root 4096 511 16:48 test2
drwxr-xr-x 2 root root 4096 59 10:37 模板
root@chenershuai-PC:~# chown -R chenershuai:chenershuai test2/
root@chenershuai-PC:~# ls -l
总用量 8
drwxr-xr-x 2 chenershuai chenershuai 4096 511 16:48 test2
drwxr-xr-x 2 root        root        4096 59 10:37 模板

知道如何改变文件的群组与拥有者了,那么什么时候要使用 chown 或 chgrp 呢?或许你会觉得奇怪吧?

​ 是的,确实有时候需要变更文件的拥有者的,最常见的例子就是在复制文件给你之外的其他人时, 我
们使用最简单的 cp 指令来说明好了:
cp 来源文件 目标文件

假设你今天要将test3 这个文件拷贝成为test3.bak 档名,且是要给 chenershuai 这个人,你可以这样做:

大爷的,就是手动修改下权限和组名:

root@chenershuai-PC:~# touch test3
root@chenershuai-PC:~# ls -l
总用量 4
-rw-r--r-- 1 root root    0 5月  11 16:51 test3
drwxr-xr-x 2 root root 4096 5月   9 10:37 模板
root@chenershuai-PC:~# cp test3 test3.bak
root@chenershuai-PC:~# ls -l
总用量 4
-rw-r--r-- 1 root root    0 5月  11 16:51 test3
-rw-r--r-- 1 root root    0 5月  11 16:52 test3.bak


root@chenershuai-PC:~# chown chenershuai:chenershuai test3.bak 
root@chenershuai-PC:~# ls -l
总用量 4
-rw-r--r-- 1 root        root           0 5月  11 16:51 test3
-rw-r--r-- 1 chenershuai chenershuai    0 5月  11 16:52 test3.bak

4.2.2.3 改变文件权限,chmod

权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。我们就来谈一谈:

  • 数字类型改变文件权限

    ​ Linux 文件的基本权限就有9个,分别是 owner/group/others 三种身份各有自己的 read/write/execute 权限,先复习一下刚刚上面提到的数据:文件的权限字符为:『-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 [-R] xyz 文件或目录
    选项与参数:
    xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

    所以, 我们设置 [-rwxrwx---] 的权限,就用如下命令:

    chmod [-R] 770 [文件]

    如: -rw-r--r-- 1 chenershuai chenershuai 0 5月 11 16:52 test3.bak, 设置 test3.bak 设置三级权限为 770

    root@chenershuai-PC:~# chmod -R 770 test3.bak
    root@chenershuai-PC:~# ls -l
    总用量 4
    -rwxrwx--- 1 chenershuai chenershuai    0 511 16:52 test3.bak
    
    
  • 符号类型改变文件权限

    ​ 还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是 (1) user (2) group (3) others 三种身份啦!那么我们就可以藉由 u, g, o 来代表三种身份的权限!

    此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成 r, w, x 啰!也就是可以使用底下的方式来看:

    在这里插入图片描述

    来实作一下吧!假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时,基本上就是

    文件设置为 user 具有 可读\可写\可执行权限, group 和 others 具有 可读\可执行权限

    命令如下:

    chmod -R u=rwx,g=rx,o=rx test4

    response:

    root@chenershuai-PC:~# touch test4
    root@chenershuai-PC:~# chmod -R u=rwx,g=rx,o=rx test4
    root@chenershuai-PC:~# ls -l
    总用量 4
    -rwxr-xr-x 1 root root    0 511 17:08 test4
    
    

    再来几例:

    1. 增加 test4 这个文件的三级均可写入的权限:

      chmod -R a+w test4

    2. 而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则

      chmod -R a-x test4

4.2.3 目录和文件之权限意义:

  • 1 权限对文件的重要性

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

    • 对于文件的 rwx来说, 主要都是针对『文件的内容』而言,与文件档名的存在与否没有关系喔!因为文件记录的是实际的数据嘛!

  • 2 权限对目录的重要性

    • w (modify contents of directory):
      这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底
      下这些权限:
      o 建立新的文件与目录;
      o 删除已经存在的文件与目录(不论该文件的权限为何!)
      o 将已存在的文件或目录进行更名;
      o 搬移该目录内的文件、目录位置。
      总之,目录的 w 权限就与该目录底下的文件名异动有关就对了啦!

如下: root 用户的目录/root/模板,

root@chenershuai-PC:~# ls -l
总用量 4
-rwxr-xr-x 1 root root    0 5月  11 17:08 test4
drwxr-xr-x 2 root root 4096 5月   9 10:37 模板

chenershuai@chenershuai-PC:~$ cd /root/模板
bash: cd: /root/模板: 权限不够

​ 来点易消化的-,现在假设『文件是一堆文件文件夹』,所以你可能可以在上面写/改一些资料。
而『目录是一堆抽屉』,因此你可以将文件夹分类放置到不同的抽屉去。 因此抽屉最大的目的是拿
出/放入文件夹喔!现在让我们汇整一下数据:

组件内容迭代物件rwx
文件详细资料 data文件文件夹读到文件内容修改文件内容执行文件内容
目录档名可分类抽屉读到档名修改档名进入该目录的权限(key)

!!! 其中最有趣的大概就属目录的 x 权限了!『档名怎么执行』?没道理嘛!其实,这个 x 权限设计,就相当于『该目录,也就是该抽屉的 “钥匙” 』啦! 没有钥匙你怎么能够打开抽屉呢?对吧!

记住,只有拥有 x 权限 ,方可进入文件夹!!!

4.2.3.1 目录权限来几发

大致的目录权限概念是这样,底下我们来看几个范例,让你了解一下啥是目录的权限

例子 1
root@chenershuai-PC:/# ls -l
drwx---r--   8 root        root              4096 5月  11 17:08 root

root@chenershuai-PC:~# ls -l
drwxr-xr-- 2 root root 4096 5月   9 10:37 模板

如上, 根目录/root权限 `drwx---r--`, 目录 `/root/模板`权限 `drwxr-xr--`,  现用其他用户 ls 这两个目录, /root 可展示, /root/模板没有权限.  因为 /root 没有 `x`权限,不能进入里面去访问其子目录 

例子 2

假设有个账号名称为 dmtsai,他的家目录在/home/dmtsai/,dmtsai 对此目录具有[rwx]的权限。 若在此目录下有个名为 the_root.data 的文件,该文件的权限如下:
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data
请问 dmtsai 对此文件的权限为何?可否删除此文件?

答:
如上所示,由于 dmtsai 对此文件来说是『others』的身份,因此这个文件他无法读、无法编辑也无法执行, 也就是说,他无法变动这个文件的内容就是了。
但是由于这个文件在他的家目录下, 他在此目录下具有 rwx 的完整权限,因此对于 the_root.data 这个『档名』来
说,他是能够『删除』的! 结论就是,dmtsai 这个用户能够删除 the_root.data 这个文件!


比如,如下自定义一个文件,设置为root用户和组,以及用户全权限:
chenershuai@chenershuai-PC:~$ ls -l soft/linux/
总用量 0
-rwx------ 1 root root 0 5月  12 10:37 dir.data

// 删除是会有提示,但总归是可以删除的, 毕竟是自己的`抽屉`嘛
chenershuai@chenershuai-PC:~$ rm soft/linux/dir.data 
rm:是否删除有写保护的普通空文件 'soft/linux/dir.data'?

4.2.4 Linux 文件种类和扩展名

4.2.4.1 linux 文件扩展名

​ 在 Windows 底下, 能被执行的文件扩展名通常是 .com .exe .bat 等等,而在 Linux 底下,只要你的权限当中具有 x 的话,例如[ -rwxr-xr-x ] 即代表这个文件具有可以被执行的能力喔!

底下有数种常用的扩展名:

  • .sh : 脚本或批处理文件 (scripts),因为批处理文件为使用 shell 写成的,所以扩展名就编成 .sh 啰;*
  • *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰
  • *.html, *.php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰! .html 的文件可使用网
    页浏览器来直接开启,至于 .php 的文件, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算
    后的网页结果呢!

4.3 Linux 目录配置

4.3.1 Linux 目录配置的依据–FHS

FHS --> Filesystem Hierarchy Standard 标准

​ 根据 FHS(注 2)的标准文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下, 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循 FHS 的标准。

可分享的(shareable)不可分享的(unshareable)
不变的(static)/usr 软件存放处/etc 配置文件
/opt (第三方协力软件)/boot (开机与核心档)
可变动的(variable)/var/mail (使用者邮件信箱)/var/run (程序相关)
/var/spool/news (新闻组)/var/lock (程序相关)

4.3.2 目录树(Directory Tree)

查看根目录 ls -l /

总用量 4194384
lrwxrwxrwx   1 root        root                 7 59 10:37 bin -> usr/bin
drwxr-xr-x   3 root        root              4096 59 10:44 boot
drwxr-xr-x   3 root        root              4096 59 16:59 data
drwxr-xr-x  19 root        root              3980 511 16:16 dev
drwxr-xr-x 129 root        root             12288 511 18:01 etc
drwxr-xr-x   3 root        root              4096 59 13:15 home
lrwxrwxrwx   1 root        root                39 59 10:37 initrd.img -> boot/initrd.img-4.15.0-30deepin-generic
lrwxrwxrwx   1 root        root                39 59 10:37 initrd.img.old -> boot/initrd.img-4.15.0-30deepin-generic
drwxr-xr-x   4 chenershuai chenershuai       4096 59 10:37 lastore
lrwxrwxrwx   1 root        root                 7 59 10:37 lib -> usr/lib
lrwxrwxrwx   1 root        root                 9 59 10:37 lib32 -> usr/lib32
lrwxrwxrwx   1 root        root                 9 59 10:37 lib64 -> usr/lib64
lrwxrwxrwx   1 root        root                10 59 10:37 libx32 -> usr/libx32
drwx------   2 root        root             16384 59 10:37 lost+found
drwxr-xr-x   5 root        root              4096 59 10:54 media
drwxr-xr-x   2 root        root              4096 59 10:37 mnt
drwxr-xr-x  11 root        root              4096 511 18:01 opt
dr-xr-xr-x 249 root        root                 0 511 16:16 proc
drwx---r--   8 root        root              4096 511 17:08 root
drwxr-xr-x  24 root        root               800 511 16:17 run
lrwxrwxrwx   1 root        root                 8 59 10:37 sbin -> usr/sbin
drwxr-xr-x   2 root        root              4096 59 10:37 srv
-rw-------   1 root        root        4294967296 59 10:37 swapfile
dr-xr-xr-x  13 root        root                 0 511 17:25 sys
drwxrwxrwt  16 root        root              4096 512 13:44 tmp
drwxr-xr-x  13 root        root              4096 59 10:39 usr
drwxr-xr-x  11 root        root              4096 59 10:40 var
lrwxrwxrwx   1 root        root                36 59 10:40 vmlinuz -> boot/vmlinuz-4.15.0-30deepin-generic
lrwxrwxrwx   1 root        root                36 59 10:40 vmlinuz.old -> boot/vmlinuz-4.15.0-30deepin-generic

图形化目录树架构如下图:

在这里插入图片描述

五 Linux 文件与目录管理

5.1 目录与路径

pwd 显示目前所在的目录

mkdir 建立目录

mkdir -P /parent/test  ## -P 会把相关父目录一起创建
mkdir -m 741 /parent/test ## -m 随便创建权限

rmdir (删除『空』的目录)


5.1.3 关于执行文件路径的变量: $PATH

5.2 文件与目录管理

5.2.1 文件与目录的检视: ls

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

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

​ 取得文件名或者是目录名称,一般的用途应该是在写程序的时候用来判断之用的啦~ 所以,这部分的指令可以用在第三篇内的 shell scripts 里头喔! 底下我们简单的以几个范例来谈一谈 basename 与dirname 的用途!

chenershuai@chenershuai-PC:~/soft$ basename settings.zip 
settings.zip

chenershuai@chenershuai-PC:~/soft$ dirname /home/chenershuai/soft/settings.zip 
/home/chenershuai/soft

5.3 文件内容查阅

cat 由第一行开始显示文件内容

tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!

nl 显示的时候,顺道输出行号!

more 一页一页的显示文件内容

less 与 more 类似,但是比 more 更好的是,他可以往前翻页!

head 只看头几行

tail 只看尾巴几行

od 以二进制的方式读取文件内容!

cat (concatenate) 连接文件并打印到标准输出设备上。

tac 反向输出

more 翻页查询

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

less 一页一页翻动

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

5.3.1 资料攫取

head 取出前面几行

tail 取出后面几行

5.3.2 非纯文本档: od

选项或参数:
-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 ;

如: 读取文件 /usr/bin/passwd

od -t c /usr/bin/passwd

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

​ 我们在 ls 这个指令的介绍时,有稍微提到每个文件在 linux 底下都会记录许多的时间参数, 其实是有三个主要的变动时间,那么三个时间的意义是什么呢?

  • modification time (mtime):当该文件的『内容数据』变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔! (默认)
  • status time (ctime):当该文件的『状态 (status)』改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。
  • access time (atime):当『该文件的内容被取用』时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读取/etc/man_db.conf , 就会更新该文件的 atime
date; ls -l test.conf ;ls -l --time=atime test.conf ;ls -l --time=ctime test.conf

5.4 文件和目录的默认权限和隐藏权限

​ 你知道当你建立一个新的文件或目录时,他的默认权限会是什么吗?呵呵!那就与 umask 这个玩意儿有关了!那么 umask 是在搞什么呢?基本上, umask 就是指定 『目前用户在建立文件或目录时候的权限默认值』, 那么如何得知或设定 umask 呢?他的指定条件以底下的方式来指定:

chenershuai@chenershuai-PC:~/soft$ umask
0022
chenershuai@chenershuai-PC:~/soft$ umask -S
u=rwx,g=rx,o=rx

注意:

umask 命令得到的 0022 ,取 后三位表示: u g o 分别需要减点的值; 例如 u 对应 0 (7-0 = 7 即为 rwx), g 对应 2 (7-2 = 5 即为rx) , o 对应 2 (7-2 = 5 即为rx)

只针对『文件』

若用户建立为『目录』,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,
预设权限如下:drwxrwxrwx

deepin 系统新建的文件和目录如下:

drwxr-xr-x 2 chenershuai chenershuai    4096 513 10:04 test
-rw-r--r-- 1 chenershuai chenershuai       0 513 09:53 test.conf

umask 的利用与重要性:专题制作

​ 『如果 umask 订定为 022 ,那新建的数据只有用户自己具有 w 的权限, 同群组的人只有 r 这个
可读的权限而已,并无法修改喔!』

umask 002

5.4.2 文件的隐藏属性

chattr(配置文件隐藏属性) change attribute

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 来配置文件案时,如果该文件被删除了,则数据内容其实还存在磁盘中,
 可以使用来救援该文件喔!
注意 1:属性设定常见的是 a 与 i 的设定值,而且很多设定值必须要身为 root 才能设定
注意 2:xfs 文件系统仅支援 AadiS 而已

root 目录下,

root@chenershuai-PC:/tmp# touch chattrtest
root@chenershuai-PC:/tmp# chattr +i chattrtest 
root@chenershuai-PC:/tmp# rm chattrtest 
rm: 无法删除'chattrtest': 不允许的操作
root@chenershuai-PC:/tmp# rm -rf chattrtest 
rm: 无法删除'chattrtest': 不允许的操作

+i 可以让一个文件无法被更动,对于需要强烈的系统安全的人来说, 真是相当的重要的!里头还有相当多的属性是需要 root 才能设定的呢!

lsattr (显示文件隐藏属性)

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

如:

root@chenershuai-PC:/tmp# lsattr chattrtest 
----i---------e---- chattrtest

5.4.3 文件特殊权限

SUID, SGID, SBIT

注意到了一件事,那就是,怎么我们的 /tmp 权限怪怪的? 还有,那个 /usr/bin/passwd 也怪怪的?怎么回事啊?看看先

chenershuai@chenershuai-PC:~$ ls -ld /tmp; ls -ld /usr/bin/passwd 
drwxrwxrwt 16 root root 4096 5月  13 11:01 /tmp
-rwsr-xr-x 1 root root 59680 5月   9 10:38 /usr/bin/passwd

t s 什么鬼?

  • Set UID

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。 那么 SUID 的权限对于一个文件的特殊功能是什么呢?基本上 SUID 有这样的限制与功能:

  • SUID 权限仅对二进制程序(binary program)有效;
  • 执行者对于该程序需要具有 x 的可执行权限;
  • 本权限仅在执行该程序的过程中有效 (run-time);
  • 执行者将具有该程序拥有者 (owner) 的权限。

5.4.4 观察文件类型 file

​ 如果你想要知道某个文件的基本数据,例如是属于 ASCII 或者是 data 文件,或者是 binary , 且其中有没有使用到动态函式库 (share library) 等等的信息,就可以利用 file 这个指令来检阅喔!举例来说:

chenershuai@chenershuai-PC:~/soft$ file test.conf 
test.conf: UTF-8 Unicode text

5.5 指令与文件的搜索

5.5.1 脚本文件名的搜索

which (寻找『执行档』)

[root@study ~]# which [-a] comman选项或参数:-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令

​ 这个指令是根据『PATH』这个环境变量所规范的路径,去搜寻『执行档』的档名~ 所以,重点是找出『执行档』而已!且 which 后面接的是『完整档名』喔!若加上 -a 选项,则可以列出所有的可以找到的同名执行文件,而非仅显示第一个而已!

5.5.2 文档名的搜索

​ 再来谈一谈怎么搜寻文件吧!在 Linux 底下也有相当优异的搜寻指令呦!通常 find 不很常用的!因为速度慢之外, 也很操硬盘!一般我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦! 为什么呢?因为 whereis 只找系统中某些特定目录底下的文件而已,locate 则是利用数据库来搜寻文件名,当然两者就相当的快速, 并且没有实际的搜寻硬盘内的文件系统状态,比较省时间啦!

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

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

whereis 只查询特定的几个目录, 可以使用 whereis -l 查询特定目录.

chenershuai@chenershuai-PC:~/soft$ whereis -l
bin: /usr/bin
bin: /usr/sbin
bin: /usr/lib
bin: /usr/lib64
bin: /etc
bin: /usr/games
bin: /usr/local/bin
bin: /usr/local/sbin
bin: /usr/local/etc
bin: /usr/local/lib
bin: /usr/local/games
bin: /usr/include
bin: /usr/local
bin: /usr/libexec
bin: /usr/share
bin: /opt/pbis/bin
bin: /home/chenershuai/soft/jdk1.8.0_40/bin
bin: /home/chenershuai/soft/jdk1.8.0_40/jre/bin
bin: /usr/local/maven3/bin
man: /usr/share/man/da
man: /usr/share/man/ko
man: /usr/share/man/zh_CN
man: /usr/share/man/gl
man: /usr/share/man/ca
man: /usr/share/man/ja
man: /usr/share/man/de
man: /usr/share/man/man8
man: /usr/share/man/es
man: /usr/share/man/id
man: /usr/share/man/man5
man: /usr/share/man/fi
man: /usr/share/man/pt_BR
man: /usr/share/man/sl
man: /usr/share/man/sv
man: /usr/share/man/hu
man: /usr/share/man/nl
man: /usr/share/man/fr.UTF-8
man: /usr/share/man/tr
man: /usr/share/man/pl
man: /usr/share/man/it
man: /usr/share/man/fr.ISO8859-1
man: /usr/share/man/cs
man: /usr/share/man/man1
man: /usr/share/man/ru
man: /usr/share/man/man7
man: /usr/share/man/pt
man: /usr/share/man/man4
man: /usr/share/man/man6
man: /usr/share/man/zh_TW
man: /usr/share/man/fr
man: /usr/share/man/uk
man: /usr/share/man/man3
man: /usr/share/info
src: /usr/src/mincores-0.2.0
src: /usr/src/linux-headers-4.15.0-30deepin-generic
src: /usr/src/bcmwl-6.30.223.271+bdcom
src: /usr/src/huawei-wmi-1.0
src: /usr/src/deepin-anything-0.0
src: /usr/src/linux-headers-4.15.0-30deepin

locate / updatedb

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

chenershuai@chenershuai-PC:~/soft$ locate test.conf
/etc/sane.d/test.conf
/home/chenershuai/soft/test.conf

find

[root@study ~]# 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 还要新的文件档名

范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出

[root@study ~]# find / -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?
# find / -mtime 3 有变动过的文件都被列出的意思!

范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出

[root@study ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个文件之间的新旧关系是很有用的!

​ 时间参数真是挺有意思的!我们现在知道 atime, ctime 与 mtime 的意义,如果你想要找出一天内被更动过的文件名, 可以使用上述范例一的作法。但如果我想要找出『4 天内被更动过的文件档名』呢?那可以使用『 find /var -mtime -4 』。那如果是『4 天前的那一天』就用『 find /var -mtime 4 』。有没有加上『+, -』差别很大喔!我们可以用简单的图示来说明一下:

find 相关的时间参数意义

​ 图: find 相关的时间参数意义

选项与参数:
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.... 的属性存在!
 

​ 如果你要找的文件是具有特殊属性的,例如 SUID 、文件拥有者、文件大小等等, 那么利用 locate 是没有办法达成你的搜寻的!此时 find 就显的很重要啦! 另外,find 还可以利用通配符来找寻档名呢!举例来说,你想要找出 /etc 底下檔名包含 httpd 的文件, 那么你就可以这样做:[root@study ~]# find /etc -name 'httpd’不但可以指定搜寻的目录(连同次目录),并且可以利用额外的选项与参数来找到最正确的档名!真是好好用! 不过由于 find 在寻找数据的时后相当的操硬盘!所以没事情不要使用 find 啦!有更棒的指令可以取代呦!那就是上面提到的 whereis 与 locate

七 Linux 磁盘和文件系统管理

7.1 认识 Linux 文件

​ Linux 最传统的磁盘文件系统 (filesystem) 使用的是 EXT2 这个啦!所以要了解 Linux 的文件系统就得要由认识 EXT2 开始!而文件系统是建立在磁盘上面的,因此我们得了解磁盘的物理组成.

7.1.2 文件系统特性

​ 我们都知道磁盘分区完毕后还需要进行格式化(format),之后操作系统才能够使用这个文件系统。 为什么需要进行『格式化』呢?这是因为每种操作系统所设定的文件属性/权限并不相同, 为了存放这些文件所需的数据,因此就需要将分区槽进行格式化,以成为操作系统能够利用的『文件系统格式(filesystem)』。

​ 传统的磁盘与文件系统之应用中,一个分区槽就是只能够被格式化成为一个文件系统,所以我们可以说一个 filesystem 就是一个 partition。但是由于新技术的利用,例如我们常听到的 LVM 与软件磁盘阵列(software raid), 这些技术可以将一个分区槽格式化为多个文件系统(例如 LVM),也能够将多个分区槽合成一个文件系统(LVM, RAID)! 所以说,目前我们在格式化时已经不再说成针对 partition 来格式化了, 通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区槽喔

7.5 内存置换空间(swap)之建置

物理内存不足,使用置换空间.

​ 那当内存不足的时候,为了让后续的程序可以顺利的运作,因此在内存中暂不使用的程序与数据就会被挪到 swap 中了。 此时内存就会空出来给需要执行的程序加载。由于swap 是用磁盘来暂时放置内存中的信息,所以用到 swap 时,你的主机磁盘灯就会开始闪个不停啊!

九 vim 程序编辑器

9.1 vi 与 vim

vi三种模式

在这里插入图片描述

9.2 按键说明

9.2.2 按键说明

第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等

见 <鸟哥的Linux私房菜> 一书 对应章节

9.3 vim 额外功能

9.3.1 区块选择(visual block)

挺好玩的功能

区块选择的按键意义

  • v 字符选择,会将光标经过的地方反白选择!
  • V 列选择,会将光标经过的列反白选择!
  • [Ctrl]+v 区块选择,可以用长方形的方式选择资料
  • y 将反白的地方复制起来
  • d 将反白的地方删除掉
  • p 将刚刚复制的区块,在游标所在处贴

注意: 一般模式下操作

9.3.2 多文件编辑

多文件编辑的按键:

  • n 编辑下一个文件:
  • N 编辑上一个文件:
  • files 列出目前这个 vim 的开启的所有

9.3.3 多窗口功能

:sp [文件名]

9.3.4 vim 挑字补全功能

类似 html 文件中 css 属性提示功能.

十 认识和学习BASH

​ 在 Linux 的环境下,如果你不懂 bash 是什么,那么其他的东西就不用学了!

​ 因为前面几章我们使用终端机下达指令的方式, 就是透过 bash 的环境来处理的喔!所以说,他很重要吧!bash 的东西非常的多,包括变量的设定与使用、 bash 操作环境的建置、数据流重导向的功能,还有那好用的管线命令!好好清一清脑门,准备用功去啰~ _ 这个章节几乎是所有指令列模式 (command line) 与未来主机维护与管理的重要基础,一定要好好仔细的阅读喔!!

10.1 认识 BASH 这个 Shell

​ 只要能够操作应用程序的接口都能够称为壳程序。狭义的壳程序指的是指令列方面的软件,包括本章要介绍的 bash 等。 广义的壳程序则包括图形接口的软件!因为图形接口其实也能够操作各种应用程序来呼叫核心工作啊! 不过在本章中,我们主要还是在使用 bash 啦!

文字接口 shell?

远程管理:文字接口就是比较快!

Bash shell 的功能

  • 命令编修能力(history):

    默认记忆 1000 个使用过的命令.

  • 命令别名设定功能(alias):

    alias lm=‘ls -al’ # lm 命令代替 ls -al

    // session 级别

  • 工作控制, 前景背景控制

    第十六章介绍

  • 程序化脚本(shell script)

    第十二章介绍

  • 通配符(Wildcard)

    如: ls -l /usr/bin/X*

查询指令是否为 Bash shell 的内建命令: type

​ 我怎么知道这个指令是来自于外部指令(指的是其他非 bash 所提供的指令) 或是内建在 bash 当中的呢? 嘿嘿!利用 type 这个指令来观察即可!

指令下达与快速编辑按钮

\[Enter] 表示换行操作

另外,当你所需要下达的指令特别长,或者是你输入了一串错误的指令时,你想要快速的将这串指令整个删除掉,一般来说,我们都是按下删除键的。 有没有其他的快速组合键可以协助呢?是有的!常见的有底下这些

[ctrl]+u/[ctrl]+k: 分别是从光标处向前删除指令串 ([ctrl]+u) 及向后删除指令串 ([ctrl]+k)。

[ctrl]+a/[ctrl]+e: 分别是让光标移动到整个指令串的最前面 ([ctrl]+a) 或最后面 ([ctrl]+e

10.2 shell 的变量功能

10.2.2 变量的取用与设定:echo, 变量设定规则, unset

  • 变数的取用: echo

    echo $JAVA_HOME

    // /home/****/soft/jdk1.8.0_40

  • 变量的设定规则

    • 变量与变量内容以一个等号『=』来连结

    • 等号两边不能直接接空格符,如下所示为错误:『myname = VBird』或『myname=VBird Tsai』

    • 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:『2myname=VBird』

    • 变量内容若有空格符可使用双引号『"』或单引号『’』将变量内容结合起来,但

      • 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
        『var=“lang is $LANG”』则『echo $var』可得『lang is zh_TW.UTF-8』
      • 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
        『var=‘lang is $LANG’』则『echo $var』可得『lang is $LANG』
    • 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, , 空格符, '等)变成一般字符,如:
      『myname=VBird\ Tsai』


  • 变量设置的取消

    unset name

10.2.3 环境变量的功能

  • envenv 观察环境变量和常见环境变量说明

    env 是 environment (环境) 的简写啊,列举出所有的环境变量信息.

    • $:(关于本 shell 的 PID)

      钱字号本身也是个变量喔!这个咚咚代表的是『目前这个 Shell 的线程代号』,亦即是所谓的 PID
      (Process ID)。 更多的程序观念,我们会在第四篇的时候提及。想要知道我们的 shell 的 PID ,
      就可以用:『 echo $$ 』即可!出现的数字就是你的 PID 号码。

    • ?:(关于上个执行指令的回传值)虾密?

      问号也是一个特殊的变数?没错!在 bash 里面这个变量可重要的很! 这个变数是:『上一个执行的指令所回传的值』, 上面这句话的重点是『上一个指令』与『回传值』两个地方。当我们执行某些指令时,这些指令都会回传一个执行后的代码。一般来说,如果成功的执行该指令,则会回传一个 0 值,如果执行过程发生错误,就会回传『错误代码』才对!一般就是以非为 0 的数值来取代。 我们以底下的例子来看

  • export: 自定义变量转成环境变量

    自定义变量和环境变量的区别

    谈谈父程序子程序 : 例如执行一个bash,当前在用户 zoro 下, 执行 sudo -i 进入root用户支配下; zoro 用户下的bash就是父程序,而 root下的bash 就是子程序.

    子程序仅会继承父程序的环境变量, 子程序不会继承父程序的自定义变量啦!

10.2.4 影响显示结果的语系变量 (locale)

10.2.5 变量的有效范围

在学理方面,为什么环境变量的数据可以被子程序所引用呢?这是因为内存配置的关系!理论上是这样的:

  •  当启动一个 shell,操作系统会分配一记忆区块给 shell 使用,此内存内之变量可让子程序取用
  •  若在父程序利用 export 功能,可以让自定义变量的内容写到上述的记忆区块当中(环境变量);
  •  当加载另一个 shell 时 (亦即启动子程序,而离开原本的父程序了),子 shell 可以将父 shell 的环境变量所在的记忆区块导入自己的环境变量区块

10.2.6 变量键盘读取、数组与宣告: read, array, declare

10.4 Bash Shell 的操作环境

10.4.1 source :读入环境配置文件的指令

竟然如此眼熟, 配的起茧的配置变量生效, 诚然就是此命令 source /etc/profile.

利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中!

10.4.5 通配符和特殊符号

常用通配符:

符号意义
*代表『 0 个到无穷多个』任意字符
?代表『一定有一个』任意
[ ]同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
[ - ]若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^]若中括号内的第一个字符为指数符号, 那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意

常用特殊字符:

符号内容
#批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不执行
\跳脱符号:将『特殊字符或通配符』还原成一般字符
|管线 (pipe):分隔两个管线命令的界定(后两节介绍)
;连续指令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同
~用户的家目录
$取用变数前导符:亦即是变量之前需要加的变量取代值
&工作控制 (job control):将指令变成背景下工作
!逻辑运算意义上的『非』 not 的意思!
/目录符号:路径分隔的符号
>, >>数据流重导向:输出导向,分别是『取代』与『累加』
<, <<数据流重导向:输入导向 (这两个留待下节介绍)
’ ’单引号,不具有变量置换的功能 ($ 变为纯文本)
" "具有变量置换的功能! ($ 可保留相关功能)
两个『 ` 』中间为可以先执行的指令,亦可使用 $( )( ) 在中间为子 shell 的起始与结束
{ }在中间为命令区块的组合!

以上为 bash 环境中常见的特殊符号汇整!理论上,你的『档名』尽量不要使用到上述的字符

10.5 数据流重导向

10.5.1 什么是数据流重导向

​ 不管正确或错误的数据都是默认输出到屏幕上,所以屏幕当然是乱乱的!那能不能透过某些机制将这两股数据分开呢? 当然可以啊!那就是数据流重导向的功能啊!数据流重导向可以将 standard output (简称 stdout) 与 standard error output (简称 stderr) 分别传送到其他的文件或装置去,而分别传送所用的特殊字符则如下所示

  1. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
  2. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
  3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>

ls -l > ~/stdout.mdls -l 结果 输入到文件stdout.md中.

在执行一次,并不会累计, 使用 >> 会累加到文件中.

10.5.1.1 /dev/null 垃圾桶黑洞装置与特殊

比如命令 find /home -name .bashrc 2> /dev/null 错误日志导入黑洞中.

10.5.1.2 standard input : < 与 <<

cat > catfile < ~/.bashrc < 意思是把~/.bshrc文件中的内容输入到文件catfile中.

<< 这个连续两个小于的符号了。 他代表的是『结束的输入字符』的意思!举例来讲:『我要用 cat 直接将输入的讯息输出到 catfile 中, 且当由键盘输入 eof 时,该次输入就结束』

cat > catfile << "eof"
测试1
测试2
结束eof
eof

## 浏览文件`catfile`,内容如下:
测试1
测试2
结束eof

10.5.2 命令执行的判断依据: ;, && ,||

10.5.2.1 ; 连续指令下达–不考虑指令相关性

不考虑指令相关性的连续指令下达 (;) ,

在某些时候,我们希望可以一次执行多个指令,例如在关机的时候我希望可以先执行两次 sync 同步化写入磁盘后才 shutdown 计算机,那么可以怎么作呢?这样做呀:

sync; sync; shutdown -h now
10.5.2.2 && 和 || 连续指令下达–考虑指令相关性

&& 与

|| 或

例1: 判断是否存在目录 /zoro,如果存在则创建目录lufi.

ls ~/zoro && mkdir ~/zoro/lufi

10.6 管线命令(pipe)

​ 假设我们想要知道 /etc/ 底下有多少文件,那么可以利用 ls /etc 来查阅,不过, 因为 /etc 底下的文件太多,导致一口气就将屏幕塞满了~不知道前面输出的内容是啥?此时,我们可以透过 less 指令的协助,利用

 ls -al /etc | less

​ 如此一来,使用 ls 指令输出后的内容,就能够被 less 读取,并且利用 less 的功能,我们就能够前后翻动相关的信息了!

??

2>&1

10.6.1 攫取命令 : cut , grep

​ 什么是撷取命令啊?说穿了,就是将一段数据经过分析后,取出我们所想要的。或者是经由分析关键词,取得我们所想要的那一行! 不过,要注意的是,一般来说,撷取讯息通常是针对『一行一行』来分析的, 并不是整篇讯息分析的喔~底下我们介绍两个很常用的讯息撷取命令:

10.6.1.1 cut

以将一段讯息的某一段给他『切』出来,以 为单位喔!

cut -d'分隔字符' -f fields <==用于有特定分隔字符
cut -c 字符区间 <==用于排列整齐的讯息
选项与参数:
	-d :后面接分隔字符。与 -f 一起使用;
	-f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
	-c :以字符 (characters) 的单位取出固定字符区

如: echo ${PATH} | cut -d ':' -f 2 获取环境变量的第2个配置. (以:分割环境变量,类似java 的 *split(":").[i])

10.6.1.2 grep

​ 刚刚的 cut 是将一行讯息当中,取出某部分我们想要的,而 grep 则是分析一行讯息, 若当中有我们所需要的信息,就将该行拿出来~简单的语法是这样

grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔

例如:

输出包括10000036013关键字的行

tail -fn 400 zoroOrderWeb.log | grep --color=auto '10000036013'

10.6.2 排序命令: sort, wc, uniq

sort

​ 是很有趣的指令,他可以帮我们进行排序,而且可以依据不同的数据型态来排序喔! 例如数字与文字的排序就不一样。此外,排序的字符与语系的编码有关,因此, 如果您需要排序时,建议使用 LANG=C 来让语系统一,数据排序比较好一些.

last | cut -d ' ' -f1 | sort

uniq

​ 如果我排序完成了,想要将重复的资料仅列出一个显示,可以怎么做

last | cut -d ' ' -f1 | sort | uniq

wc

​ 如果我想要知道 /etc/man_db.conf 这个文件里面有多少字?多少行?多少字符的话, 可以怎么做呢?其实可以利用 wc 这个指令来达成喔!他可以帮我们计算输出的讯息的整体数据!

wc [-lwm]
选项与参数:
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;

如下:

chenershuai@chenershuai-PC:~$ cat > test.conf
Pain is inevitable, Suffering is optional
^C 
chenershuai@chenershuai-PC:~$ cat test.conf
Pain is inevitable, Suffering is optional
chenershuai@chenershuai-PC:~$ cat test.conf | wc
      1       6      42

## 1   6    42 分表[行数, 字数, 字符数]

10.6.3 双向重导向 tee

tee的工作流程示意图

tee 会同时将数据流分送到文件去与屏幕 (screen);而输出到屏幕的,其实就是 stdout ,那就可以让下个指令继续处理

例:

last | tee last.list | cut -d " " -f1
# 这个范例可以让我们将 last 的输出存一份到 last.list 文件中;

10.6.4 字符转换命令: tr, col, join, paste, expand

tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换!

col -x :将 tab 键转换成对等的空

join

​ 看字面上的意义 (加入/参加) 就可以知道,他是在处理两个文件之间的数据, 而且,主要是在处理『两个文件当中,有 “相同数据” 的那一行,才将他加在一起』的意思。我们利用底下的简单例子来说

paste

​ 这个 paste 就要比 join 简单多了!相对于 join 必须要比对两个文件的数据相关性, paste 就直接『将两行贴在一起,且中间以 [tab] 键隔开』而已!

10.6.5 分区命令

​ 如果你有文件太大,导致一些携带式装置无法复制的问题,嘿嘿!找 split 就对了! 他可以帮你将一个大文件,依据文件大小或行数来分区,就可以将大文件分区成为小文件了! 快速又有效啊!真不错

split [-bl] file PREFIX

选项与参数:
-b :后面可接欲分区成的文件大小,可加单位,例如 b, k, m 等;
-l :以行数来进行分区。
PREFIX :代表前导符的意思,可作为分区文件的前导文字。

例如: 我的 /etc/services 有 19k, 可以分成1k的多个文件?

split -b 1k /etc/services services

## 分成多个1k的文件
-rw-r--r-- 1 chenershuai         chenershuai            751 616 14:44 servicesas
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesar
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesaq
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesap
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesao
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesan
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesam
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesal
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesak
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesaj
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesai
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesah
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesag
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesaf
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesae
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesad
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesac
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesab
-rw-r--r-- 1 chenershuai         chenershuai           1024 616 14:44 servicesaa

例: 合并多个文件

cat services* >> servicesback

ls -l /tmp/servicesback
-rw-r--r-- 1 chenershuai chenershuai 19183 6月  16 14:49 servicesback

10.6.6 参数代换: xargs

​ 这个玩意儿就是在产生某个指令的参数的意思! xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的资料分隔成为 arguments 。

10.6.7 关于减号 - 的用途

​ 管线命令在 bash 的连续的处理程序中是相当重要的!另外,在 log file 的分析当中也是相当重要的一环, 所以请特别留意!另外,在管线命令当中,常常会使用到前一个指令的 stdout 作为这次的stdin , 某些指令需要用到文件名 (例如 tar) 来进行处理时,该 stdin 与 stdout 可以利用减号 “-” 来替代, 举例来说:

mkdir /tmp/homeback
tar -cvf - /home | tar -xvf - -C /tmp/homebac

​ 上面这个例子是说:『我将 /home 里面的文件给他打包,但打包的数据不是纪录到文件,而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 』。后面的这个 - 则是取用前一个指令的 stdout, 因此,我们就不需要使用 filename 了!这是很常见的例子喔!注意注意!

第十一章 正规表示法与文件格式化处理

11.1 什么是正规表示法

​ 简单的说,正规表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为, 正规表示法透过一些特殊符号的辅助,可以让使用者轻易的达到『搜寻/删除/取代』某特定字符串的处理程序!

11.2 基础正则表示法

11.2.1 语系对正则表示法的影响

举例来说,在英文大小写的编码顺序中,zh_TW.big5 及 C 这两种语系的输出结果分别如下:

LANG=C 时:0 1 2 3 4 ... A B C D ... Z a b c d ...z
 LANG=zh_TW 时:0 1 2 3 4 ... a A b B c C d D ... z Z

​ 上面的顺序是编码的顺序,我们可以很清楚的发现这两种语系明显就是不一样!如果你想要撷取大写字符而使用 [A-Z] 时, 会发现 LANG=C 确实可以仅捉到大写字符 (因为是连续的) ,但是如果LANG=zh_TW.big5 时,就会发现到, 连同小写的 b-z 也会被撷取出来!因为就编码的顺序来看,big5 语系可以撷取到『 A b B c C … z Z 』这一堆字符哩! 所以,使用正规表示法时,需要特别留意当时环境的语系为何, 否则可能会发现与别人不相同的撷取结果.

  • 查询linux使用的语系:
PC:~$ echo $LANG
zh_CN.UTF-8
  • 特殊符号

另外,为了要避免这样编码所造成的英文与数字的撷取问题,因此有些特殊的符号我们得要了解一下的! 这些符号主要有底下这些意义:

特殊符号代表意义
[:alnum:]代表英文大小写字符及数字,亦即 0-9, A-Z, a-z
[:alpha:]代表任何英文大小写字符,亦即 A-Z, a-z
[:blank:]代表空格键与 [Tab] 按键两者
[:cntrl:]代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del… 等等
[:digit:]代表数字而已,亦即 0-9
[:graph:]除了空格符 (空格键与 [Tab] 按键) 外的其他所有按
[:lower:]代表小写字符,亦即 a-z
[:print:]代表任何可以被打印出来的字符
[:punct:]代表标点符号 (punctuation symbol),亦即:" ’ ? ! ; : # $…
[:upper:]代表大写字符,亦即 A-Z
[:space:]任何会产生空白的字符,包括空格键, [Tab], CR 等
[:xdigit:]代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字符

​ 尤其上表中的[:alnum:], [:alpha:], [:upper:], [:lower:], [:digit:] 这几个一定要知道代表什么意思,因为他要比 a-z 或 A-Z 的用途要确定的很!好了,底下就让我们开始来玩玩进阶版的 grep

11.2.2 grep 的一些进阶使用

grep [-A] [-B] [--color=auto] '搜寻字符串' filename

选项与参数:
    -A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
    -B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;
    --color=auto 可将正确的那个撷取数据列出颜色

范例一: 将捉到的关键词显色,且加上行号来表示:
dmesg | grep -A 1 -n --color=auto 'pagecache' ## -n 显示行号

11.2.3 基础正规表示法练习

前提:

语系已经使用『 export LANG=C; export LC_ALL=C 』的设定值;
grep 已经使用 alias 设定成为『 grep --color=auto

下载文件:

wget http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt

例题一: 搜寻特定字符串

grep -n 'the' regular_express.txt

反向选择: 搜寻没有制定字符串的行才显示在屏幕上

grep -nv 'the' regular_express.txt

例题二 利用中括号[] 来搜寻集合字符

grep -n 't[ae]st' regular_express.txt

*@*-PC:~$ grep -n 't[ae]st' regular_express.txt 
8:I can't finish the test.
9:Oh! The soup taste good.

不要oo 前面的 g

grep -n '[^g]oo' regular_express.txt

2:apple is my favorite food.
3:Football game is not use feet only.
18:google is the best tools for search keyword.
19:goooooogle yes!

不要oo 前面的 小写字符

grep -n '[^a-z]oo' regular_express.txt

3:Football game is not use feet only.

也可以使用特殊符号,

grep -n '[^[:lower:]]oo' regular_express.txt 3:Football game is not use feet only.

获取有数字的行

grep -n '[0-9]' regular_express.txt
5:However, this dress is about $ 3183 dollars.
15:You are the best is mean you are the no. 1.
例题三 行首和行尾字符 ^ $

查询制定字符串在行首的行

grep -n '^the' regular_express.txt 
12:the symbol '*' is represented as start.

查询 行首为消息的行

grep -n '^[a-z]' regular_express.txt

2:apple is my favorite food.
4:this dress doesn't fit me.
10:motorcycle is cheap than car.
12:the symbol '*' is represented as start.
18:google is the best tools for search keyword.
19:goooooogle yes!
20:go! go! Let's go.

查询行尾结束为小数点(.)的行, 此处小数点有特殊意义,需要转义(\ 跳脱字符解除其特殊意义);

*-PC:~$ grep -n '\.$' regular_express.txt 

1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
4:this dress doesn't fit me.
10:motorcycle is cheap than car.
11:This window is clear.
12:the symbol '*' is represented as start.
15:You are the best is mean you are the no. 1.
16:The world <Happy> is the same with "glad".
17:I like dog.
18:google is the best tools for search keyword.
20:go! go! Let's go.

grep '^$' 查询到空行

平时常用的配置文件会存在空行和#注释行, 查询时可以通过grep -v '^$' /etc/**.conf | grep -v '^#' 排除

例题四 任意一个字符.和重复字符*

这里正则表达式和通配符不同, 切记!!!

 . (小数点):代表『一定有一个任意字符』的意思;

 * (星星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合

例子说话:

  1. 查询包含 g??d 字符串行

    ~$ grep -n 'g..d' regular_express.txt 
    1:"Open Source" is a good mechanism to develop programs.
    9:Oh! The soup taste good.
    16:The world <Happy> is the same with "glad".
    
  2. 查询包含 o??... 字符串行, 查询包含多个o 的字符串行

    ~$ grep -n 'oo*' regular_express.txt
    
    1:"Open Source" is a good mechanism to develop programs.
    2:apple is my favorite food.
    3:Football game is not use feet only.
    4:this dress doesn't fit me.
    5:However, this dress is about $ 3183 dollars.
    6:GNU is free air not free beer.
    9:Oh! The soup taste good.
    10:motorcycle is cheap than car.
    11:This window is clear.
    12:the symbol '*' is represented as start.
    13:Oh!	My god!
    14:The gd software is a library for drafting programs.
    15:You are the best is mean you are the no. 1.
    16:The world <Happy> is the same with "glad".
    17:I like dog.
    18:google is the best tools for search keyword.
    19:goooooogle yes!
    20:go! go! Let's go.
    
例题五 限定连续 RE 字符范围 {}

{} 必须使用跳脱字符’'失去特殊意义.

  1. 找到两个o字符串行

    ~$ grep -n 'o\{2\}' regular_express.txt 
    
    1:"Open Source" is a good mechanism to develop programs.
    2:apple is my favorite food.
    3:Football game is not use feet only.
    9:Oh! The soup taste good.
    18:google is the best tools for search keyword.
    19:goooooogle yes!
    
  2. 要找出 g 后面接 2 到 5 个 o 行

    grep -n 'go\{2,5\}' regular_express.txt 
    
    1:"Open Source" is a good mechanism to develop programs.
    9:Oh! The soup taste good.
    18:google is the best tools for search keyword.
    19:goooooogle yes!
    

11.2.4 基础正规表示法字符汇整(characters)

11.2.5 sed 工具

范例一:将 /etc/passwd 的内容列出并且打印行号,同时,请将第 2~5 行删除!

[dmtsai@study ~]$ nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略)....

范例四:我想将第 2-5 行的内容取代成为『No 2-5 number』呢?

[dmtsai@study ~]$ nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(后面省略).....	

11.4 文件的格式化与相关处理

11.4.1 格式化打印: printf

pringf '打印格式' 实际内容

范例一:将刚刚上头数据的文件 (printf.txt) 内容仅列出姓名与成绩:(用 [tab] 分隔)

shuai-PC:~$ printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)
Name	 Chinese	 English	 Math	 Average	 
DmTsai	 80	 60	 92	 77.33	 
VBird	 75	 55	 80	 70.00	 
Ken	 60	 90	 70	 73.33

​ 由于 printf 并不是管线命令,因此我们得要透过类似上面的功能,将文件内容先提出来给 printf 作为后续的资料才行.

范例二:将上述资料关于第二行以后,分别以字符串、整数、小数点来显示:

shuai-PC:~$ printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt | grep -v Name) 
    DmTsai    80    60    92    77.33 
     VBird    75    55    80    70.00 
       Ken    60    90    70    73.33 

11.4.2 awk: 好用的数据处理工具

​ 相较于 sed 常常作用于一整个行的处理, awk 则比较倾向于一行当中分成数个『字段』来处理。因此,awk 相当的适合处理小型的数据数据处理呢!awk 通常运作的模式是这样的:

awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename

例1:

last -n 5 | awk '{print $1 "\t" $3}'  ## 

透过 print 的功能将字段数据列出来! 预取 第一栏和第三栏.

11.4.3 文件比对工具

diff

两个文件, 行级别.

前提:

[dmtsai@study ~]$ mkdir -p /tmp/testpw <==先建立测试用的目录
[dmtsai@study ~]$ cd /tmp/testpw
[dmtsai@study testpw]$ cp /etc/passwd passwd.old
[dmtsai@study testpw]$ cat /etc/passwd | sed -e '4d' -e '6c no six line' > passwd.new
# 注意一下, sed 后面如果要接超过两个以上的动作时,每个动作前面得加 -e 才行!
# 透过这个动作,在 /tmp/testpw 里面便有新旧的 passwd 文件存在了!

范例一:比对 passwd.old 与 passwd.new 的差异:


$ diff passwd.old passwd.new
4d3 <==左边第四行被删除 (d) 掉了,基准是右边的第三行
< adm:x:3:4:adm:/var/adm:/sbin/nologin <==这边列出左边(<)文件被删除的那一行内容
6c5 <==左边文件的第六行被取代 (c) 成右边文件的第五行
< sync:x:5:0:sync:/sbin:/bin/sync <==左边(<)文件第六行内容
---
> no six line <==右边(>)文件第五行内容

十三章,系统

13.1 top 命令

在这里插入图片描述
第一行显示的是系统的概况

当前时间、系统的运行时间、登录的用户数以及系统的平均负载。
平均负载有3个值:最近1分钟的,最近5分钟的,最近15分钟的平均负载。
load average 数据每隔5秒钟检查一次活跃的进程数,然后按照特定的算法计算的数值,如果除以CPU逻辑数量大于5,就证明系统在超负荷运转了

第二行显示了进程:
top命令的输出中将进程叫作任务(task):
总进程,运行、休眠、停止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。

第三行显示CPU信息:
top根据进程的属主(用户还是系统)和进程的状态(运行、 空闲还是等待)将CPU利用率分成几类输出。
0.0%us【user space】— 用户空间占用CPU的百分比。
1.5%sy【sysctl】— 内核空间占用CPU的百分比。
0.0%ni【】— 改变过优先级的进程占用CPU的百分比
98.5%id【idolt】— 空闲CPU百分比
0.0%wa【wait】— IO等待占用CPU的百分比
0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0%si【Software Interrupts】— 软中断占用CPU的百分比

第四行显示内存信息:
5946.1 total 总内存
962 free 空闲内存
2945.7 used 已使用
2038.4 buff/cache 缓存的内存量

第五行显示swap交换分区信息:
5119 total总大小
5119 free空闲
0 used 已使用
2728.6 avail Mem 缓冲的交换区总量

最后显示当前运行中的进程详细列表
PID:进程的ID。
USER:进程属主的名字。
PR:进程的优先级。
NI:进程的谦让度值。
VIRT:进程占用的虚拟内存总量。
RES:进程占用的物理内存总量。
SHR:进程和其他进程共享的内存总量。
S:进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)。
%CPU:进程使用的CPU时间比例。
%MEM:进程使用的内存占可用内存的比例。
TIME+:自进程启动到目前为止的CPU时间总量。
COMMAND:进程所对应的命令行名称,也就是启动的程序名。

在top基本视图中,按大写P 可查看CPU占用从大到小的进程
在这里插入图片描述
其他交互命令

h 显示帮助画面,给出一些简短的命令总结说明
k 终止一个进程。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序
r 重新安排一个进程的优先级别
S 切换到累计模式
s 改变两次刷新之间的延迟时间(单位为s
f或者F 从当前显示中添加或者删除项目
o或者O 改变显示项目的顺序
l 切换显示平均负载和启动时间信息
m 切换显示内存信息
t 切换显示进程和CPU状态信息
c 切换显示命令名称和完整命令行
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中

curl 使用

curl 的用法指南

curl -X POST 'http://localhost:8080/guanService/guanMerchantRel/getBoundMerchantByVO.do ’ --data ‘head={“client”:“1”,“token”:“123”}&plain={“data”:{“guanName”:"",“type”:“pc”,“startIndex”:1,“pageSize”:20,“obj”:{“guanId”:23}}}’

使用总结

1.1 统计文件夹中文件个数

ls -l ./|grep "^-"|wc -l

1.2

附录 命令全写

命令完整
cdchange directory
chownchange owner
chgrpchange group
chmod-修改权限
mkdirmake directory创建文件夹
pwdprinting working directory显示当前工作目录
echo显示, 印出
lslist文件和目录的检视
catconcatenate连接文件并输出文件内容
umaskumask设置文件默认权限
chattrchange attribute改变文件属性(例如隐藏,不可删除等)
ifconfiginterface config显示, 印出网络接口配置
bashBourne Again SHellshell 的一个版本名称
dfdisk filelinux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
envenvironmentlist出 环境变量
last可以查得系统上面有登入主机者的身份
grepglobal regular expression print全面搜索正则表达式并搜索出来
RERE字符regular express 字符
sedStream Editor流编辑器
curlClient Url客户端URL 工具
awkAWK 是一种处理文本文件的语言,是一个强大的文本分析工具。AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

附录 目录含义:

/usr/usr (unix software resource)
/var/var (variable)

附录 部分命令思维图

https://blog.csdn.net/nhdzppx/article/details/106966285

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值