准备Linux环境

1、安装虚拟机VM,用虚拟机打开Linux镜像centOS

需要安装vm和Centos

安装虚拟机VMware

官网:https://www.vmware.com/cn.html

到官网下载好安装包后安装,安装时注意确定好安装路径,尽量不要安装到C盘

常见问题:

如果安装遇到问题,提示虚拟状态未启用:

https://jingyan.baidu.com/article/ab0b56305f2882c15afa7dda.html

安装好了之后没有注册码是不能长久使用的,可以试用,也可以直接百度”VMware16注册码”从网上找一个。

安装虚拟系统centos

官网下载:https://mirrors.163.com/centos/

由于镜像安装起来比较费劲,所以我提前准备好了一个镜像

2、安装工具MobaXterm,用工具连接主机

第一章、Linux介绍

历史的了解:

https://www.cnblogs.com/xrl123/p/10449350.html

 

 Linux是一种多用户操作系统,也就意味着其可以为多个用户建立各自的账户,也允许拥有这些账户的用户同时登录此计算机,每个账号可以同时运行多个程序。

多个用户能同时访问和使用同一台计算机,其中一个用户具有管理所有这些用户账户和整个计算机资源的权限,如Windows的administrator。

Linux架构

Linux操作系统由以下三个主要组件构成:内核(直接与硬件交互)、Shell(用户界面)、Linux实用程序和应用程序(一组处理日常需求的程序,通过shell调用)

Linux和UNIX的比较

了解Linux文件系统

对于Linux来说一切皆文件,对于Linux的目录结构,即使不背住,也应该熟悉

所有文件都存储在磁盘上的一个主目录 / 下。目录 / 被进一步细分为多个目录,如bin、boot、home、etc、usr和dev。

在每个目录中,都能存储包含相关数据的文件。

Linux系统的管理员可以将用户的所有主目录都放在/ home目录下,例如目录tom是用户tom的主目录,他将把他的所有文件都存储在其主目录tom中,或在该目录下创建新的目录。

介绍 / 目录下的一些目录

/ bin目录:存储Linux的许多实用程序,是可用的命令,因使用二进制格式,因此称为bin

/ dev目录:存储系统所有与设备相关的文件

/ etc 目录:存储用户和系统需要引用的与系统相关的数据,如passwd文件,这些文件通常是各种基本的系统程序和配置文件

/ lib 目录:可以被多个Linux软件项目重复使用的代码集,如:C语言例程。

/ home 目录:它包含用户的所有主目录。

/ usr 目录:存储引导进程中不包含的操作系统文件。usr目录中的bin目录中有很多实用程序

类似于window中的Program Files

/ var 目录:var目录中的内容经常变化,缓冲文件,日志文件,缓存文件,等一般都存放在这里

二、Linux的基本使用

1、用户相关命令

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

我们登录时也要尽量少用root账号登录,因为它有最大的权限,为避免误操作,可以使用普通用户登录。

创建用户

语法:useradd  用户名

当用户创建成功后,会在home目录下自动创建和用户同名的家目录,默认和用户名同名,

当然也可以自定义:

useradd -d 指定目录  用户名

为用户指定或修改密码

passwd  用户名

 之后可以使用用户名ls进行登录

删除用户

userdel [-r] 用户名

加上-r会删除用户及用户的主目录,不推荐删除

注:root用户的提示符由#表示,而普通用户使用Bash Shell

2.查看系统日期和时间

date  [“+指定格式”]

注:date命令也可以更改系统日期和时间,只有系统管理员可以更改系统日期

如date -s “2021-7-21 20:02:10”

3.屏幕相关

clear :清空终端屏幕

tput clear:清空屏幕并将光标定位在屏幕的左上角

tput cup <row> <col>  将光标定位在5行10列处

 tput smso :将屏幕设置为反白显示

 tput rmso :将屏幕设置回正常显示

 tput blink : 显示闪烁输出

 tput reset : 将屏幕复位到默认设置

4.了解正在使用系统的当前用户

who [-m/-q](用于显示当前登录的所有用户的名称)

会显示四列:

第四列为用户登录的终端的远程主机名,它只为不是从服务器登录的用户显示主机名

终端类型为tty的是指从服务器登录的用户

pts表示远程终端

如果想了解当前登录的用户名,可用who am i 命令

Linux允许多达六个用户从服务器登录操作系统,可以通过按Ctrl+Alt+Fx调用虚拟控制台,其中x是各功能键的1到6的数字。按Alt键和任何功能键可以在控制台间切换。

who命令可选项

5.确定系统的正常运行时间:uptime

此命令用于查找系统运行的持续时间,它提供一行显示信息,如:当前时间、系统运行多久、当前有多少用户登录,以及过去1分钟、5分钟、15分钟内CPU利用率的平均系统负载。

这里CPU利用率用于指加载到CPU的进程。

关于CPU的使用率,如1s内非空闲态运行时间为0.8s,则CPU使用率就是80%

平均负载

单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数

上图显示的3个值分别代表1分钟,5分钟,15分钟内系统的平均负载,该值越小表示系统工作量越少,负荷越低,反之负荷越高

对于单个核,这个值不要大于0.7

6.显示手册页

Linux提供以下两个命令来显示对命令的引用:man、info

1)man :显示随Linux系统安装的Linux参考手册中的页面

如要获取有关ls命令的详情   man ls

每个手册页面分为几个部分,如下表所示

输入q退出

2) info

Info命令提供了命令的详细信息。

man命令迎合原始操作系统手册的帮助,而info命令旨在提供更深入的信息和更新过的文档。info命令还支持超链接,而man命令不支持。

info命令显示关于命令和系统调用的信息,其语法为:

info [option] [menu item]

info vim 可以显示vim编辑器的详细信息

输入q退出

info命令的可选项:

--apropos=String  在所有手册中搜索String字符串并显示结果

创建文件并将info命令的结果写入到文件

7.结束Linux会话

在登录到系统后,工作会话会持续到你让Shell终止会话为止。可以通过关闭系统完成该操作。要关闭系统,需要选择用户名-关机

  • shutdown  -h  now    立即关机
  • shutdown  -h   1      1min后关机
  • shutdown  -r   now    立即重启
  • halt                    关机
  • reboot                 重启
  • sync                   把内存中的数据同步到磁盘

ln指令

软链接也称为符号链接,类似于windows中的快捷方式,主要存放了链接其他文件的路径

语法:ln -s  源文件/目录  软链接文件路径

注意:当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录

第二章、Linux的基本知识

目标:
了解Linux文件系统

了解Linux中的目录命令

了解常见的文件命令

管理文件访问权限

在Linux中,每个文件都由用户和组拥有。对于和文件关联的每个用户,您可以授予权限,例如读、写和执行,以便在需要时访问文件。

了解Linux文件系统

所有文件都存储在磁盘上的一个主目录 / 下。目录 / 被进一步细分为多个目录,如bin、boot、home、etc、usr和dev。

在每个目录中,都能存储包含相关数据的文件。

Linux系统的管理员可以将用户的所有主目录都放在/ home目录下,例如目录tom是用户tom的主目录,他将把他的所有文件都存储在其主目录tom中,或在该目录下创建新的目录。

文件命名约定

1) 最多可有255个字节长

