Linux

Linux

1.图示:

在这里插入图片描述
我们的 Linux 主要是系统调用内核那两层。当然直观地看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器、浏览器、电子邮件等。

2.大致的学习路径如下:

在这里插入图片描述

3.Linux 桌面环境介绍

相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 UNIX/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件,类似 Windows95 之前的 Windows 的图形界面实则也只是运行在 DOS 环境的一套软件。而 Linux 上的这套软件以前是 XFree86,现在则是 xorg(X.Org),而这套软件又是通过 X 窗口系统(X Window System,也常被称为 X11 或 X)实现的,X 本身只是工具包及架构协议,而 xorg 便是 X 架构规范的一个实现体,也就是说它是实现了 X 协议规范的一个提供图形界面服务的服务器,就像实现了 http 协议提供 web 服务的 Apache 。如果只有服务器也是不能实现一个完整的桌面环境的,当然还需要一个客户端,我们称为 X Client,像如下几个大家熟知也最流行的实现了客户端功能的桌面环境 KDE,GNOME,XFCE,LXDE
在这里插入图片描述

4.常用快捷键
按键作用
Tab自动补全
Ctrl+z将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+c强行终止当前程序,它并不会使终端退出
Ctrl+d键盘输入结束或退出终端
Ctrl+s暂停当前程序,暂停后按下任意键恢复运行
Ctrl+a将光标移至输入行头,相当于Home键
Ctrl+e将光标移至输入行末,相当于End键
Ctrl+k删除从光标所在位置到行末
Alt+Backspace向前删除一个单词
Shift+PgUp将终端显示向上滚动
Shift+PgDn将终端显示向下滚动
5.Shell 常用通配符:
字符含义
*匹配 0 或多个字符
?匹配任意一个字符
[list]匹配list中的任意单一字符
[^list]匹配除list中的任意单一字符以外的字符
[c1-c2]匹配c1-c2中的任意单一字符 如:[0-9][a-z]
{string1,string2,…}匹配string1或string2(或更多)其一字符串
{c1…c2}匹配c1-c2中全部字符 如{1…10}
6.获取帮助
man <command_name>

ls --help

用户及文件权限管理

1.查看用户
who am i
# 或者
who mom likes

在这里插入图片描述
输出的第一列表示当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用whoami即可)
第二列的pts/0中pts表示伪终端,所谓伪终端是相对于/dev/tty设备而言的,还记得上一节讲终端时的那七个使用 [Ctrl]+[Alt]+[F1]~[F7] 进行切换的 /dev/tty 设备么,这是“真终端”,伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端,pts/0 后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i,看第二列是不是就变成 pts/1 了,第三列则表示当前伪终端的启动时间。
还有一点需要注意的是,在某些环境中 who am i 和 who mom likes 命令不会输出任何内容,这是因为当前使用的 SHELL 不是登录时的 SHELL,没有用户与 who 的 stdin 相关联,因此不会输出任何内容。例如我在本地的 Ubuntu 系统上输入这个命令就不会有提示。
在这里插入图片描述
who 命令其它常用参数

参数说明
-a打印能打印的全部
-d打印死掉的进程
-m同am i, mom likes
-q打印当前登录用户数及用户名
-u打印当前登录用户登录信息
-r打印运行等级
2.创建用户

现在我们新建一个叫 lilei 的用户:

sudo adduser lilei

在这里插入图片描述
这个命令不但可以添加用户到系统,同时也会默认为新用户在 /home 目录下创建一个工作目录:

ls /home

在这里插入图片描述

3.用户组

在 Linux 里面如何知道自己属于哪些用户组呢?
方法一:使用 groups 命令

方法一:使用 groups 命令

在这里插入图片描述
其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到 shiyanlou 用户属于 shiyanlou 用户组,每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组(差不多就相当于家长的意思)。
默认情况下在 sudo 用户组里的可以使用 sudo 命令获得 root 权限。shiyanlou 用户也可以使用 sudo 命令,为什么这里没有显示在 sudo 用户组里呢?可以查看下 /etc/sudoers.d/shiyanlou 文件,我们在 /etc/sudoers.d 目录下创建了这个文件,从而给 shiyanlou 用户赋予了 sudo 权限:
在这里插入图片描述
方法二:查看 /etc/group 文件

