《Linux私房菜》阅读笔记,此文章超长,不值得阅读,持续更新中

《Linux私房菜》阅读笔记整理

chapter 0

CPU

central processing unit

主要作用,管理和运算 (算数逻辑单元,控制单元)

CPU的重点在与 运算和判断,这些数据来自于内存

目前主流的CPU是双核以上,原本的单核是指仅有一个运算单元,多核是指在一个CPU壳子里装了多个运算内核

CPU 的性能对比

1 内部的微指令集

2 CPU的频率 -- 每秒CPU的工作次数

比如某款CPU频率 3GHZ 则其每秒可进行 3 x 10的9次方 工作

外频 内频

外频 : CPU与外部组件进行数据传输,运算的频率

内频: CPU内部用来加速性能的一个倍数

两者相乘才是CPU的频率

软件程序运行

设计出一种人类能看懂的语言,然后创造一种“编译器”来将人类写的程序语言转换为机器语言,常见的编译器语言,c c++

操作系统

一组程序,用来管理计算机所有活动以及驱动系统中所有硬件

让CPU开始判断逻辑与运算数值,让内存开始加载数据

以上就是操作系统的内核

硬件由内核管理,那想要去开发软件,就需要去参考这个内核的先关功能,因此操作系统提供了一组开发接口出来

1 操作系统的内核是参考硬件规格写的,所以同一个操作系统不能在不同的硬件架构下运行

2 应用程序的开发是参考操作系统提供的开发接口,所以该应用程序只能在该操作系统中运行

比如,window的软件不能再Linux中运行

内核

内核主要在于管理硬件,提供合理的资源分配,比如CPU资源 内存使用资源等

  • 程序管理

多任务环境 --- 一部计算机可能同时有很多工作在等待CPU运算处理,内核需要控制这些工作,让CPU做有效分配

良好的CPU调度机制(CPU先让那个工作开始运行),可以加快整体系统性能

  • 内存管理

控制系统的内存

系统所有的程序代码和数据都必须要先放在内存里

  • 文件系统管理

比如数据输入输出 I/O

如果内核不认识某个文件系统,则无法使用此格式的文件

  • 设备驱动
内存

CPU读取的数据都来自与内存,不管是软件程序还是数据,都要先读入内存才可以被使用

个人计算机的内存为

内存容量也很重要,因为数据要先存入内存中

一般内存越大 系统越快,因为不用释放内存内部数据

chapter 1

什么是Linux

linux 就是一套操作系统

计算机由一堆硬件设备组成,操作系统用户管理控制这些硬件资源(内核)

不止如此,为了程序员可以更好的开发软件,操作系统还提供了一组系统调用接口

Linux 提供了一个完整的操作系统中,最底层的硬件控制和资源管理的完整架构,这个是沿用Unix而来的,相当稳定且强大

Linux distributions

linux 是操作系统最底层的内核以及其提供的内核管理工具,任何都可以获取源码并执行这个内核程序

随着Linux使用者逐渐增多,可以在Linux上运行的软件也越来越多,Linux + 各种软件 就可以是一个相当完整的操作系统

为了让用户可以接触到Linux,有人将 Linux 与可运行的软件集成起来,加上 一个可以让用户以光盘或者网络直接安装或者管理Linux系统,我们称这一整套 可完全安装的系统为 Linux distribution --- 可完全安装套件

  • 常见的几个 Linux distribution

red hat - 红帽子

ubuntu -- 无班图

centos

  • Linux distribution 使用的都是 www.kernel.org 中提供的Linux内核,各家使用的软件大同小异,最大的差别在于软件的安装模式

chapter 3

每一个组件或者设备在Linux下都是一个文件

磁盘

主要有 盘片 机械手臂 主轴马达组成

分区

最简单的分区: 区分根目录 \ 与内存交换空间 swap 即可

稍微麻烦一点:将一些读写频繁的重要目录,与根目录独立出来,比如 /, /usr, /var 等

chapter4

内存交换空间是指?

当有数据被存放在物理内存中,但是这些数据不是常被CPU所取用,那么这些不常被使用的程序将会被丢到硬盘的swap交换空间中,而将速度较快的物理内存空间释放出来给真正需要的程序使用

所以如果系统不忙,内存又打,就不需要swap了

chapter 5

基础

命令的格式
commond [option]
复制代码
  • 区分大小写

  • 按下enter之后开始执行命令


一些简单的命令
命令含义
date获取日期
cal获取日历
bc进入计算器模式
  • cal

只是输入 cal 是展示当前月份的日历

cal // 当前月份
cal 2018 // 2018的所有月
cal 8 2018 // 2018 8月
复制代码
  • bc 进入计算器模式

输入 quit 然后回车 可以自动退出计算器模式


重要的按键
  • tab 命令补齐 和 文件名补齐

  • ctr + c 终止当前命令

Linux在线求助 man page

比如想查看关于date 命令的一些信息

man date
复制代码

看下第一行这里是个 DATE(1)

这里的数字含义是 (这里列几个常见的)

数字含义
1用户在shell环境中可操作的命令或者更可执行的文件
4设备文件
5配置文件或者是某些文件的格式
8系统管理员可用的管理命令

Linux在线求助 info page

另外一种在线求助命令 info page

基础命令

关机

shutdown
shutdown
复制代码

然后服务器无法再登录成功了

需要去云端控制台进行重启才可以

具体看下参数设置

shutdown [options] [time] [wall]
复制代码

常用的options

options含义
-t 数字几秒之后关机
-r停止系统服务并重启
-c取消已经在进行中的shutdown命令
-h将系统服务停掉后,立即关机
shutdown -h 21:00 // 在21:00关机

shutdown -h +10 // 十分钟后关机 
复制代码
other
  • halt 关机

其实halt就是调用

shutdown  -h
复制代码

halt执行时 杀死应用进程 执行sync系统调用

  • reboot

reboot的工作过程差不多跟halt一样﹐不过它是引发主机重启﹐而halt是关机

  • init