2) 可包含除了“/”以外的特殊字符

3) 可包含大写和小写字母

4) 区分大小写

5) 可包含空格

相对路径和绝对路径

课上练习:

使用绝对路径切换到root目录  cd/root

使用相对路径到/root目录,比如当前位置在/home/zs   cd ../../root

表示回到当前目录的上一级目录  cd ..

回到家目录    cd ~

Linux中的目录命令

路径相关指令

pwd指令

显示当前工作目录的绝对路径

cd指令

语法: cd  目录路径

切换到指定的目录

绝对路径和相对路径讲解:

课上练习:

使用绝对路径切换到root目录  cd /root

使用相对路径到/root目录,比如当前位置在/home/zs   cd ../../root

表示回到当前目录的上一级目录  cd ..

回到家目录    cd ~

目录相关指令

ls指令

ls  [可选项]  [目录或者文件]

常用可选项

-a   显示当前目录所有的文件和目录,包括隐藏的

-l    以列表的方式显示目录

ls命令的可选项:隐藏文件的名称以 . 句点符号开头

 

mkdir指令

语法: mkdir  [可选项目录名

常用可选项:

-p  创建多级目录

课上练习:

创建一个目录  /home/zs

创建多级目录  /home/ww/zl

rmdir指令

删除空目录

语法:  rmdir  要删除的空目录

如果要强制删除非空目录则需要使用  rm  -rf  目录名   来删除

文件相关指令

touch指令

创建空文件

语法:touch  文件名

cp指令

拷贝文件到指定目录

语法: cp [可选项] 源文件 指定新目录路径

常用可选项  -r  递归复制整个文件夹

如果目标目录中已有要复制的内容则会提示是否覆盖,如果希望强制覆盖不用提示则用\cp即可

课上练习:

将/home/hello.txt拷贝到/home/zs目录下 cp hello.txt  /home/zs

 递归复制整个文件夹,将/home/zs整个目录复制到/opt  cp -r /home/zs  /opt

强制覆盖不提示  \cp  -r  /home/zs  /opt

rm指令

删除文件或文件夹

语法: rm [可选项] 要删除的文件或目录

常用可选项:

-r  递归删除整个文件夹

-f 强制删除不提示

课上练习:

将/home/hello.txt 删除

 递归删除整个文件夹  /home/zs  rm -rf /home/zs

mv指令

移动(或重命名)文件或目录

语法:mv   旧文件名  新文件名  (重命名)

      mv   源文件    目标目录   (移动/剪切到)

课上练习:

将hello.txt文件重命名为 hi.txt

 将/home/hi.txt 文件移动到/opt目录下

查看文件类指令

cat指令

查看文件内容

语法: cat  [可选项要查看的文件

常用可选项:

-n  显示行号

课上练习:

查看/etc/profile 文件内容并显示行号

cat展示文件不方便,为了浏览方便可用more来分页显示

more指令

是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容,more指令中内置了若干快捷键。

语法: more 要查看的文件

快捷键:

空格键-----------下一页

回车键-----------下一行

q----------------退出

ctrl+F------------向下滚动一屏

ctrl+B------------返回上一屏

=  --------------输出当前行的行号

:f  -------------- 输出文件名和当前行的行号(不会显示:f)

课上练习:

使用more查看文件/etc/profile

less指令

用于分屏查看文件内容,功能和more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个加载后才显示,而是根据显示需要去加载内容,对于显示大型文件具有较高的效率

语法:  less  要查看的文件

快捷键:

空格 -------下一页

Pagedown---下一页

pageup-----上一页

/字符串-----向下搜索字符串(n向下查找  N向上查找)

?字符串----向上搜索字符串(n向上查找,N向下查找)

q-----------退出

通配符字符

 

Linux中的用户类型

Linux可根据用户的类型限制其对文件的访问。Linux支持的用户类型有:

系统管理员、文件所有者、组所有者、其他用户

1、系统管理员

主要负责系统的平稳运行,管理员的工作是在系统控制台(服务器)上进行切换。

系统管理员还为系统创建用户和用户组,并且进行备份以防止数据丢失,其拥有Linux的所有权限,也称为root用户。

2、文件所有者

创建文件的用户被称为该文件的所有者,其可对该文件执行任何操作。

3、组所有者

在Linux中,可以定义属于某一个组的用户,还会为组指定一个名称。

4、其他用户

其他用户是相对组而言的,是指不属于某个组的用户。

---------------------------------------------------组的概念--------------------------------------------------------

Linux中每个用户都必须属于一个组,不能独立于组外,而对于文件,有所有者所在组其他组的概念

组是共享一些相同属性的用户的集合,其实就是管理权限的。

管理文件访问权限

指以下三种用户具有的权限:文件所有者、组、其他用户

ls -l 命令显示文件的内容

Linux具有以下三个类别的文件:普通文件、目录文件、特殊文件

  1. 普通文件

用户创建的所有文件都属于普通文件类别。这些文件包括所有数据文件、程序文件、对象文件和可执行文件。用户可以更改这些文件。

  1. 目录文件

目录文件包括目录中存在的 所有文件和目录列表。用户不能修改目录文件。而向该目录添加新文件或新的子目录时,系统将自动修改它。

  1. 特殊文件

Linux中的大多数系统文件都是特殊文件。它们通常与I/O设备相关联,并都在标准Linux目录中,如:/dev和/etc 。用户不能修改特殊文件。

Linux支持一下类型的特殊文件:

字符设备文件(如鼠标),块设备文件(如硬盘),链接文件(硬链接和软链接),套接字(进程间通信),命名管道(一个进程的输出充当一个进程的输入,也称为”先进先出”FIFO文件)

1213表示文件大小(字节),如果是文件夹则显示4096字节

第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。

第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限

rwx权限详解

作用到文件:

[r]表示可读(read)   可以读取,查看

[w]表示可写(write)  可以修改,但是不能删除,删除需要对文件所在目录有w权限

[x]表示可执行(execute) 可以被执行(前提是此文件为可执行文件)

作用到目录:

[r]表示可读(read)   可以读取,ls查看目录内容

[w]表示可写(write)  可以创建,删除目录中内容 ,可重名目录

[x]表示可执行(execute) 可以cd进入此目录

要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已

用数字表示权限

[r]=4,  [w]=2,  [x]=1

更改文件访问权限chmod

只有文件所有者才能更改与文件相关的权限

语法:

chmod  更改权限  文件

第一种方式(符号模式):+  -  =  变更权限

u:所有者,g:所在组,o:其他人  a:所有人(ugo的综合)

  1. chmod  u=rwx,g=rx,o=x  文件/目录
  2. chmod  o+w 文件/目录
  3. chmod  a-x  文件/目录

练习:

1)给hello.txt文件的所有者读写执行权限,给所在组读执行权限,给其他组读执行权限

chmod u=rwx,g=rx,o=rx hello.txt

2) 给hello.txt文件的所有者除去执行权限,增加组的写权限

chmod u-x,g+w hello.txt

3)给hello.txt文件的所有用户添加执行的权限

chmod a+x hello.txt

第二种方式(绝对模式):通过数字改变权限

[r]=4,  [w]=2,  [x]=1

例如chmod  u=rwx,g=rx,o=x abc 就等同于chmod  751 abc