cat /etc/group | sort

这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到 shiyanlou 的用户组信息:
在这里插入图片描述
使用 grep 命令过滤掉一些你不想看到的结果:

cat /etc/group | grep -E "shiyanlou"

/etc/group 文件格式说明

/etc/group 的内容包括用户组(Group)、用户组口令、GID(组 ID) 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:

group_name:password:GID:user_list

你看到上面的 password 字段为一个 x,并不是说密码就是它,只是表示密码不可见而已。
这里需要注意,如果用户的 GID 等于用户组的 GID,那么最后一个字段 user_list 就是空的,这里的 GID 是指用户默认所在组的 GID,可以使用 id 命令查看。比如 shiyanlou 用户,在 /etc/group 中的 shiyanlou 用户组后面是不会显示的。lilei 用户,在 /etc/group 中的 lilei 用户组后面是不会显示的。

将其它用户加入 sudo 用户组

默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:

# 注意 Linux 上输入密码是不会显示的
su -l lilei
sudo ls

在这里插入图片描述
会提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用户组中,至于 sudoers 文件(/etc/sudoers)你现在最好不要动它,操作不慎会导致比较麻烦的后果。

使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。

这里我用 shiyanlou 用户执行 sudo 命令将 lilei 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限,首先我们切换回 shiyanlou 用户。

su shiyanlou
groups lilei
sudo usermod -G sudo lilei
groups lilei

在这里插入图片描述
然后你再切换回 lilei 用户,现在就可以使用 sudo 获取 root 权限了。
在这里插入图片描述

4.删除用户和用户组
sudo deluser lilei --remove-home

在这里插入图片描述
使用 --remove-home 参数在删除用户时候会一并将该用户的工作目录一并删除。如果不使用那么系统会自动在 /home 目录为该用户保留工作目录。
在这里插入图片描述
删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。

5.查看文件权限
ls -l

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.变更文件所有者

切换到 lilei 用户,然后在 /home/lilei 目录新建一个文件,命名为 iphone11

su - lilei
pwd
touch iphone11
ls -alh iphone11

可见文件所有者是 lilei :
在这里插入图片描述
现在切换回到 shiyanlou 用户,使用以下命令变更文件所有者为 shiyanlou

# 需要切换到 shiyanlou 用户执行以下操作
cd /home/lilei
ls iphone11
sudo chown shiyanlou iphone11

现在查看,发现文件所有者成功修改为 shiyanlou
在这里插入图片描述

7.修改文件权限
  1. 方式一:二进制数字表示
    在这里插入图片描述
    每个文件有三组固定的权限,分别对应着拥有者,所属用户组,其他用户,这是一个固定顺序
chmod 600 iphone11
ls -alh iphone11
  1. 方式二:加减赋值操作

要完成上述实验相同的效果,你可以:

chmod go-rw iphone11

g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户),+ 和 - 分别表示增加和去掉相应的权限。

8.另附

adduser 和 useradd 的区别是什么

答:useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。

目录结构及文件基本操作

1.Linux 的文件组织目录结构

FHS 标准

FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。

FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。

第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。
在这里插入图片描述最真实最直观的方式,执行如下命令:

tree /

如果提示" command not found ",就先安装:

# 因为我们的环境的原因,每次新启动实验会清除系统恢复到初始状态,
#所以需要手动更新软件包索引,以便我们安装时能找到相应软件包的源。

sudo apt-get update

sudo apt-get install tree

在这里插入图片描述

2.相对路径和绝对路径

进入上一级目录:

cd ..

进入home 目录:

cd ~
# 或者 cd /home/<你的用户名>
3.对文件的移动、复制、重命名、编辑等操作

新建目录

mkdir -p father/son/grandson

复制文件

cp test father/son/grandson

复制目录

cd /home/shiyanlou
mkdir family
cp -r father family

要成功复制目录需要加上 -r 或者 -R 参数,表示递归复制

删除目录

跟复制目录一样,要删除一个目录,也需要加上 -r 或 -R 参数:

rm -r family