init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等。shutdown就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机﹐init 1为重启。

chapter 6

文件权限与目录配置

三种身份

文件所有者、用户组、其他人

系统中所有的帐号与一般身份使用者,以及root的相关信息, 都是记录在/etc/passwd文件中,每个人的密码则是记录在/etc/shadow文件中,此外,所有的组群名称记录在/etc/group文件中

  • 用户

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统

  • 用户组

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建

ls -al 查看当前目录下文件的信息

ls 显示文件的文件名和相关属性

al 列出文件详细的权限的属性

-rw-r--r--   1 zhengzaijiazai  staff       66  4 25 10:21 .gitignore
drwxr-xr-x   2 zhengzaijiazai  staff       68  4 25 11:32 dist
复制代码
  • drwxr-xr-x

d rwx r-x r-x

按照 1 3 3 3 的格式进行拆分

命令含义
d第一个字符 代表这个是目录 文件 或者 链接文件等
rwx文件所有者的权限
r-x文件同用户组的权限
r-x其他非本用户的权限

r (read)可读 w (write) 可写 x (execute)可执行

文件权限的意义

对于文件

r 代表是否能查看文件的内容 w 代表能否对文件的内容进行操作,但是不能删除文件 x 代表能否被系统执行

对于目录

目录的主要内容是记录文件名列表

r 表示可以读取目录结构列表

w 表示具有更改目录列表的权限

w权限对于文件的含义
创建新的文件与目录
删除文件和目录(不管文件权限)
将已存在的文件与目录重命名
移动文件,目录位置

总而言之,目录的w权限与该目录下的文件名变动有关系

x 表示用户能否进入目录 比如cd 进入此目录


test time

有一个目录权限为

drwxr--r-- 3 root root .......
复制代码

当前系统账号为 userA userA不属于root组 那么 userA 对于这个账户有什么权限, 能切换到此目录中吗

  • answer

userA 具有 读的权限

而进行目录切换是需要X的权限 所以不可以切换到此目录


修改文件的属性、权限

命令含义
chgrp xxx filename改变文件所属用户组的权限
chown xxx filename改变文件所有者或者所属组
chmod xxx filename改变文件的权限
chown
chmod 改变权限
  • 使用分数

使用分数也可以代表权限

命令分数
r4
w2
x1

rwx 7 rw- 6 r-x 5

  • 使用符号类型

有三种身份,就用 u g o 代表三种身份的权限

身份字符
用户u
用户组g
其他人o
所有身份a
命令含义
+增加
-减去
=设置

比如 需要设置一个文件的权限为 -rwxr-xr-x

则u 为rwx g/o 为 r-x

chmod u=rwx,go=rx readme.md
复制代码

目录配置

标准 FHS

如果每一个人都按照自己的标准去配置文件目录,可能有管理上的困扰

FHS 用于规范每个特定目录下应该要放置什么数据

FHS针对目录树定义了三个目录下应该放置什么数据

目录含义
/ (root 根目录)与开机系统有关系
/usr与软件的安装、执行有关系
/var与系统运作过程有关系

usr (UNIX Software Resource)Unix操作系统软件资源

FHS 定义(/)根目录下需要有以下目录

目录文件内容
/bin执行文件,在/bin 下的命令 可以被root和一般账号使用,比如 cat cp等
/etc系统主要配置文件,例如账号密码文件,何种服务的启示文件
/tmp正在执行的程序放置文件的地方 FHS建议在开机时将 /tmp下的数据删除

Q: 请问在 /bin 与 /usr/bin 有什么不同

A:

/bin是系统的一些指令

bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等

/usr/bin 是你在后期安装的一些软件的运行脚本

主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等


绝对路径与相对路径
  • 绝对路径

由根目录开始写起的文件名或者目录

  • 相对路径

相对于当前路径

chapter 7 目录相关

特殊的目录

标志含义
.本层目录
..上一层目录
-前一个工作目录

Q: 请问在Linux的根目录,有没有上层目录 (..) 的存在

A:

用普通用户身份看下

用root身份看一下


操作文件与目录

命令含义
cd切换目录 change directory
pwd显示当前目录
mkdir创建新目录
rmdir删除空目录
cp复制
mv移动
  • 创建目录 mkdir

mkdir 只能一层一层的创建目录, 如何一次性创建多层目录 -- 借助 -p 参数

mkdir -p webpack/w1-code/dist
复制代码
  • 删除目录
rmdir config
复制代码

只能删除一个空目录

如果要强制删除一个非空目录及它下面的全部

rm -r node_modules
复制代码
  • 查看目录
ls -a // 显示全部,连同隐藏的文件
复制代码
  • mv
// 将某一个文件移动到文件夹中
mv mian.js newdir
// 重命名文件夹
mv oldDir newdir
复制代码
  • cp 复制

复制文件需要有 r (可读) 权限

// 复制index 文件到 当前位置
cp ./config/index.js .
复制代码

默认条件中,cp的源文件与目的文件权限不同,目的文件的所有者是命令操作者本身

查阅文件内容

cat (Concatenate 连续)
命令含义
cat查看内容
cat -n查看内容 显示行号
cat -b查看内容 显示行号 【空白部分不算行号】
nl 添加行号打印

nl 可以将输出的内容自动加上行号 默认结果与cat -n有点类似

  • nl [-bnw] filename
-b 命令含义
a空行也添加行号
t空行不添加行号
-n 命令含义
ln行号在左侧显示
rn行号在右侧显示 不加0
rz行号在右侧显示 加0
nl index.js

nl -b a index.js 空行也添加行号

复制代码
more

前面提到的nl cat 是一次性将所有内容展示到命令行 more 则是 有翻页功能

more index.js
复制代码
-n 命令含义
空格向下翻一页
enter 或者 向下键向下滚动一行
q退出显示
  • 查找功能

按下 / 然后输入 要查找的字符 [但是没有发现有任何高亮提示]

less

less 的用法要比more 增加了向上翻页功能