练习:将/home/hello.txt文件的权限改为rwxr-xr-x  chmod 755 /home/hello.txt

例如:[r]=4,  [w]=2,  [x]=1

第三章、了解Linux文本编辑器

文本编辑器是一种应用程序软件,通常与操作系统捆绑在一起。文本编辑器用于创建和管理文本文件和文档,有广泛的功能,如创建文件、打开文件、复制和粘贴文本、搜索文本等

适用于Linux的编辑器有很多,其中常用的为vim和emacs,他们都可以处理大文件。

一、vim文本编辑器

vim编辑器是vi的增强版

就类似于:

vim编辑器是用于创建和编辑包含数据、文档或程序的文本文件的可视化编辑器。

它在屏幕上显示文件并允许用户插入、删除或更改文本。在vim中引入了一些新功能如分割窗口、语法高亮显示、可视化模式、可编辑压缩文件等。大多数的语言,基本上vim都支持。

可使用vivim调用vi/vim编辑器

1、Vim入门

语法:

vim 文件名

vim编辑器按以下三种模式工作:

命令模式(默认):在此模式中所按的键会被翻译成命令

输入模式:需要输入命令(i/a/o)切换到输入模式,按Esc键会切回命令模式

退出模式:在命令模式中可按冒号(:)调用退出模式

3、常用命令:

h:将光标移动到上一个字符

l:将光标移动到下一个字符

k:将光标向上移动一行

j:将光标向下移动一行

:wq+enter:保存所有更改并退出

:w+enter:保存文件

:q!+enter:不保存并退出

  • 拷贝当前行yy,拷贝5行5yy
  • 粘贴p
  • 删除当前行dd,删除5行5dd
  • /关键字,输入n查找下一个 (:noh取消高亮)
  • 显示行号-- :set nu和 :set nonu(这是使用set去配置vim环境的命令)
  • 定位到最末行G,定位到首行gg
  • 撤销  一般模式下--u
  • 定位到某一行如20  一般模式下 20  shift+g

如要读入另一个文件的内容:在文件hello中读入HelloWorld.java的内容

可在文件hello中输入命令:r HelloWorld.java

/是向下查找,配合n使用

4、配置Vim

内置virc文件包含控制vim编辑器行为的命令。编辑器启动时,会读取virc文件,可通过cat /etc/virc来查看此文件的内容

1)使用set命令

如:set nu和 :set nonu

2)使用map命令

使用:map命令,可以将键盘上的某个按键与vim的命令绑定起来。例如使用以下命令,可以通过F5键取消高亮显示

 也可以在最后把<Enter>回车加上

3)使用ab命令

ab命令是另一个退出模式命令,可为特定字符串定义缩写。语法是:

ab <string2的缩写形式>  <string2>

例如可以使用以下命令指定字符串Hello World 的缩写形式:

ab hw Hello World

取消缩写:

unab hw

查看已创建的缩写列表,查看已创建的缩写列表的命令是:

ab

第四章、了解标准设备文件、过滤器和管道

一、标准设备文件

1、标准输入文件

Linux将所有输入输出设备都看作是特殊文件。

执行需要输入的命令时,shell翻译命令并将键盘作为默认输入源,键盘被称为标准输入文件

拿cat举例,当cat命令后接一个文件名时,会显示文件的所有行。如果没有文件名,cat会从标准输入文件获取其输入。

cat命令等待键盘的输入,从键盘输入字符并按enter键时,字符会显示在屏幕上,如下:

 在Linux中,不是所有命令都需要来自标准文件的输入,例如ls命令就不使用标准输入文件。

在Linux中,会为所有打开的文件(包括标准文件)赋予一个称为文件描述符的数字,

文件描述符0被赋予标准输入文件。

2、标准输出文件

在Linux中,shell将显示器作为其执行的任何命令的默认输出设备,显示器被称为标准输出文件

例如发出ls命令时,shell执行命令并将其输出发送到标准输出文件(默认在显示器上显示)。

不是所有命令都生成输出,例如mkdir命令不使用标准输出文件(没有输出)。

文件描述符1被赋给标准输出文件。

3、标准错误文件

Shell实用程序在显示器上显示错误消息,因此显示器也是标准错误文件。

例如cat命令后跟一个不存在的文件名会在显示器上生成错误消息

另一个示例是命令cp file1 dir1,如果对dir1没有写权限或对file1没有读权限,此命令会在标准错误文件中显示错误消息。虽然命令是正确的,但因为没有对文件的权限,也将生成错误。文件描述符2被赋给标准错误文件

总结:

标准输入文件为键盘(因为默认从键盘获取输入内容),但并不是所有命令都需要输入

标准输出文件为显示器(因为默认将返回结果打印在显示器上显示)

标准错误文件为显示器(因为默认将错误信息也打印在显示器显示)

二、重定向输入或输出

1.输入重定向

如:当我们输入cat 回车

然后我们用键盘输入什么内容,cat命令就会返回什么内容。

当我们使用输入重定向符号<时,如cat 0< hello.txt

则cat命令会将hello.txt的内容作为输入,将其内容显示在控制台。

其中标准输入文件符号0可以省略

2.输出重定向

如果ls.txt不存在,则会先创建此文件,如果已经存在则会覆盖原内容。

如果希望追加则可以用>>

如cat zs.txt >> ls.txt

以下命令将输出附加到文件>>out_test

当然,上述命令还可通过使用文件描述符来写,如下所示:

当然也可以将文件描述符加上,如:

cat zs.txt 1> ls.txt

cat zs.txt 1>> ls.txt

3.错误重定向

这里的文件描述符2必须加上!!

注:标准错误文件的文件描述符2是强制的,因为>符号默认是1,也就是标准输出文件。

三、使用过滤器

1、grep过滤器

grep过滤器搜索文件中特定样式的字符并显示包含那个样式的所有行。在文件中搜索此样式被称为正则表达式(grep表示全局正则表达式打印)。

grep过滤器在不指定正则表达式的情况下无法使用。语法:

grep [可选项] 正则表达式 [文件名]

grep命令中的文件名是可选的,如果没有文件名,grep则等待标准输入。

输入一行后,grep在行中搜索正则表达式,如果包含该特定表达式就显示此行。

用户指示输入结束(Ctrl+d),则执行结束。

指定正则表达式

正则表达式可用于指定从简单到复杂样式的字符,正则表达式通常括在单引号中。

 

 

 grep过滤器的可选项:

grep过滤器还有一些选项,可用于更改命令的输出。

-n

输出与样式匹配的行及其行号,行号输出在行首

-c

输出与样式匹配的行数

-v

输出与样式不匹配的所有行

 这些选项必须在正则表达式前指定,还可组合这些选项。例如:-n和-v可结合起来用作-nv

 

2、wc过滤器

wc过滤器用于计算磁盘文件或标准输入文件中的行数、单词数和字符数。语法:

wc [可选项] 文件名

wc过滤器的可选项:

3、cut过滤器

当需要从特定命令(例如ls)的输出抽取特定列时使用cut过滤器。语法:

cut [可选项] [文件名]

cut的可选项:

 再如:显示文件zl.txt每行的前2个字符

4、tr过滤器

tr过滤器可被用于将一组字符翻译成另一组。此过滤器还可用于删除重复出现的字符。