遇到权限不足删除不了的目录也可以和删除文件一样加上 -f 参数:

rm -rf family

移动文件

使用 mv(move or rename files)命令移动文件(剪切)。
命令格式是 mv 源目录文件 目的目录

重命名文件

mv 命令除了能移动文件外,还能给文件重命名。
命令格式为 mv 旧的文件名 新的文件名。

使用 more 和 less 命令分页查看文件

打开后默认只显示一屏内容,终端底部显示当前阅读的进度。可以使用 Enter 键向下滚动一行,使用 Space 键向下滚动一屏,按下 h 显示帮助,q 退出。

使用 file 命令查看文件的类型
在这里插入图片描述
与 Windows 不同的是,如果你新建了一个 shiyanlou.txt 文件,Windows 会自动把它识别为文本文件,而 file 命令会识别为一个空文件。这个前面我提到过,在 Linux 中文件的类型不是根据文件后缀来判断的。当你在文件里输入内容后才会显示文件类型。

在这里插入图片描述

环境变量与文件查找

1.环境变量
# declare 预声明一个变量
declare tmp
# 正确的赋值
tmp=shiyanlou
# $ 符号用于表示引用一个变量的值
echo $tmp
2.命令的查找路径与顺序

查看 PATH 环境变量的内容:

echo $PATH

默认情况下你会看到如下输出:

/usr/local/sbin:/usr/local/bin:/usr/sbin
:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
3.添加自定义路径到“ PATH ”环境变量

PATH 里面的路径是以 : 作为分割符的,所以我们可以这样添加自定义路径:

PATH=$PATH:/home/shiyanlou/mybin

注意这里一定要使用绝对路径。