less index.js
复制代码
  • 查找功能

按下 / 然后输入 要查找的字符 [向下查询] 按下 ? 然后输入 要查找的字符 [向上查询]

选择数据 head tail
  • head 从前面开始展示

选取数据展示几行

head [-n number] filename
复制代码

number 表示展示几行 默认展示前10行

  • tail 从后面开始展示
tail [-n number] filename
复制代码

number 表示展示几行 默认展示最后10行


获取第 100 到 120 行

cat filename | head -n 120 | tail -n +100
复制代码

从 100 行开始 显示 50行

cat filename | tail -n +100 | head -n 50
复制代码

tail -n +100:从100行开始显示,显示100行以后的


文件的权限预设 umask

当新建一个文件时,它的默认权限和umask有关系

umask是用来指定当前用户在新建目录或文件时的权限预设值,具体来说,umask值只是一个掩码,它从创建文件时的默认权限中掩去对应位置的权限

0022 以数字形式表示权限

可以看到这里有四组权限,第一组是特殊权限使用的,我们平时只需要后面三个就可以了

u=rwx 以符号类型表示权限

在默认权限的属性,文件和目录是不同的

  • 用户创建一般文件,则默认取消可执行权限,即666(rw-rw-rw-)

  • 用户创建目录文件,由于x与是否可以进入此目录有关,因此默认开放所有权限,即777(rwxrwxrwx)


Q: 假设用户的umask是 003 则当其新建一个文件或者文件夹 的权限是什么

A: 也就是去掉的权限是 other的 写 w 与 x

文件 rw-rx-r--

文件夹 rwxrxwr--


查询文件 find

find [指定路径] [指定条件] [指定动作]
复制代码

默认会查找当前目录及子目录,把查找结果输出到屏幕上

权限和文件的关系

![important]](user-gold-cdn.xitu.io/2018/8/31/1…)

  • 用户能进入某目录成为可工作目录的基本权限是什么
条件内容
可使用命令cd等切换工作目录
目录所需权限x 要有可执行的权限
  • 用户在某一个目录可以读取一个文件的基本权限是什么
条件内容
可使用命令cat more less tail head 等
目录所需权限x 要有可执行的权限
文件所需权限r 要有可读的权限
  • 让用户修改一个文件的权限是什么
条件内容
可使用命令vi vim 等
目录所需权限x 要有可执行的权限
文件所需权限r w 要有可读可写的权限
  • 让用户新建一个文件的基本权限是什么
条件内容
可使用命令touch 等
目录所需权限w x 要有可读可执行的权限

$PATH

为什么在任何地方都可以执行 ls 这个命令呢 -- 环境变量 PATH

系统会依照PATH的设置去每个定义PATH的目录下查询文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查询的同名命令则先被执行

chapter 8 磁盘和文件管理

EXT2

Linux最传统的磁盘文件系统(filesystem)使用的是EXT2

磁盘分区指的是告诉操作系统 这个磁盘在此分割槽可以存取的区域是由 A 磁柱到 B 磁柱之间的区块

如此一来操作系统就能够知道他可以在所指定的区块内进行文件数据的读/写/搜寻等动作了。 也就是说,磁盘分区意即指定分割槽的启始与结束磁柱

文件系统

磁盘在做分区之后还需要格式化,这是因为每种操作系统所配置的文件属性/权限并不相同, 为了存放这些文件所需的数据,因此就需要将分割槽进行格式化,以成为操作系统能够利用的文件系统格式

  • 文件系统的运行

这与操作系统的文件数据有关。较新的操作系统的文件数据除了文件实际内容外, 通常含有非常多的属性

例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。 文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中

另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等

属性含义
inode记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码
block实际记录文件的内容,若文件太大时,会占用多个 block
superblock记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等

inode

inode 的内容在记录文件的权限与相关属性,至于 block 区块则是在记录文件的实际内容

而文件系统一开始就将 inode 与 block 规划好了,除非重新格式化,否则 inode 与 block 固定后就不再变动

Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统

block

data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已。在格式化时 block 的大小就固定了

1 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化) 2 每个 block 内最多只能够放置一个文件的数据 3 承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量 4 承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)


Q: 假设你的Ext2文件系统使用 4KB de block ,而该文件系统中有 10000 个小文件,每个文件大小均为 50 bytes, 请问此时你的磁盘浪费多少容量?

A:

4kb = 4 * 1024 bytes = 4096 bytes

所以每一个会浪费 4096 - 50 bytes

所以公共会是 4046 * 10000 bytes = 38.585666 = 38.6MB


与目录树的关系
  • 文件目录

当我们在 Linux 下的 ext2 文件系统创建一个目录时, ext2 会分配一个 inode 与至少一块 block 给该目录

其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码

而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据

  • 文件

当我们在 Linux 下的 ext2 创建一个一般文件时, ext2 会分配一个 inode 与相对于该文件大小的 block 数量给该文件

例如:假设我的一个 block 为 4 Kbytes ,而我要创建一个 100 KBytes 的文件,那么 linux 将分配一个 inode 与 25 个 block 来储存该文件

inode 本身并不记录文件名,文件名的记录是在目录的 block 当中。 因此在第六章文件与目录的权限说明中, 我们才会提到『新增/删除/更名文件名与目录的 w 权限有关』

因为文件名是记录在目录的 block 当中, 因此当我们要读取某个文件时,就务必会经过目录的 inode 与 block ,然后才能够找到那个待读取文件的 inode 号码, 最终才会读到正确的文件的 block 内的数据

文件系统的操作

所有的数据都得要加载到内存后 CPU 才能够对该数据进行处理

想一想,如果你常常编辑一个好大的文件, 在编辑的过程中又频繁的要系统来写入到磁盘中,由于磁盘写入的速度要比内存慢很多, 因此你会常常耗在等待硬盘的写入/读取上

为了解决这个效率的问题, Linux 使用的方式是透过一个称为异步处理 (asynchronously) 的方式