当几个命令具有多列输出而且列之间的间隔大于一个空格,如果要过滤特定列,不能使用cut过滤器,因为列分隔符必须是一个字符。

因此,需要将列之间的空格压缩成一个空格,然后使用cut过滤器抽取所需列。

-s选项用于将出现的几个空格字符压缩成一个字符,例如:

此处tr过滤器的-s选项处理每条记录、将重复空格压缩(减少)成一个空格。

tr过滤器的另一个常用用法是转换大小写,例如:小写转大写(输入结束按Ctrl+d)

再例如用空格替换:字符

5、sort过滤器

sort过滤器按升序排列标准输入中的每行。

sort默认是根据字符的ASCII码来排序的

例如:输入内容后,按ctrl+d结束

sort过滤的可选项:

-r:逆向排序

-n将数字按照数字顺序排序,而非字符

当输入是根据数字的数值而不是ASCII序列排序时,需要指定-n选项

sort后跟多个文件名

sort后可以跟多个文件名,则最终结果会显示两文件中组合的行(如果希望忽略大小写且希望数字按数字大小排序可加上可选项-fn)

+pos1 -pos2

+pos1指忽略前pos1个分隔符

-pos2指到第pos2个分隔符停止

例如,要指定在第三列排序,必须指定+2和-3

这意味着忽略前两个列分隔符并在第三个分隔符处停止。

注意不能写成-3 +2

-t选项

用此选项指定分隔符,且分隔符要用双引号括起来

-o选项

我们排序的结果只是显示在屏幕上,并不会影响到原文件,如果想保留排序的结果可通过此可选项-o输出到某个文件中

多可选项同时使用

在一个命令中可以组合各种选项,如:

四、使用管道

Linux具有组合过滤器和其他命令(例如ls)的功能。通过这种方式,过滤器或命令的标准输出可以作为标准输入发送给另一个过滤器或命令。

例如:一次一整屏地显示当前目录的内容(希望可以通过more命令去查看etc目录的内容)

如ls可以查看etc的内容,但是如果希望通过more命令查看该怎么做呢?

我们想到可以先将ls的结果重定向输出到一个临时文件中,然后通过more去查看文件的内容,more命令可以一次显示一个屏幕的文本,查看起来更方便:

而通过Linux管道功能,可组合这两个步骤并作为一个命令执行,无需创建临时文件,如下:

竖线(|)是管道字符,管道可以将前面命令的输出结果,作为后面命令的输入参数。

管道功能的另一个优势是不必重写实用程序来执行复杂的任务,从而可以组合Linux工具(命令)。管道中的过滤器或命令数量不限

例1

要显示当前目录中文件所有者(u)有执行权限(x)的文件名:

通过grep命令过滤出文件所有者具有x权限的文件

通过tr命令将多个空格替换为单个空格字符

通过cut命令截取出第九列的数据(文件名)

再例如:显示当前目录中的文件名和文件大小

例2

显示当前目录中所有普通文件的名称

例3

显示当前目录中的总文件数

例4

要查看用户root的全名以及他的HOME目录的全路径名和他使用的默认shell

提示:所有此类信息可在/etc/passwd文件中找到

因此命令应为:

例5

显示所有用户名和他们的登录时间

Linux废弃了管道的中间输出,即中间输出不保存在磁盘上,有时可能要将命令的标准输出通过管道传输到另一个命令,并将其保存在磁盘上备日后使用,这可以使用tee命令实现

tee命令

tee命令读取标准输入并将其写到标准输出和文件。如果要写入数据的文件不存在,则会创建该文件,如果文件已存在,就重写文件内容。-a选项可用于将新内容附加到现有文件。

例如:在屏幕上显示文件zs.txt的内容,并写入文件temp1和temp2

例如:

在上述命令中,将文件names排序,排序的数据通过管道传送到tee命令,该命令创建文件sort-names,然后将数据存储到此文件中,还会将数据作为输入发送到more使用程序。

第五章、Linux的基本Shell脚本

一、介绍shell

Shell为内核扮演了重要的命令解释角色,它也是用户和内核之间的接口,Shell是随Linux系统提供的实用程序。

在Linux中用户不直接与硬件交互,每个用户获取一个Shell副本以使用内核。

Shell有许多功能,如重定向,管道,作业控制(如将一些任务发送到后台执行)等。

Linux和Unix提供了很多不同类型的shell,linux中我们默认的shell为bash shell。

Linux命令都保存在一些目录中,如/bin,/usr/bin等。

Shell用作命令解释器,其解释命令的过程为:

 如果shell没有定位到与命令相对应的文件,它会发出错误消息,然后显示提示符。

二、在Linux中创建Shell脚本

如果经常使用一系列的Linux命令,可以将它们存储在一个文件中。然后就可以让shell读取该文件并执行其中的命令,此类文件称为脚本文件。

Shell脚本允许I/O、变量操作并具有强大的流控制和迭代构造,这些构造使编程成为可能。

1.echo命令

此命令用户在屏幕显示消息,如:

 为了实现更好的可读性,最好将要用echo命令显示的消息括在双引号中。

-n选项会在显示文本后将光标显示在同一行,而不换行。如:

2.执行shell脚本

登录到Linux系统时,会获取一个要使用的shell副本。此shell称为登录shell,用来解释执行我们输入的命令,当我们在执行脚本时可以用sh命令来执行,sh命令会创建一个子Shell来执行shell脚本,这样当前登录shell就不会受脚本的影响,shell脚本会传递到子shell执行,子shell在对其运行的脚本完成执行后就会终止。

  • 通过点(.)执行脚本,是在当前shell中执行此脚本,不创建新shell。(需要具有此文件的执行权限)
  • 通过sh执行脚本,会创建一个新的子shell执行脚本(可以没有此文件的执行权限)

当然要执行任何shell脚本,必须具有读权限。

3.创建变量

Linux中所有变量都被视为字符串,然而也可以以数字形式来处理变量。

创建变量的语法是:

变量名=变量值

注意声明变量时,赋值运算符等号两边都不能有空格

如果所赋的值包含任何定界符,例如嵌入的空格,则必须用单引号或双引号括起来,例如:

 可以在shell脚本中或在shell提示符后创建变量,但shell脚本中的变量会在脚本执行结束后清空,但shell提示符后创建的变量会被保留。

4.引用变量

$符号用于引用变量的内容,例:将一个变量的值赋给另一个变量v1=${v2},

其中大括号用来界定变量的名称。

假设变量today包含值20,如果希望另一个变量x包含此值并与字符串th连接。则为:

 如上图如果不加大括号,shell则会搜索名为todayth的变量

不过如果不涉及连接操作,则大括号时可选的

5.将值读取到变量

通过read命令从键盘将值读取到变量。如:

练习1、从用户获取数据

需求:通过执行脚本getdata.sh来收集用户的姓名和电话,并将数据添加到文件cusdata中。且文件格式为--姓名:电话

第六章、创建高级Shell脚本

一、使用命令替换

通过命令替换也可以在一个命令行中使用多个命令。

例如:我们想输出 the date is (当前日期)

而当前日期需要通过执行命令date来获取

因此我们可以这样来实现:

 命令date括在反向单引号中,也称为重音符,shell会首先替换括起来的命令,然后执行整个命令。

命令替换还可用于变量中存储命令的输出,如:

我们希望将当前目录中以.java结尾的文件数量存到变量count中

1、expr命令

大部分Shell不支持数字变量,所有变量都会被视作字符串。如果我们希望处理数字运算,则可以使用expr命令,如:

 在此命令,运算符+的两边都必须有一个空格。

当然也可以在expr命令中使用变量。如:

expr命令支持的运算符包括+、-、*、/和%。但是在使用*时,前面应当加上反斜杠(\)。否则,Shell会将其解释为通配符。

例1:

结果会忽略小数部分,expr不支持小数点,他会将小数点当作句号处理,从而报错

如前所述,expr命令的输出将发送到标准输出,如想把此输出存储到变量中,可使用命令替换。如:

练习:

初始化变量a的值为10,b的值为5

将a的值减少7

输出‘a=(a的值)’

将a的值乘以b的值,结果再赋值给变量a

输出‘a=(a的值)’

2、test命令

test命令评估一个表达式,并返回“真(0)”或“假(1)”。test关键字还可由[ ](方括号)替换。

语法:

test 表达式      或者

[ 表达式 ]

test命令可用于检查变量的值

如测试字符串是否相同可以用运算符=或!=

 一个test命令还可以测试多个条件,可使用-a和-o选项,这些选项和and和or类似

 

二、在shell脚本中使用编程构造

1、if构造

if构造通常与test命令一起使用。如:(fi用于指示构造的结尾)

if 表达式

then 代码块

else 代码块

fi

test中使用的一些测试数值的运算符:

Linux还提供了if…elif。语法:

if 表达式1

then 代码块

elif 表达式2

then 代码块

else 代码块

fi

 练习:提示用户输入年龄,0-14岁echo票价为35,15-23岁echo票价为40,23岁以上echo票价为70

2、case…esac构造

case…esac构造用于在shell脚本中根据变量值执行特定的代码。

也是判断,主要用于判断指定值

语法:

case 变量 in

值1 代码块1 ;;

值2 代码块2 ;;

*    代码块3 ;;

esac

为任何变量值执行的最后一个命令必须后接一对分号来和后面的值分隔开

练习:显示菜单(1.玩游戏2.查看说明3.退出游戏),根据用户的输入显示不同内容

注:最后可以加一个*)当未匹配到则会执行*)对应的代码

3、while构造

while构造用于实现循环。

语法:只要表达式的结果为真,就会循环执行do和done之间的代码块(命令)

while 表达式

do 代码块

done

例1:循环查看文档内容

需求:提示用户输入文件名来查看文件内容,直到用户提示退出。

例2、自动执行重复任务

如上图练习一中,只可以实现获取一次用户信息并保存到文件cusdata中,现在我们想实现,循环8次收集8个人的信息并输出到文件cusdata2。且在数据中多加一列序号信息,序号为1001-1008。

文件格式为“序号:姓名:电话”

1001:zs:010-12345

 

4、for构造

在for构造中,执行do…done之间的命令。

for循环中的一列值由一个或多个空格分隔。

语法:

for 变量名 in 变量值列表

do

循环执行的代码块

done

例1:变量name的值分别为张三和李四,并输出在控制台上。

例2:依次显示zs目录中的文件内容

 

5、break、continue、exit

  • break:跳出循环
  • continue:结束(跳过)当前循环,继续开始下一轮的循环
  • exit: 直接退出,停止脚本的执行

break导致循环终止:

要实现循环并可以退出,可修改如下:

在循环中使用break可跳出,终止循环

使用continue命令可以终止循环并重头开始再次执行循环

通过for循环实现循环嵌套,外层循环变量i从1到3递增,内层循环变量j从3到1递减

输出i:j--要求内层循环变量为2时,则不输出

for((变量初始化;循环条件;变量修改))

do

循环体

done

 死循环,查看exit和break的区别

如果是exit则循环后的echo不会执行

6、test命令详解

1)test命令也可用于检查文件的状态

例1:-e测试文件是否存在

例2:shell脚本从用户获取文件名并显示文件类型:

-f判断是否为普通文件

-d判断是否为文件夹

2)字符串测试

8、创建函数

函数是由同一名称引用的并用于执行特定任务的语句块。需要重复执行同一任务时,应当为该任务创建一个函数,通过指定函数名来调用函数。在调用前必须创建一个函数。语法:

function 函数名

{

 函数体

}

练习:

可以使用以下shell脚本确定文件类型:

         

Shell脚本还允许将参数传递给函数,使用他们的位置来引用传递给函数的参数。语法:

$n(其中n为数字,如$1表示传递的第一个参数)

例如:可以使用以下shell脚本myfunc为内置linux命令创建一个用户定义的函数

需求:

在此脚本中自定义三个函数

函数listdir 可以将当前目录中的所有文件夹显示出来

函数viewfile可以查看用户指定的文件内容(需要为此函数传一个参数)

函数cpfile,可以将用户指定的文件复制到用户指定的目录中去(需要为此函数传两个参数)

其中用户传递的第一个参数可以通过$1获取,第二个参数可以通过$2获取,以次类推

 在上述脚本myfun.sh中,定义了三个函数,之后可以通过执行source命令,让函数生效。

 上述命令执行Shell脚本myfunc,之后我们就可以调用上述三个函数了

 

三、处理Shell脚本中的参数

位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用位置参数变量。比如:./hello.sh 100 200,这里我们在执行hello.sh脚本的同时传了两个参数过去,那在脚本中如何获取这两个参数的呢?

基本语法

  • $n(n为数字,$0表示命令本身,$1-9表示第一到第九个参数,十以上的参数需要用大括号括起来如${10})
  • $* ($*表示命令行中的所有参数)
  • $# ($#表示命令行中参数的个数)

练习:获取命令行中各个参数的信息

四、调试Shell脚本

set命令(有-v和-x选项)

1、-v选项

-v选项在执行脚本的同时会显示脚本内容

2、-x选项

使用-x选项时,Shell脚本中的每个语句或表达式前都要加一个 + 符号,

它还会显示脚本中对语句或表达式的替换。例如:

用-x调试会发现要执行的语句前都加了加号(+),方便区分

且他将$1等都进行了替换

第七章、管理文件和进程

一、定位文件

1、find命令

find命令用于定位特定目录及其所有子目录中的文件,它有多个可选项用于高级搜索。

find命令的语法:

find [路径path] [表达式expressionn]

1)-name和-print选项

-name选项可以指定要搜索的文件名,-print选项用于显示文件的完整路径(可不加)

注:

  • 如果未指定要搜索的路径,则默认从当前目录开始搜索
  • -print选项是find命令的默认选项,可省略
  • 不带-name的find命令显示指定目录及其子目录下的所有文件的路径名,如下:

2)-type选项

-type选项用于按照类型搜索文件,如:

3)-mtime选项

-mtime选项用于显示在当前日期前的特定天数内修改过的所有文件名称。

下表列出了可用于-mtime选项的参数,-mtime和数字之间必须有一个空格。

例如要显示/home/shcode 中,10天前修改过的所有文件

4)-exec选项

-exec选项用于指定对文件执行的操作,当我们通过find找到对应文件时,想要对这些文件进行一些操作时可以使用此选项实现。

例如:/home目录下删除名为zs.txt的所有文件:

注:必须使用{}指定-exec选项,find命令会将{}替换成它定位到的文件的路径名,并对每个文件执行rm操作。在最后用 \ ; 表示-exec选项结束

5)-ok选项

-exec命令选项始终对通过find命令定位的每个文件执行命令。另一个选项-ok允许用户对找到的文件执行操作。但是此选项会对在每个文件执行命令前要求用户进行确认

2、locate命令

可以快速定位文件路径,locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度。管理员需要定期更新locate数据库。

语法:locate [可选项] 要搜索的文件

由于locate基于数据库进行查询,所以第一次运行前必须使用updatedb指令创建locate数据库。

Linux系统的系统管理员可以创建供locate命令在其中查找路径名的数据库。系统管理员必须定期运行updatedb命令更新数据库。并且只有Linux的系统管理员才能重新创建或更新locate数据库。

3、xargs命令

用此命令一次性操作多个文件

语法:

xargs [可选项] [命令 初始化参数]

此命令的典型用法:

定位到多个文件 | xargs 处理多个文件的命令.例如:

上述命令将/home/zs目录下的普通文件删除

此命令和-exec选项的区别是,-exec是find命令的可选项,所以只能和find命令一起使用。而xargs命令,可以不和find命令一起使用,如:

练习:搜索扩展名为.txt的文件(如果没有则touch几个出来),并交给xargs处理,处理方式为显示各个文件中包含词hello的行数。

find -type f -name “*.txt”| xargs grep “hello”| wc -l

xargs命令的常用选项:

例1:使用time命令来报告执行命令的时间:

可以通过-P 0 来提高CPU的利用率。-P表示最多运行多少进程,0表示一次尽可能多地运行进程。

1、ln命令(硬链接和软链接)

硬链接:

如果A文件和B文件的关系是硬链接关系,则当用户修改了A文件的内容,那么B文件的内容也会发生更改

特点

  • 硬链接可创建多个
  • 不能对目录做硬件连接
  • 不能在不同的文件系统之间做硬链接(不能跨文件系统)
  • 所有的硬链接具备相同的Node节点号

语法:

ln 源文件 硬链接文件

2、paste命令

paste命令并排显示文件内容,即水平合并

如上图,此命令的输出水平连接了这两个文件

三、在Linux中比较文件

1、cmp命令

cmp命令允许用户比较两个文件,并显示两个文件首个不同之处的行号和字符位数。它按字节比较两个文件。(英文一个字符占一个字节)

如果两个文件是相同的,则cmp命令不提供任何输出

2、comm命令

不像cmp命令按字节比较文件,comm命令按行比较两个排序的文件。

不带任何选项的comm命令提供三列输出:

第一列:只存在第一个文件的行。

第二列:只存在于第二个文件的行。

第三列:两个文件都有的行。

3、uniq命令

uniq命令比较存储的文件的相邻行,并使用不同选项来显示文件中唯一的或重复的内容。

4、type命令

此命令会显示对应命令的所在路径,如果是内置命令,则会相应地显示命令的类型,如关键字,内置命令等。

5、exec命令

exec后跟命令,且执行完对应命令后会退出shell。

四、压缩命令

1、gzip实用程序

gzip命令用于压缩文件。

解压用的是gunzip、gzip -d或zcat。

gzip实用程序能将原始文本文件的尺寸减少60%到70%。它创建带.gz扩展名的文件。

语法: gzip [可选项] 要压缩的文件

解压: gunzip [可选项] 压缩包 / zcat [可选项] 压缩包

可选项:

 

课堂练习:

压缩/home下的hello.txt文件  gzip /home/hello.txt

解压文件hello.txt.gz     gunzip /home/hello.txt.gz

2、GZIP环境变量

GZIP环境变量可用于为gzip和gunzip指定默认选项

例如:

如上指定后,下次在使用gzip或gunzip命令时,压缩或/解压都将在第9级以详细和递归模式进行,这是最佳压缩。当然也可以自己在写命令时,自定义可选项。

使用指定的数字调节压缩速度,其中-1或--fast表示最快的压缩方法(较少压缩)

-9或-best表示最慢的压缩方法(最佳压缩)。默认压缩级别为-6(即,有偏压缩,以牺牲速度实现高压缩)

五、了解特殊字符

1、文件名扩展字符

我们在搜索文件时,可以通过一下扩展字符来匹配多类文件名。这些符号有:?、*和[ ]。他们通常被称为通配符。

在某些情况下,想要以元字符本来的意思来使用,如:

 

2、Linux中的分隔符:空格,制表符,换行符

3、命令终止符

  • 通知shell命令结束的最常用方式是换行符,是通过回车键插入的。
  • 当我们想将几个命令放在同一行时,可以使用分号表示命令的结束,如

  • &符号是另一个命令终止符,它会使命令在后台运行
  • 管道用于将一个命令的输出发送到另一个命令的输入,所以看到管道符号也表示前面的命令结束了

4、注释

用#插入注释。

六、了解Linux进程

当用户执行的某个进程过度使用CPU时,可能使其他进程无法获得所需的系统资源,这时计算机上运行的应用程序可能会停止响应,从而影响到连接到计算机的所有用户,因此我们应该学会管理Linux上运行的进程。包括了解进程类型,按需要更改进程的优先级,还有如何终止进程

1、了解进程

进程介绍

程序:静态,存在磁盘,永久

进程:动态,存在内存,有生命周期

系统模式转换

指令可以分为

  • 普通指令如ls、cd
  • 特权指令:只有内核可以使用

系统模式的转换:

用户模式:运行用户进程的模式

内核模式:运行内核进程的模式(内核模式不会完成具体的事务)

进程的启动和销毁

 

进程的启动:当系统启动完成后,管理进程的就是init了,而不再是内核

进程的销毁:父进程负责销毁子进程,并释放子进程占用的内存空间

进程的优先级

内核控制:0-99  动态优先级

用户控制:100-139 静态优先级

值越低,优先级越高,可用nice值来管理进程的优先级,给重要的进程分配更多的时间片,nice的值越低,进程的优先级越高。

nice值:

-20到19  对应100到139

-20对应的是100

19对应的是139

0对应的是120

进程的类型

Linux执行的所有进程可以分为以下三个类型

  • 交互进程(分为前台进程和后台进程,在shell启动的进程都是交互进程)
  • 批处理进程(进程序列,如执行批处理文件)
  • 守护进程(一般常驻后台运行)

2、管理进程

对进程的管理包括

  • 监视进程
  • 进程前后台的切换
  • 设置进程的优先级
  • 终止进程

根据启动方式也可以把进程分为

  • 终端无关进程
  • 终端相关进程

监视进程

可用命令:ps、pstree、top

进程的状态:

  • stopped:停止
  • ready:可以运行,但尚未运行
  • running:运行
  • interrupt:可中断运行
  • uninterrupt:不可中断运行
  • zombie:僵尸进程,进程结束但内存未释放

pstree命令

以树状显示进程的父子状态(如果没有安装,需手动安装,软件名称为psmisc)

加上可选项-p可显示进程的id

ps命令(process state)

显示系统中进程的详细信息

选项有三种类型  

Unix类型:  -字母

BSD类型:   字母

GNU类型:  --单词

ps命令有很多可选项,常用组合如下:

组合1  ps aux

a:显示现行终端下的所有进程信息,包括其他用户的进程信息(终端相关进程)

u:显示进程是哪个用户发起的

x:显示终端无关进程信息

一般我们不会看所有的进程,如我们想看某个程序有没有在运行,则可以用grep过滤

组合2  ps -elf

-e表示显示所有的进程(包括终端相关和无关)

-l:以长格式显示

-f:显示进程的完整信息

top命令

以动态方式,实时显示系统的进程、CPU、内存等信息

默认:5s刷新

top - 09:51:39   up 6 days, 15:44,  2 users,  load average: 0.00, 0.02, 0.05

      系统时间  系统运行时长      登录用户数   cpu在1、5、15分钟内的平均负载

第一行数据,和uptime命令的结果是一样的,通过交互式命令l可以关闭/显示此行信息

Tasks: 234 total,   1 running, 233 sleeping,   0 stopped,   0 zombie

系统中总进程数量   运行数   睡眠状态进程…

%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

此行表示CPU详细负载信息

us:用户空间进程对cpu的使用率(cpu运行用户和进程占用的时间比例)

sy:内核对于CPU的使用率(cpu运行内核进程占用的时间比例)

ni:调整过nice值的进程所占的比例(cpu运行调整过nice值的进程占用的时间比例)

id:空闲进程所占比例(cpu空闲的时间比例)

wa:等待IO完成的进程所占比例(等待IO完成所花费的时间比例)

hi:表示硬中断时间比例

si:表示软中断时间比例

st:被偷走的时间比例(在虚拟化场景中,被虚拟机中的进程所占用的是时间就是st的时间比例)

选项说明:
-d 秒数  :指定top命令每隔几秒更新,默认为3秒

-i  :使top不显示任何闲置或者僵死的进程

-p :通过指定进程ID来指定监控某个进程的状态

交互操作说明:

操作

功能

P

以CPU使用率排序(默认)

M

以内存使用率排序

N

以PID排序

q

退出top

默认就是以CPU使用率排序

进程前后台切换

  • 指定进程到后台运行,只需要在命令后加与号(&)即可。
  • CTRL+Z暂挂当前进程
  • 通过jobs命令查看所有暂挂的前台和后台进程,以及正在运行的后台进程列表
  • 使用bg命令在后台恢复进程,语法: bg [%]  进程的作业号
  • 使用fg命令可以在前台恢复进程(也可从后台将进程切换至前台)

除了暂挂进程,还可以通过不接收任何进一步的命令直至完成指定的后台进程来暂挂Shell。也就是不允许接收新的指令了,要执行此任务,可以使用wait命令。

例如:top命令在后台运行用于监视系统资源。当CPU利用率超过70%时,系统管理员可能需要暂挂在系统上创建所有的新进程,且只观察当前运行的进程。在此场景中,wait命令可用于暂挂Shell,使其不接收进一步的命令,直至终止top命令。

语法: wait %作业号

在完成指定的作业前,用户不能在命令提示符下输入任何进一步的命令

例如:

如果wait命令没有指定任何参数,则表示需要等待完成所有后台进程,才能在Shell提示符下输入命令。

设置进程的优先级

默认情况下,Linux系统以相同的优先级执行所有的进程。有时需要设置一个进程的优先级,使它在其他进程之前执行。可以通过nice命令实现

语法: nice [可选项] 命令

可指定-n 增量值作为可选项,增量值范围是-20到19,如果不指定增量值,则默认设置为10。较高的增量值表示较低的优先级,可以使用负增量来提高进程的优先级。

  • 在命令前加上nice -n 值  命令,则可以指定此进程运行的优先级
  • 用renice命令可以修改已有进程的优先级 renice -n  值  -p  进程ID

终止进程

有时进程可能停止响应,因此需要终止它。

kill命令

kill的参数

-l列出所有的杀死、终止信号

常用的信号如下:

1) SIGHUP(挂起进程、终端突然掉线,用户突然退出)

2) SIGINT (中断信号,一般常用CTRL+C发送信号2)

3) SIGQUIT(退出信号,一般用CTRL+\发送信号3)

9) SIGKILL(强制中断信号,一般用于立即杀死某些进程)

15) SIGTERM(kill默认使用的就是15信号,终止进程)

20) SIGTSTP(暂停进程,同时用CTRL+Z发送暂停信号)

kill特殊信号之0,常用在shell脚本中

kill -0 PID  表示不发送任何信号给PID进程,但是会检查此进程是否存在,如果存在,则结果为0,不存在为1,通过echo $? 来查看上一个命令的结果

killall命令

用kill杀死进程,只能杀死一个pid进程,通过killall可以直接通过名字杀死进程

如killall vim 杀死所有的vim进程

第八章、Linux实用程序

了解文件压缩实用程序、了解格式化磁盘实用程序、调度任务、了解其他实用程序。

一、了解文件压缩实用程序

1、gzip实用程序

gzip命令用于压缩文件。

解压用的是gunzip、gzip -d或zcat。

gzip实用程序能将原始文本文件的尺寸减少60%到70%。它创建带.gz扩展名的文件。

语法: gzip [可选项] 要压缩的文件

解压: gunzip [可选项] 压缩包 / zcat [可选项] 压缩包

课堂练习:

压缩/home下的hello.txt文件  gzip /home/hello.txt

解压文件hello.txt.gz     gunzip /home/hello.txt.gz

2、GZIP环境变量

GZIP环境变量可用于为gzip和gunzip指定默认选项

例如:

如上指定后,下次在使用gzip或gunzip命令时,压缩或/解压都将在第9级以详细和递归模式进行,这是最佳压缩。当然也可以自己在写命令时,自定义可选项。

使用指定的数字调节压缩速度,其中-1或--fast表示最快的压缩方法(较少压缩)

-9或-best表示最慢的压缩方法(最佳压缩)。默认压缩级别为-6(即,有偏压缩,以牺牲速度实现高压缩)

3、重定向

二、了解格式化磁盘实用程序

在linux中可以使用fdisk命令来操作分区

要启动fdisk,需要作为root用户输入fdisk命令。可以通过fdisk,使用以下任何一种设备格式化:

可选项:  列出分区

输入fdisk /dev/sda可以进入分割硬盘的模式

命令:

三、了解聊天实用程序

可以使用一些命令向其他终端发送消息

1、mesg命令设置是否接收消息

mesg命令有两个选项,y和n。

mesg y命令允许其他用户写入你的终端,n则不允许。

不带任何参数的mesg命令显示你的终端的当前访问状态。

2、who -T命令查看用户消息状态

可以使用带有-T或-w参数的who命令显示当前登录用户的消息状态

例如:

在第二列中,显示+(加号)的表示该用户允许其他用户使用write命令发送消息,减号则表示不允许其他用户发送消息。如果who命令找不到用户终端的状态则显示?问号。

要显示表头可以加上-H选项:

3、talk命令

可通过此命令通过网络与另一个用户聊天,语法: talk 用户名 [终端名]

可以通过指定用户名来开始聊天会话,但是如果用户登录到了多个终端上,则需要加上终端名称。

安装talk:

启动服务:

systemctl enable ntalk

记得需要重启

如:root想要和zs用户聊天时可以输入命令:

之后zs用户那边会收到聊天请求,如果要接受,则需要同样输入talk root

这样就可以聊天了。

如果zs不接受消息,talk将每隔30秒发送一次请求,直到zs接受或者root按Ctrl+C结束

4、write实用程序

write实用程序用于将文本写入另一个用户的终端

语法: write 用户名 [终端名]

 

zs将接收到提示,他可以选择输入mesg y来接收消息或拒绝

如果一个用户登录了多个终端,而write命令又没有指定终端,则默认将消息发送给累计时间最长的终端上。

5、wall实用程序

此命令用于向所有用户终端发送消息。wall命令将消息发送给当前登录linux系统的所有用户,并将他们的mesg权限设置为y。语法: wall <要发送的消息>

可以对所有用户发送多行消息,需要按Ctrl+C键终止消息。

root发送消息:

注:由root用户发送的消息将发送给所有用户的终端,而不管他们的mesg权限。只有在需要的时候以及知道在与谁通信的情况下才能使用talk、write或wall,因为所有这些实用程序会写入终端,并可能终端用户的显示。

四、调度任务

1、cron守护进程

crond任务调度

crontab 进行定时任务的设置

任务调度是指系统在某个时间执行的特定的命令或程序

语法:

crontab [选项]

常用选项:

  • -e  编辑crontad定时任务
  • -l  查询crontab任务
  • -r  删除当前用户所有的crontab任务

快速入门

每分钟执行一次命令--ls -l /etc/ > /tmp/to.txt

设置任务调度文件: /etc/crontab

设置个人任务调度。执行crontab -e命令

这里第一个的*/1就表示每隔一分钟执行一次

例如:

参数细节说明(5个占位符)

项目

含义

范围

第一个*

一小时中的第几分钟

0-59

第二个*

一天中的第几小时

0-23

第三个*

一个月中的第几天

1-31

第四个*

一年中的第几月

1-12

第五个*

一周中的星期几

0-7(0和7都代表周日)

特殊符号说明

特殊符号

含义

*

表示任何时间,如第一个*表示一小时中每分钟都执行一次

代表不连续时间,如0 8,12,16 * * *表示每天8点0分,12点0分,16点0分都执行一次

-

表示连续时间的范围,如0 5 * * 1-6表示周一到周六的5点0分执行

*/n

代表每隔多久执行一次,如*/10 * * * *表示每隔10分钟执行一次

特定时间执行任务案例

时间

含义

45 22 * * *

每天22点45分执行命令

0 17 * * 1

每周一的17点0分执行

0 5 1,15 * *

每月1号和15号的5点0分执行

40 4 * * 1-5

每周一到周五的4点40分执行

*/10 4 * * *

每天的4点,每隔10分钟执行一次

0 0 1,15 * 1

每月1号和15号,每周一的0点0分执行
注意:周几和几号最好不要同时出现,容易混乱

Linux系统上的每个用户都有一个单独的crontab文件,可将其提交到cron守护进程

如果调度命令产生任何输出,cron守护进程会发送一封邮件给你。

且Linux管理员可以选择禁止某些用户使用cron。

 

 

2、at实用程序

  • at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
  • 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
  • at命令是一次性定时计划任务,执行完一个任务后不再执行此任务
  • 在使用at命令时,一定要保证atd进程的启动,可使用相关指令查看(ps -ef | grep atd)

atd运行原理

at语法

at [选项] [时间]

回车输入命令后按两次CTRL+D退出

命令选项

选项

含义

-m

当指定的任务被完成后,将给用户发送邮件,即使没有标准输出

-I

atq的别名

-d

atrm的别名

-v

显示任务将被执行的时间

-c

打印任务的内容到标准输出

-V

显示版本信息

-q <队列>

使用指定的队列

-f <文件>

从指定文件读入任务而不是从标准输入读入

-t <时间参数>

以时间参数的形式提交要运行的任务

时间定义

  1. 接受在当天的hh:mm(小时:分钟)式的时间指定。加入时间已经过去,那么就放在第二天执行,例如04:00
  2. 使用midnight(深夜),noon(中午),teatime(下午茶一般是下午四点)等比较模糊的词语来指定时间
  3. 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午例如05pm
  4. 指定命令执行的具体时间,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定日期必须跟在指定时间后面,例如:04:00 2021-03-01
  5. 使用相对计时法。格式为:now + x 时间单位,时间单位可以是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。例如 now + 5 minutes
  6. 直接使用today(今天)、tomorrow(明天)来指定完成命令的时间

应用实例

案例1:2天后的下午5点执行 /bin/ls /home

案例2:atq命令来查看系统中没有执行的工作任务

案例3:明天7点,输出时间到指定文件内,如/root/atdate100.log

案例4:2分钟后,输出时间到指定文件内,如/root/atdate200.log

案例5:删除已经设置的任务,atrm编号

和at实用程序相关的文件:

如用-f可选项指定执行文件

五、了解其他实用程序

1、bc实用程序

bc实用程序可用作计算器,可计算很大的小数值。它从具有数学表达式的文件获取条目,并在标准输出上显示每个表达式的结果,如果不指定文件名,bc则从标准输入获取输入。

语法: bc [可选项] [文件]

用法:

2、finger实用程序

如果没有则先安装:

finger实用程序用于显示当前登录到Linux系统的所有用户的状态,他显示的信息有:

登录名,全名,终端名(含写状态)、空闲时间、登录时间、办公室电话、主机信息等。

写权限随终端名一起显示,显示为一个星号*

终端名后显示*表示拒绝写权限

语法:finger [可选项] [用户名]

如果使用finger实用程序指定用户的登录名,则还会显示有关该用户的其他信息,例如用户的home目录、登录shell、邮件状态、文件(.plan、.project、.forward)的内容

其中每个用户都可以在自己的家目录下创建.plan文件记录计划。

可以在.project文件中指定正在做的项目

可以创建.forward文件来指定将所有邮件转发至的电子邮件地址。但是回到办公室记得删除此条目

可选项:

可选项

描述

-s

与不带任何选项使用finger命令相同

-l

附加显示用户的家目录、家庭电话、登录shell、邮件状态及上述三个文件内容

-p

当与-l一起使用时,不显示.plan和.project文件的信息

-m

使finger命令对登录名检查大小写

注:finger 指定用户名默认会以-l的样式输出,如果不加用户名则默认以-s的样式输出

3、aspell实用程序

aspell实用程序用于对文件内容进行拼写检查,它检查文件中的每个词,并建议替换字典中不存在的所有词,用户可以从建议的词中选择一个来替换。语法: aspell [可选项] <命令>,如:aspell -c 文件名来进行拼写检查

4、chfn实用程序

chfn(更改finger信息)实用程序用于更改用户的finger信息,它从/etc/passwd文件检查用户的信息,并允许用户更改信息。语法:chfn [可选项] [用户名]

如果不指定用户信息,则它将转入交互模式,要求用户为/etc/passwd文件中的每个字段输入或更改信息。

例如:

普通用户需要验证密码。

可选项:

注: 不能在全名、办公室、电话号码字段中包含逗号

5、head和tail实用程序

head命令用于从文件开头显示指定的行数,tail命令从文件末尾显示指定的行数。如果未指定行数,则默认显示10行。语法: head/tail [可选项] [文件名]

例如:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