4.修改和删除已有变量
变量设置方式说明
${变量名#匹配字串}从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串}从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串}从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串}从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串}将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串}将符合旧字串的全部字串替换为新的字串

在这里插入图片描述
变量删除

可以使用 unset 命令删除一个环境变量:

unset mypath

在这里插入图片描述

5.如何让环境变量立即生效

前面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用 source 命令来让其立即生效,如:

cd /home/shiyanlou
source .zshrc

source 命令还有一个别名就是 .,上面的命令如果替换成 . 的方式就该是:

. ./.zshrc

在使用 . 的时候,需要注意与表示当前路径的那个点区分开。

注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。

搜索文件

与搜索相关的命令常用的有 whereis,which,find 和 locate。

1. whereis 简单快速
whereis who
whereis find

在这里插入图片描述
你会看到 whereis find 找到了三个路径,两个可执行文件路径和一个 man 在线帮助文件所在路径,这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。

2. locate 快而全

使用 locate 命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db 数据库来检索信息。不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令来更新数据库。所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令(在我们的环境中必须先执行一次该命令)。注意这个命令也不是内置的命令,在部分环境中需要手动安装,然后执行更新。

sudo apt-get update
sudo apt-get install locate
sudo updatedb
3.which 小而精

which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的程序,因为它只从 PATH 环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令。

4.find 精而细

find 应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索

注意 find 命令的路径是作为第一个参数的, 基本命令格式为 find [path][option] [action] 。

sudo find /etc/ -name interfaces

与时间相关的命令参数:

参数说明
-atime最后访问时间
-ctime最后修改文件内容的时间
-mtime最后修改文件属性的时间

下面以 -mtime 参数举例:

  • -mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件
  • -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件
  • -mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件
  • -newer file:file 为一个已存在的文件,列出比 file 还要新的文件名
    在这里插入图片描述
    列出 home 目录中,当天(24 小时之内)有改动的文件:
find ~ -mtime 0

列出用户家目录下比 /etc 目录新的文件:

find ~ -newer /etc
5.另附(“数字雨”)

只需要一个命令 cmatrix
需要先安装,因为 Ubuntu 没有预装:

sudo apt-get update
sudo apt-get install cmatrix

装好之后先不要急着执行,为了看到更好的效果,我们需要先修改终端的主题配色,在终端上面菜单栏中找到[首选项]修改,修改颜色预设为黑底绿字。
在这里插入图片描述
然后输入 cmatrix 开始运行。
在这里插入图片描述
按下 F11 可以全屏显示。
还可以改变代码的颜色:

cmatrix -C red

在这里插入图片描述

文件打包与解压缩

Linux 上面常见的压缩包文件格式

文件后缀名说明
*.zipzip程序打包压缩文件
*.rarrar 程序压缩的文件
*.7z7zip 程序压缩的文件
*.tartar 程序打包,未压缩的文件
*.gzgzip 程序(GNU zip)压缩的文件
*.xzxz 程序压缩的文件
*.bz2bzip2 程序压缩的文件
*.tar.gztar 打包,gzip 程序压缩的文件
*.tar.xztar 打包,xz 程序压缩的文件
*tar.bz2tar 打包,bzip2 程序压缩的文件
*.tar.7ztar 打包,7z 程序压缩的文件

打包:是将多个文件,或目录变成一个总的文件,文件不会变小,说不定还会变大,增加一些附加的信息来注明文件的信息比如位置什么的

压缩:将一个大的文件通过某个压缩算法变成小文件。注意压缩只是对一个文件进行操作,当要对多个文件进行压缩时就要借助于打包了,先打包再压缩。

1. zip 压缩打包程序
  • 使用 zip 打包文件夹,注意输入完整的参数和路径:
cd /home/shiyanlou
zip -r -q -o shiyanlou.zip /home/shiyanlou/Desktop
du -h shiyanlou.zip
file shiyanlou.zip

上面命令将目录 /home/shiyanlou/Desktop 打包成一个文件,并查看了打包后文件的大小和类型。第一行命令中,-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小(后面会具体说明该命令)。

  • 设置压缩级别为 9 和 1(9 最大,1 最小),重新打包:
zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou/Desktop -x ~/*.zip
zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou/Desktop -x ~/*.zip

这里添加了一个参数用于设置压缩级别 -[1-9],1 表示最快压缩但体积大,9 表示体积最小但耗时最久。最后那个 -x 是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用

我们再用 du 命令分别查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小:

du -h -d 0 *.zip ~ | sort
  • -h, --human-readable(顾名思义,你可以试试不加的情况)
  • -d, --max-depth(所查看文件的深度)
    在这里插入图片描述
  • 创建加密 zip 包

使用 -e 参数可以创建加密压缩包:

zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou/Desktop

注意: 关于 zip 命令,因为 Windows 系统与 Linux/Unix 在文本文件格式上的一些兼容问题,比如换行符(为不可见字符),在 Windows 为 CR+LF(Carriage-Return+Line-Feed:回车加换行),而在 Linux/Unix 上为 LF(换行),所以如果在不加处理的情况下,在 Linux 上编辑的文本,在 Windows 系统上打开可能看起来是没有换行的。如果你想让你在 Linux 创建的 zip 压缩文件在 Windows 上解压后没有任何问题,那么你还需要对命令做一些修改:

zip -r -l -o shiyanlou.zip /home/shiyanlou/Desktop

需要加上 -l 参数将 LF 转换为 CR+LF 来达到以上目的

2.使用 unzip 命令解压缩 zip 文件

将 shiyanlou.zip 解压到当前目录:

unzip shiyanlou.zip

使用安静模式,将文件解压到指定目录:

unzip -q shiyanlou.zip -d ziptest

上述指定目录不存在,将会自动创建。如果你不想解压只想查看压缩包的内容你可以使用 -l 参数:

unzip -l shiyanlou.zip

注意: 使用 unzip 解压文件时我们同样应该注意兼容问题,不过这里我们关心的不再是上面的问题,而是中文编码的问题,通常 Windows 系统上面创建的压缩文件,如果有有包含中文的文档或以中文作为文件名的文件时默认会采用 GBK 或其它编码,而 Linux 上面默认使用的是 UTF-8 编码,如果不加任何处理,直接解压的话可能会出现中文乱码的问题(有时候它会自动帮你处理),为了解决这个问题,我们可以在解压时指定编码类型。

使用 -O(英文字母,大写 o)参数指定编码类型:

unzip -O GBK 中文压缩文件.zip
3. tar 打包工具

在 Linux 上面更常用的是 tar 工具,tar 原本只是一个打包工具,只是同时还是实现了对 7z、gzip、xz、bzip2 等工具的支持,这些压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩

下面先掌握 tar 命令一些基本的使用方式,即不进行压缩只是进行打包(创建归档文件)和解包的操作。

  • 创建一个 tar 包:
cd /home/shiyanlou
tar -P -cf shiyanlou.tar /home/shiyanlou/Desktop

上面命令中,-P 保留绝对路径符,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后,比如不能写成 tar -fc shiyanlou.tar,可以写成 tar -f shiyanlou.tar -c ~。你还可以加上 -v 参数以可视的的方式输出打包的文件。

  • 解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数):
mkdir tardir
tar -xf shiyanlou.tar -C tardir
  • 只查看不解包文件 -t 参数:
tar -tf shiyanlou.tar
  • 保留文件属性和跟随链接(符号链接或软链接),有时候我们使用 tar 备份文件当你在其他主机还原时希望保留文件的属性(-p 参数)和备份链接指向的源文件而不是链接本身(-h 参数):
tar -cphf etc.tar /etc

对于创建不同的压缩格式的文件,对于 tar 来说是相当简单的,需要的只是换一个参数,这里我们就以使用 gzip 工具创建 *.tar.gz 文件为例来说明。

  • 我们只需要在创建 tar 文件的基础上添加 -z 参数,使用 gzip 来压缩文件:
tar -czf shiyanlou.tar.gz /home/shiyanlou/Desktop
  • 解压 *.tar.gz 文件:
tar -xzf shiyanlou.tar.gz

文件系统操作与磁盘管理

  • 使用 df 命令查看磁盘的容量(report file system disk space usage)
  • 使用 du 命令查看目录的容量(estimate file space usage)
  • 如何挂载卸载磁盘,如何格式化磁盘,如何分区

Linux任务计划crontab

1.crontab 简介

crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。

通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。

这里我们看一看 crontab 的格式:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
2.crontab 使用

添加一个计划任务

crontab -e

第一次启动会出现这样一个画面,这是让我们选择编辑的工具,选择第二个基本的 vim 就可以了。
在这里插入图片描述
查看我们添加了哪些任务

crontab -l

虽然我们添加了任务,但是如果 cron 的守护进程并没有启动,它根本都不会监测到有任务,当然也就不会帮我们执行,我们可以通过以下 2 种方式来确定我们的 cron 是否成功的在后台启动,默默的帮我们做事,若是没有就得执行上文准备中的第二步了。

ps aux | grep cron

# or

pgrep cron

在这里插入图片描述
查看到执行任务命令之后在日志中的信息反馈

sudo tail -f /var/log/syslog

删除任务

crontab -r
3.crontab 的深入

每个用户使用 crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样目的是为了隔离。
在这里插入图片描述
如果是系统级别的定时任务,需要 root 权限执行的任务应该怎么处理?

只需要使用 sudo 编辑 /etc/crontab 文件就可以。

cron 服务监测时间最小单位是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron/crontabs 里面的內容。

命令执行顺序控制与管道

1.顺序执行多条命令

简单的顺序执行你可以使用 ; 来完成,比如上述操作你可以:

sudo apt-get update;sudo apt-get install some-tool;some-tool # 让它自己运行
2. 有选择的执行命令
which cowsay>/dev/null && cowsay -f head-in ohch~

上面的 && 就是用来实现选择性执行的,它表示如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回 0 则执行后面的,否则不执行,你可以从 $? 环境变量获取上一次命令的返回结果:
在这里插入图片描述
还可以结合着 && 和 || 来实现一些操作,比如:

which cowsay>/dev/null && echo "exist" || echo "not exist"

在这里插入图片描述
流程图来解释一下上面的流程:
在这里插入图片描述

3.管道

管道是一种通信机制,通常用于进程间的通信(也可通过 socket 进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)

4.wc 计数工具
# 行数
wc -l /etc/passwd
# 单词数
wc -w /etc/passwd
# 字节数
wc -c /etc/passwd
# 字符数
wc -m /etc/passwd
# 最长行字节数
wc -L /etc/passwd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值