当系统加载一个文件到内存后,如果该文件没有被更动过,则在内存区段的文件数据会被配置为干净(clean)的。 但如果内存中的文件数据被更改过了(例如你用 nano 去编辑过这个文件),此时该内存中的数据会被配置为脏的 (Dirty)。此时所有的动作都还在内存中运行,并没有写入到磁盘中! 系统会不定时的将内存中配置为『Dirty』的数据写回磁盘,以保持磁盘与内存数据的一致性

内存的速度要比硬盘快的多,因此如果能够将常用的文件放置到内存当中,这不就会添加系统性能吗

  • Linux 系统上面文件系统与内存有非常大的关系:

1 系统会将常用的文件数据放置到主存储器的缓冲区,以加速文件系统的读/写 2 承上,因此 Linux 的物理内存最后都会被用光!这是正常的情况!可加速系统效能 3 你可以手动使用 sync 来强迫内存中配置为 Dirty 的文件回写到磁盘中 4 若正常关机时,关机命令会主动呼叫 sync 来将内存的数据回写入磁盘内 5 不正常关机(如跳电、死机或其他不明原因),由于数据尚未回写到磁盘内, 因此重新启动后可能会花很多时间在进行磁盘检验,甚至可能导致文件系统的损毁(非磁盘损毁)

磁盘和目录容量

磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的

命令含义
df列出文件系统的整体磁盘使用量
du评估文件系统的磁盘使用量(常用在推估目录所占容量)
  • df

由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息, 所以这个命令显示结果的速度非常的快速

  • du

与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据

在默认的情况下,容量的输出是以 KB 来设计的, 如果你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可

连接文件

chapter 10 vim 编辑器

vi 文本编辑器 vim 程序开发工具

vi

vi 共分为三种模式,分别是『一般模式』、『编辑模式』与『指令列命令模式』

一般模式

以 vi 打开一个档案就直接进入一般模式了(这是默认的模式)

一般模式下常用按键

删除
  • 按键 d 相关
命令含义
dd删除整行
ndd删除n行
d$删除光标所在处 到该行的最后一个字符 (向后删除到最后)
d0删除光标所在处 到该行的第一个字符 (向前删除到最前)

| x | x向后删除一个字符 X向前删除一个字符 | | nx | 连续删除n个字符 |

| y | 复制整行 | | p | 粘贴整行 |

编辑模式

一般模式当中, 按下『i, I, o, O, a, A, r, R』等任何一个字母之后会进入编辑模式

指令列命令模式

一般模式当中,输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一行

chapter 11 bash

shell

需要计算机输出音乐,这个过程需要什么支持呢

1 硬件

需要你的硬件有声卡芯片

2 内核管理

需要操作系统的内核可以支持这个芯片组 还有芯片的驱动程序

3 应用程序

需要用户输入播放声音的指令

以上三点是一个简单的输出声音的步骤。就是用户需要输出一个命令,硬件才会执行这个命令来工作。而硬件如何知道你所执行的命令呢,那就是内核的控制工作了

我们需要通过shell将输入的命令与内核进行通信,这样内核就可以控制硬件来工作

操作系统是一组软件,这组软件在控制硬件与管理系统的活动监测。如果这组软件能被用户随意操作会导致系统崩溃。

所以不能让用户随意去使用。因此产生了一种在操作系统上的应用程序->shell

其实shell的功能只是提供用户操作系统的一个接口,因此这个shell需要可以调用其他软件。

简而言之,只要能够操作应用程序的接口,都叫做shell

Linux的shell

Linux有多种shell, 可以看下 /etc/shells

各家的shell功能差不多,但是在某些语法执行方面不同。

Linux默认使用的是 bash

bash

bash 的几个优点

1 命令记忆功能

2 命令与文件补全功能

3 命名别名设置功能

4 作业控制,前台,后台控制

5 程序脚本

当登录到Linux后,会依据/etc/passwd 文件的设置来给一个shell(默认bash) 然后就可以依据上面的命令操作 shell

type

内部命令:由 bash 内置的命令

外部命令:来字外部的命令,非 bash 内置

查询一个命令是外部的还是bash内置的呢? -- type

可以看到 cd 这个命令是bash的内置命令

shell 的变量功能

Linux是多用户,多任务的环境,每个人在登录之后都会有一个bash。

读取变量

变量在显示的时候,前面必须带着 $ 符号

echo $PATH
echo ${PATH}
cd $work
复制代码
设置变量
workdir='workapce/mxx'
复制代码
变量的设置规则
变量名称只能是字母与数字,但开头不能为数字
双引号内的特殊字符可以保留原特性,比如$ 可正确读取字符串中的变量,单引号则不会
name="my name is $USER"
echo $name 
// mu name is tom
<!-- 如果是单引号 -->
name='my name is $USER'
echo $name 
// mu name is $USER
复制代码
取消变量
unset workdir
复制代码

Q: 设置一个 变量代表 工作目录


在父进程中定义的变量是无法在子进程中使用的,比如你定义了这个变量,然后再重新发开一个进程,是读不到这个变量的

不过通过export将此变量设置为环境变量就可以使用了

环境变量的功能

查询当前有哪些环境变量,可以使用两个命令 env export

env

查询到目前shell环境下所有的环境变量

set

shell不只是有环境变量,还有各种自定义的变量

set查询所有的变量

export

环境变量和自定义变量两者的差异在于 是否可以被子进程使用

子进程会继承父级进程的环境变量,不会继承父进程的自定义变量

export 可以将自定义变量转为环境变量

export 

// export WORKDIR=$WORKDIR:workspace/blued-shopping/blued-shop
复制代码

可以看到目前所有的环境变量

为什么子进程可以使用环境变量

1 当创建一个shell时候,操作系统会分配一个记忆块给shell使用,此内存的变量可以给子进程使用

2 在父进程使用了 export ,就可以将自定义的变量写到上面的那个记忆块中

3 当加载另一个shell的时候(启动子进程,要离开父进程了)子shell可以将父shell的那个记忆块导入自己的环境变量块中

ulimit

bash 可以限制用户的某些系统资源,比如文件打开数量,可用的CPU时间,可用内存总量等 ,这些通过 ulimit 进行设置

参数解析含义
unlimited无限制
0无限制
history

查看历史命令

history
history 10
history -w // 写入 ~./bash_history
复制代码

bash的操作环境

路径和命令的查找顺序

在我们系统中存在多个名字相同的名字,那么 bash shell 究竟使用的是哪个命令呢?其遵循的顺序如下

1.以相对/绝对路径来执行命令 2.由 alias 找到命令来执行 3.由 bash 内置命令来执行 4.通过$PATH 的顺序找到的第一个命令来执行

[root@localhost ~]# alias echo='echo -n'
[root@localhost ~]# type -a echo
echo is aliased to `echo -n'
echo is a shell builtin
echo is /bin/echo
复制代码

可以看到先找alias在内置命令 最后PATH

bash的登录信息

这些都可以进行配置的

环境配置文件

为什么已进入bash就可以使用变量,比如安装了cnpm 当打开一个bash就可以使用cnpm呢,这是由于 系统的环境配置文件的存在,在bash一旦启动,就会读取这些配置文件

分为全体系统的配置文件和用户个人爱好配置文件

/etc/profile 属于系统整体配置,不建议修改此文件. 每个用户在获取bash时候一定会读取的配置文件

当bash在读取完了整体环境配置文件 /etc/profile 之后,就户开始读取用户个人配置文件,涉及到的用户个人偏好配置文件主要有三个

1 ~/.bash_profile 2 ~/.bash_login 3 ~/.profile

其实bash只会读取上面的一个,读取顺序依次 1->2->3 也就是有1 就不会去读 2 3

看下 ~/.bash_profile 这个文件的内容

# nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
export PATH=$PATH:/Users/zhengzaijiazai/adt/sdk/platform-tools:/Users/David/adt/sdk/tools

复制代码

有设置PATH变量 并使用export的将变量导出为环境变量

由于PATH在 /etc/profile 中有设置过,这里的配置就以累加的方式处理

关于配置文件 还有一个 ~/.bashrc

有的 ~/.bash_profile 的最后会有这么几行

if [ -f ~/.bashrc ] ; then 
  . ~/.bashrc
fi  
复制代码

这几行的是意思是,判断主文件夹下是否有 .bashrc 如果有则读入其配置信息

  • source

配置文件 /etc/profile 与 ~/.bash_profile 都是在用户login shell的时候获取的,那么当重新修改了配置文件,如何使其生效呢

1 注销登录 或 2 source

source 配置文件名
复制代码

这样就可以将配置文件读入目前的shell环境了

数据流重定向

数据流重定向 就是把某些要出现在屏幕上的数据传输到其他地方

数据流

输入数据流:以写文件为例,从键盘输入的字符就输入数据流

输出数据流:以读文件为例,将文件内容显示到屏幕上,显示的内容就是输出字符流

输出数据流又可分为: 正确输出 错误输出

echo config.js > copy.js
复制代码

本应该出现在屏幕上的所有的config的信息 会被 导入到copy.js文件

这个copy文件的创建方式为

1 该文件若不存在,系统会自动的将他创建起来

2 当这个文件存在的时候,那么系统就会先将这个文件内容清空,然后再将数据写入

也就是若以 > 输出到一个已存在的文件中,那个文件就会被覆盖掉

如果不想被覆盖,而是继续追加信息,使用 >>

命令行中的判断 && ||
ls tmp/info && touch tmp/info/a
复制代码
管道

bash 命令运行的时候有输出的数据会出现! 那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来配置?

  • grep

  • uniq 去重

  • wc 统计

chapter14 账号管理与权限设置

账号与用户组

登陆 Linux 主机的时候,输入的是我们的账号, ID 与账号的对应就在 /etc/passwd 当中

每个登陆的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)

  • 文件如何判别他的拥有者与群组

每一个文件都会有所谓的拥有者 ID 与拥有群组 ID ,当我们有要显示文件属性的需求时,系统会依据 /etc/passwd 与 /etc/group 的内容, 找到 UID / GID 对应的账号与组名再显示出来

  • 在输入账号和密码登录shell时候 系统会发生什么

1 先找寻 /etc/passwd 里面是否有你输入的账号

如果没有则跳出,如果有的话则将该账号对应的 UID 与 GID (在 /etc/group 中) 读出来,另外,该账号的主文件夹与 shell 配置也一并读出

2 再来则是核对口令表啦!

这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的口令与里头的口令是否相符

3 如果一切都 OK 的话,就进入 Shell 控管的阶段

/etc/passwd

每一行都代表一个账号,有几行就代表有几个账号在你的系统中

/etc/shadow

我们知道很多程序的运行都与权限有关,而权限与 UID/GID 有关!因此各程序当然需要读取 /etc/passwd 来了解不同账号的权限。 因此 /etc/passwd 的权限需配置为 -rw-r--r-- 这样的情况, 虽然早期的口令也有加密过,但却放置到 /etc/passwd 的第二个字段上!这样一来很容易被有心人士所窃取的, 加密过的口令也能够透过暴力破解法去 try and error (试误) 找出来!

因为这样的关系,所以后来发展出将口令移动到 /etc/shadow 这个文件分隔开来的技术

/etc/group

记录GID 和用户组组名对应

这个文件每一行代表一个群组

看下这三者的关系

有效用户组(effective group)与初始用户组(initial group)

每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID,就是『初始群组 (initial group) 』。也就是说,当用户一登陆系统,立刻就拥有这个群组的相关权限

但是一个用户可以被加入到多个用户组去,比如 USERA 可以同时属于 group1 (初始用户组) 与 group2 (手动添加)

那么当这个用户在新建一个文件的时候,新文件所属组是哪一个

这个取决于当时的有效用户组

查询当前用户所属的用户组

groups
复制代码

第一个输出的群组即为 有效用户组 (effective group) 了

以这个用户身份去新建一个文件,则文件的用户组就是这个 有效用户组

有效群组的切换
newgrp newGrooup
复制代码

但是使用newgrp 是有限制的,那就是你想要切换的群组必须是你已经有支持的群组,也就是说,只要我的用户有支持的群组就是能够切换成为有效群组

账号管理

新增一个用户
usersadd newName
复制代码

CentOS 系统主要会帮我们处理几个项目

1 在 /etc/passwd 里面创建一行与账号相关的数据,包括创建 UID/GID/家目录等

2 在 /etc/shadow 里面将此账号的口令相关参数填入,但是尚未有口令

3 在 /etc/group 里面加入一个与账号名称一模一样的组名

4 在 /home 底下创建一个与账号同名的目录作为用户家目录,且权限为 700

用户的身份切换
  • su

  • sudo

chapter16 例行性工作 crontab

什么是例行性工作?

可以理解为node中的定时任务(node-schedule)

有两种任务性质,周期性,一次性

周期性: 比如每天要睡觉

一次性: 比如偶尔会捡到钱

at 命令用于处理 一次性 的工作

crontab 命令用于处理周期性的工作,循环工作

Linux常见的例行性工作调度
  • 日志文件的轮替

  • 临时文件的删除

某些软件在运行中会产生一些缓存文件,但是当这个软件关闭时,这些缓存文件可能并不会主动的被移除。

系统透过例行性工作排程运行名为 tmpwatch 的命令来删除这些缓存文件

at 一次性的工作调度

atd 用于负责处理 这些一次的工作,但是并非所有的 Linux distributions 都默认会把他打开的

/etc/init.d/atd restart
复制代码

使用 at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了

/etc/at.allow 与 /etc/at.deny

这两个文件限制了谁有权利去调用 at

1 /etc/at.allow

写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中)

2 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件 凡是被写入的都不能使用at了(没有被写的就可以使用)

3 如果两个文件都不存在,那么只有 root 可以使用 at 这个命令

  • 查询当前机器中有多少 at 的工作调度
atq
复制代码
  • 删除某一个工作调度
atrm [jobnumber]
复制代码
batch

batch 就是另一种 at, 但是batch会在 CPU 工作负载 低于 0.8 的时候,才进行你所下达的工作任务

  • CPU 工作负载

如果某一个程序他需要一直使用 CPU 的运算功能,那么此时 CPU 的使用率可能到达 100% 但是 CPU 的工作负载则是趋近1,因为 CPU 仅负责一个工作

如果同时运行2个这样的程序 CPU 的使用率还是 100% ,但是工作负载则变成 2

crontab

用户的设置

crontab 用来处理周期性的工作,为了安全考虑,可以限制哪些身份是可以使用 crontab

  • /etc/cron.allow

  • /etc/cron.deny

当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面, 而且是以帐号来作为判别

比如 dmtsai 使用 crontab 后, 他的工作会被记录到 /var/spool/cron/dmtsai 里头去

默认情况下,只要用户没有被放入 /etc/cron.deny 就可以直接执行 crontab -e 去编辑自己的例行性命令了

时间位置是五个数字 * * * * * 分别代表 分钟 小时 日期 月份 周几

编写

crontab -e
复制代码

我们写一个每一分钟输出当前时间的

*/1 * * * * echo $(date) > /tmp/test.txt
复制代码

查看当前用的 crontab 工作

crontab -l
复制代码

重启

/bin/systemctl start crond.service
复制代码
系统层级的crontab

crontab -e 是对于用户的,如果是系统的例行性任务,就需要另外处理了

需要编辑 /etc/crontab 这个文件了

cron 这个服务的最低侦测限制是『分钟』,所以『 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容 』,因此,只要编辑完 /etc/crontab 这个文件,并且将他储存之后,那么 cron 的配置就自动运行

手动重启crond服务

/etc/init.d/crond restart
复制代码

  • MAILTO

当 /etc/crontab 这个文件中的例行性工作的命令发生错误时,或者是该工作的运行结果有 STDOUT/STDERR 时,会将错误信息或者是萤幕显示的信息传给谁(默认是由系统直接寄发一封 mail 给 root)

  • PATH

命令路径

anacron 唤醒停机期间的工作任务

anacron 并不能指定何时运行某项任务, 而是以天为单位或者是在启动后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务运行一遍后,anacron 就会自动停止了

anacron 会以一天、七天、一个月为期去侦测系统未进行的 crontab 任务

anacron 运行的时间通常有两个,一个是系统启动期间运行,一个是写入 crontab 的排程中。 这样才能够在特定时间分析系统未进行的 crontab 工作

chapter17 程序管理

17.1 进程 程序

触发任何一个事件时,系统都会将其定义为一个进程,并给与此进程一个ID,为PID. 同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限配置

程序一般是放置在实体磁碟中,然后透过使用者的运行来触发。触发后会加载到内存中成为一个个体,那就是程序。 为了操作系统可管理这个程序,因此程序有给予运行者的权限/属性等参数,并包括程序所需要的命令码与数据或文件数据等, 最后再给予一个 PID 。系统就是透过这个 PID 来判断该 process 是否具有权限进行工作

  • 程序

系统需要启动的那个二进制的文件

通常为二进制程序放置在存储媒介中,以物理文件形式存在

  • 进程

程序触发之后,被加载到内存中成为一个个体,这就是进程

程序被触发后,执行者的权限与属性,程序的程序代码与所需数据会被加载到内存,操作系统会给与这个内存单元一个标识符PID

子程序与父程序

程序彼此之间是有相关性的。以上面的图示来看,连续运行两个 bash 后,第二个 bash 的父程序就是前一个 bash

常驻进程

某些命令产生的进程很快就会被终止,比如ls显示文件 touch 创建文件等。但是有些进程会一直在执行,比如系统每一分钟会去扫描 /etc/crontab 来进行工作调度, 是 crond 这个程序所管理的,他启动后就在后台一直持续不断的运行。 这个就是一直存在内存中的进程

常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。系统的服务非常的多, 不过主要大致分成系统本身所需要的服务,例如刚刚提到的 crond 及 atd

网络服务会启动一个可以负责网络监听的端口 (port) ,以提供外部用户端 (client) 的连线要求

Linux 的多人多工环境

其实在 Linux 底下运行一个命令时,系统会将相关的权限、属性、程序码与数据等均加载内存, 并给予这个单元一个程序识别码 (PID),最终该命令可以进行的任务则与这个 PID 的权限有关

  • 多任务行为

Linux 可以让CPU在各个工作进行切换,也就是说,每一个工作仅仅占用CPU几个命令次数,所以CPU每秒能够在各个进程之间进行切换

  • 特殊的程序管理行为

Linux可以在任何时候,将某个被困住的程序杀掉,然后再重新运行该程序而不用重新启动

  • bash 环境下的工作管理 (job control)

登陆 bash 之后, 就是取得一个名为 bash 的 PID 了,而在这个环境底下所运行的其他命令, 就几乎都是子进程了

在这个单一的 bash 介面下,可以处理多个工作

工作管理 job control

当登陆系统取得 bash shell 之后,在单一终端机介面下同时进行多个工作的行为管理

可以出现提示字节让你操作的环境就称为前景 (foreground),其他工作就可以让你放入背景 (background) 去暂停或运行

  • 直接将命令丢到后台中『运行』的 &

比如启动一个项目

node index.js
复制代码

这个就是一直在前台启动,我们可以将这个放在后台处理

node index.js &
复制代码

添加的这个 & 会将命令放到后台处理,此时bash会输出一个 工作号码 1 和 PID 90328

  • 查询目前在后台的工作
jobs
复制代码

参数含义
l除了列出 job number 与命令串之外,同时列出 PID 的号码
r仅列出正在背景 run 的工作
s仅列出正在背景当中暂停 (stop) 的工作

可以看到有一个 + - 号展示

  • 代表最近被放到背景的工作号码 - 代表最近最后第二个被放置到背景中的工作号码 而超过最后第三个以后的工作,就不会有 +/- 符号存在了
  • 后台工作拿到前台处理 fg (foreground)
fg // 默认将 + 的工作取出来
fg- // 取出来 - 的工作
fg %工作号码 // 取出来这个工作号码的对应工作
复制代码
  • 管理工作 kill

kill -signal %jobnumber
复制代码
signal参数含义
1重新读取一次参数的配置档 (类似 reload)
2代表与由键盘输入 [ctrl]-c 同样的动作
9立刻强制删除一个工作
15以正常的程序方式终止一项工作。与 -9 是不一样的
进程管理

为什么需要进程管理

1 Linux 系统是个很忙碌的系统,那么当整个系统资源快要被使用光时, 您是否能够找出最耗系统的那个程序,然后删除该程序,让系统恢复正常呢

2 此外,如果由於某个程序写的不好,导致产生一个有问题的程序在内存当中,您又该如何找出他,然后将他移除呢?

3 如果同时有五六项工作在您的系统当中运行,但其中有一项工作才是最重要的, 该如何让那一项重要的工作被最优先运行呢

查看进程
  • ps
命令含义
ps -l查询只和自己bash相关的进程
ps aux当前内存所有进程

ps 是静态的结果输出 是某一个时间点的进程状态

  • top

top 可以监测整个系统的进程工作状态

top [-d 数字] | top [-bnp]
复制代码

-d 后面可以接秒数,默认是 5 秒, 表示每次更新进程资源的时间

在 top 运行过程当中可以使用的按键命令

参数含义
?显示在 top 当中可以输入的按键命令
P以 CPU 的使用资源排序显示
M以 Memory 内存 的使用资源排序显示 (默认)
N以 PID 来排序
T由该 Process 使用的 CPU 时间累积 (TIME+) 排序
k给予某个 PID 一个讯号 (signal)
r给予某个 PID 重新制订一个 nice 值
q离开 top 软件的按键

如何查找最消耗CPU的进程

使用 top 然后 按P


进程管理

其实是透过给予该程序一个信号 (signal) 去告知该程序如何操作

查询所有的可用的singal

kill -l
复制代码

常用的一些 信号

数值名称含义
1SIGHUP启动被终止的程序,可让该 PID 重新读取自己的配置档,类似重新启动
  • killall -singal 命令名称

根据进程名称删除此进程

比如我们通过 node index.js & 启动这个服务到后台

那么删除就可以是 killall -9 node

要删除某个程序,我们可以使用 PID 或者是启动该程序的命令名称,

而如果要删除某个服务呢?最简单的方法就是利用 killall ,将系统当中所有以某个命令名称启动的程序全部删除。

进程的优先级

Linux 给予程序一个所谓的『优先运行序 (priority, PRI)』, 这个 PRI 值越低代表越优先的意思

之前我们查看一个进程 ps -l

可以看到 PRI 这个参数

PRI 是内核动态调整的,使用者无权去干涉 PRI

想要调整程序的优先运行序时,就得要透过 Nice 值了!Nice 值就是上表的 NI

一般来说, PRI 与 NI 的相关性如下:

PRI(new) = PRI(old) + nice

但是,如果原本的 PRI 是 50 ,并不是我们给予一个 nice = 5 ,就会让 PRI 变成 55 。

因为 PRI 是系统『动态』决定的,所以,虽然 nice 值是可以影响 PRI ,不过, 最终的 PRI 仍是要经过系统分析后才会决定的。

另外, nice 值是有正负的,而既然 PRI 越小越早被运行, 所以,当 nice 值为负值时,那么该程序就会降低 PRI 值,亦即会变的较优先被处理

  • nice

新执行的命令处理nice

  • renice

已经存在的进程nice重新调整

查看系统资源

free 查看内存占用

free [-b|-k|-m|-g] [-t]

选项与参数

-b :直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes), m(Mbytes) k(Kbytes), 及 g(Gbytes) 来显示单位

-t :在输出的最终结果,显示实体内存与 swap 的总量

Mem 那一行显示的是实体内存的量, Swap 则是虚拟内存的量。 total 是总量, used 是已被使用的量, free 则是剩余可用的量。 后面的 shared/buffers/cached 则是在已被使用的量当中,用来作为缓冲及缓存的量。

Linux 测试用主机是很平凡的,根本没有什么工作, 但是实体内存是几乎被用光

不过,至少有 132MB 用在缓冲记忆 (buffers) 工作, 287MB 则用在缓存 (cached) 工作,也就是说,系统是『很有效率的将所有的内存用光』, 目的是为了让系统的存取效能加速

很多朋友都会问到这个问题『我的系统明明很轻松,为何内存会被用光光?』被用光是正常的!而需要注意的反而是 swap 的量

一般来说, swap 最好不要被使用,尤其 swap 最好不要被使用超过 20% 以上, 如果您发现 swap 的用量超过 20% ,那么,最好还是买实体内存

系统会使用到 swap , 绝对是因为实体内存不足了才会这样做的

Linux 系统为了要加速系统效能,所以会将最常使用到的或者是最近使用到的文件数据缓存 (cache) 下来, 这样未来系统要使用该文件时,就直接由内存中搜寻取出,而不需要重新读取硬盘,速度上面当然就加快了! 因此,实体内存被用光是正常的

uname:查阅系统与核心相关资讯
uptime:观察系统启动时间与工作负载

特殊文件和程序

chapter 18 系统服务

系统为了某些功能必须要提供一些服务 (不论是系统本身还是网络方面),这个服务就称为 service

但是 service 的总是需要程序的运行吧!达成这个 service 的程序我们就称呼他为 daemon

举例来说,达成循环型例行性工作排程服务 (service) 的程序为 crond 这个 daemon

其余部分待整理

信息

创建新身份
  • 创建用户组

groupadd work

以root身份登录到服务器之后 创建新的身份

useradd vbird
复制代码

这样就创建了一个新的角色

但此时你尝试使用此身份登录服务器

ssh vbird@xxx
复制代码

会提示

Permission denied, please try again
复制代码

是权限错误,并不是密码错误

我们需要给vbird来设置密码

passwd vbird
复制代码

然后输入密码就可以了。此密码将会是你的服务器登录密码。

修改项目配置信息,以新身份去进行部署

linux的文件权限

三种身份

  • 用户

  • 用户组

  • 其他人

默认情况下所有的系统上的账号与一般身份用户,还有root的信息,都在 /etc/passwd中

个人密码是在 /etc/shadow

linux所有的组名都在 /etc/group

当用户登录linux系统时,由于linux并不认识账号名称,所以它会先去查找一个名为/etc/passwd的文件,通过识别UID进行名称解析,用户组名称也需要解析,但是它是通/etc/group的文件进行名称解析。用户的密码存储在/etc/shadow文件下,用户组的密码存储在/etc/gshadow下。

创建新身份
  • 创建用户组

groupadd work

以root身份登录到服务器之后 创建新的身份

useradd vbird
复制代码

这样就创建了一个新的角色

但此时你尝试使用此身份登录服务器

ssh vbird@xxx
复制代码

会提示

Permission denied, please try again
复制代码

是权限错误,并不是密码错误

我们需要给vbird来设置密码

passwd vbird
复制代码

然后输入密码就可以了。此密码将会是你的服务器登录密码。

修改项目配置信息,以新身份去进行部署

chapter16 例行性工作 crontab

什么是例行性工作?

可以理解为node中的定时任务(node-schedule)

有两种任务性质,周期性,一次性

Linux常见的例行性工作调度

  • 日志文件的轮替

  • 临时文件的删除

at 一次性的工作调度

  • 编写 at

格式为

at  TIME
复制代码

比如编写一个 3分钟后执行的任务

at now + 3 minutes
echo "hello" > /tmp/test.txt
复制代码

ctrl + d 则可退出 at 编辑环境

  • 查询当前机器中有多少 at 的工作调度
atq
复制代码

前面的数字 1 表示这个 工作调度的工作号码

  • 删除某一个工作调度
atrm [jobnumber]
复制代码

crontab 循环性的工作调度

编辑 crontab工作内容

crontab -e
复制代码

会进入VI编写界面

我们写一个每一分钟输出当前时间的

*/1 * * * * echo $(date) > /tmp/test.txt
复制代码

写了之后保存wq即可

查看 crontab工作内容

crontab -l
复制代码

重启crontab

/bin/systemctl start crond.service
复制代码

删除全部crontab

crontab -r
复制代码

如果删除其中一个,则请 crontab -e 去编译文件吧

用户身份创建 crontab

当用户创建了crontab 之后,此工作调度会被记录到 /var/spool/cron/ 中去

而 cron 执行的每一项工作 都会被记录到 /var/log/cron 这个日志文件中

以vbird身份创建了一个 crontab 然后看一下有没有 /var/spool/cron/vbird

好吧,不具有查看的权限。 换到root身份

系统层级的 crontab

crontab -e是用户层级的定时工作,如果是系统的例行性工作,就不需要这么编写了。

系统的例行性工作在 /etc/carontab这个文件中。如果想处理系统的例行性任务,只需要变动 /etc/carontab 就可以了。

cron 这个服务的最低检测限制是分钟,所以每一分钟都会去读取一次 /etc/carontab 。因此只要编辑保存了之后,cron的设置就会自动来执行了 。

来写一个定时删除文件夹的任务

两种情况

一种命令可以直接显示结果 然后回到命令提示符等待下一个命令输入

另一种是进入到命令环境 直到结束此命令才回到命令提示符的环境

进入查看状态

当进入查看状态

比如输入 man date

翻页: 敲击空格 或者 按键 上下键

然后查找 某些关键字 敲击了 / 字符 然后就可以输入你准备搜索的字符了

shift 配合 ; 然后输入q 就可以退出了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值