Linux部分

Linux基础部分

初识shell

使用shell的两种方式

  • 交互式命令行
    • 默认等待用户输入命令,输入一行回车后执行一行命令
    • 效率低 适合少量的工作
  • shell脚本
    • 将需要执行的命令和逻辑判断语句都写入一个文件中,一起运行
    • 效率高 适合完成复杂,重复性工作

bash shell提示符

shell语法

命令 选项 参数
1
2
[root@localhost ~]# cal --year -m 2020

命令

  • cal是命令,用于查看日历

选项

  • --year是选项,表示显示一整年,这个是一个长选项,也就是单词都拼全了,需要两条-符号
  • -m是短选项,是首字母,表示每个星期的星期一作为第一天
  • 对于有些命令而言,可以不写选项,这样命令会有个默认的行为
  • 短选项可以多个合并在一起,比如上面的命令可以写成-ym其中y是year简写,可以和m写在一起,而长选项不支持写在一起
ls

用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)

1
ls [-alrtAFR] [name...
  • -a:显示所有文件及目录 (**.**开头的隐藏文件也会列出)

  • -l:除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出

  • -r:将文件以相反次序显示(原定依英文字母次序)

  • -t:将文件依建立时间之先后次序列出

  • -A:同 -a ,但不列出 “.” (目前目录) 及 “..” (父目录)

  • -F:在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/“,链接加”@”

  • -R:若目录下有文件,则以下之文件亦皆依序列出

  • -h:将显示出来的文件大小以合适的单位显示出来

    实例

    • 查看当前目录下的文件

      1
      [root@localhost ~]# ls
      • 查看根目录下的文件,查看/usr目录下的文件
1
2
[root@localhost ~]# ls /
[root@localhost ~]# ls /usr
echo

用于字符串的输出

选项

  • -n:不输出行尾的换行符

  • -e

    :允许对下面列出的加反斜线转义的字符进行解释

    • \ 反斜线
    • \a 报警符(BEL)
    • \b 退格符
    • \c 禁止尾随的换行符
    • \f 换页符
    • \n 换行符
    • \r 回车符
    • \t 水平制表符
    • \v 纵向制表符
  • -E 禁止对在STRINGs中的那些序列进行解释

grep

针对文件内容进行过滤

实例

1
2
3
4
5
6
[root@xwz ~]# grep 'root' /etc/passwd
# 在/etc/passwd的文件中找出有root的行
[root@xwz ~]# grep '^root' /etc/passwd
# 在/etc/passwd中找出root开头的行
[root@xwz ~]# grep 'bash$' /etc/passwd
# 在/etc/passwd中找出bas#h结尾的行文件管理

文件管理

文件管理命令

几个常见的处理目录的命令

  • ls(英文全拼:list files): 列出目录及文件名

  • cd(英文全拼:change directory):切换目录

  • pwd(英文全拼:print work directory):显示目前的目录

  • mkdir(英文全拼:make directory):创建一个新的目录

  • rmdir(英文全拼:remove directory):删除一个空的目录

  • cp(英文全拼:copy file): 复制文件或目录

  • rm(英文全拼:remove): 删除文件或目录

  • mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称

  • touch:创建新文件

mkdir (创建新目录)

  • -m:配置文件的权限喔!直接配置,不需要看默认权限 (umask)
  • -p:帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
  • -v:显示目录创建的过程

cp (复制文件或目录)

  • -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
  • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
  • -r:递归持续复制,用於目录的复制行为;(常用)
  • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
  • -u:若 destination 比 source 旧才升级 destination !
  • -v:显示复制的详细过程

mv(移动文件与目录,或修改名称)

  • -f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
  • -i:若目标文件 (destination) 已经存在时,就会询问是否覆盖!
  • -u:若目标文件已经存在,且 source 比较新,才会升级 (update)
  • -v:显示复制的详细过程

rm (移除文件或目录)

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

文本文件查看

cat

  • -n:由 1 开始对所有输出的行数编号
  • -b:和 -n 相似,只不过对于空白行不编号。
  • -s:当遇到有连续两行以上的空白行,就代换为一行的空白行。
  • -A:显示控制字符。

less

可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页

查看文件的开头部分的内容

  • -q:隐藏文件名,默认是隐藏
  • -v:显示文件名
  • **-c<数目>**:显示的字节数。
  • **-n<行数>**:显示的行数。

tail

会把文本文件里的最尾部的内容显示在屏幕上

  • -f:循环读取
  • -q:隐藏文件名,默认隐藏
  • -v:显示文件名
  • **-c<数目>**:显示的字节数
  • **-n<行数>**:显示文件的尾部 n 行内容
  • -s:与-f合用,表示在每次反复的间隔休眠S秒

grep

针对文件内容进行过滤,本工具属于文本三剑客.

实例

1
2
3
4
5
6
[root@xwz ~]# grep 'root' /etc/passwd
# 在/etc/passwd的文件中找出有root的行
[root@xwz ~]# grep '^root' /etc/passwd
# 在/etc/passwd中找出root开头的行
[root@xwz ~]# grep 'bash$' /etc/passwd
# 在/etc/passwd中找出bash结尾的行

文本文件编辑

  • vi:所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。
  • vim:具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

vim/vi的使用

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

  • i切换到输入模式,以输入字符。
  • x删除当前光标所在处的字符。
  • **:**切换到末行模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠末行模式输入更多命令。

按键说明:

移动光标的方法

n 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
0 或功能键[Home] v这是数字『 0 』:移动到这一行的最前面字符处 (常用)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n n 为数字。光标向下移动 n 行(常用)
G 移动到这个档案的最后一行(常用)

文本的搜索与替换

/word 向光标之下寻找一个名称为 word 的字符串。 (常用)
n 这个 n 是英文按键。代表重复前一个搜寻的动作。
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 (常用)
:1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)

删除、剪切,复制与粘贴

dd 删除/剪切光标所在的那一整行(常用)
ndd n 为数字。删除/剪切光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在光标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
. 重复前一个动作。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

进入输入或取代的编辑模式

i, I 进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
a, A 进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(常用)
r, R 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc] 退出编辑模式,回到一般模式中(常用)

末行模式下的储存,离开等指令

:w 将编辑的数据写入硬盘中(常用)
:w! 若文件属性为『只读』时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件的权限有关
:q 离开 vi (常用)
:q! 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)
:x 效果等同于(保存并退出)
:X 大写的X,用于加密文件
ZQ 不保存,强制退出。效果等同于**:q!**。
:w [filename] 将编辑的数据储存成另一个文件(类似文件另存为)
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到光标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个文件。
:! command 暂时离开 vi 到bash命令行下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的文件信息!

vim环境变量修改

:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!

文件基本属性与文件查找

文件时间

stat

用于显示文件时间和 inode 内容,inode相关的知识会在后面的磁盘管理章节详细讲解,这边主要来看文件的时间

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# export LANG="en_US.UTF-8"
# 改回中文是LANG="zh_CN.UTF-8"
[root@localhost ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1241 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33574979 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2021-04-04 17:54:09.700844151 +0800
Modify: 2021-04-04 16:53:30.524854041 +0800
Change: 2021-04-04 16:53:30.524854041 +0800
Birth: -
  • Access:访问时间,也叫atime
    • 当文件被访问的时候,这个时间就会发生改变
    • Linux文件运行的时候查看文件又频繁数量又大,如果每次atime发生变化的时候都记入硬盘,或造成很大的压力。RHEL6开始relatime,atime延迟修改,必须满足其中一个条件:
      • 自上次atime修改后,已达到86400秒
      • 发生写操作时
  • Modify:修改时间,也叫mtime
    • 当文件内容发生变化的时候,这个时间就会发生改变
  • Change:改变时间,也叫ctime
    • 当文件状态被改变的时候,这个时间就会发生修改

文件类型

判断文件类型

文件查找

which

用于查找文件

which指令会在环境变量$PATH设置的目录里查找符合条件的文件

1
2
which [文件...]

find

实时查找工具,通过遍历指定路径下的文件系统完成文件查找

工作特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 可以满足多种条件匹配
1
2
3
4
find [选项] [路径] [查找条件 + 处理动作]
查找路径:指定具体目录路径,默认是当前文件夹
查找条件:指定的查找标准(文件名/大小/类型/权限等),默认是找出所有文件
处理动作:对符合条件的文件做什么操作,默认输出屏幕
查找条件
  • 根据文件名查找

    1
    2
    3
    [root@localhost ~]# find /etc -name "ifcfg-ens33"
    [root@localhost ~]# find /etc -iname "ifcfg-ens33" # 忽略大小写
    [root@localhost ~]# find /etc -iname "ifcfg*"
  • 按文件大小

    1
    2
    3
    4
    [root@localhost ~]# find /etc -size +5M    # 大于5M
    [root@localhost ~]# find /etc -size 5M # 等于5M
    [root@localhost ~]# find /etc -size -5M # 小于5M
    [root@localhost ~]# find /etc -size +5M -ls # 找到的处理动作-ls
  • 指定查找的目录深度

  • 按时间找

  • 按照文件属主、属组找,文件的属主和属组,会在下一篇详细讲解。

  • 按文件类型

  • 按文件权限,文件权限会在下一篇详细讲解

  • 按正则表达式

  • 条件组合

    • -a:多个条件and并列
    • -o:多个条件or并列
    • -not:条件取反

用户权限管理

进程管理

systmed 是一个用户空间的程序,属于应用程序,不属于 Linux 内核范畴。Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit(这个是centos6中的初始化系统)固有的缺点,提高系统的启动速度。

systemd 的主要命令行工具是systemctl

1
2
systemctl [选项...] {命令} ...

systemctl常用命令:

start :启动服务

stop :停止服务

status :检查服务状态检查服务是否启动

enable :启用开机自启服务

查看系统中的进程

ps

常用组合:ps aux, ps -aux, ps -ef, ps -efH

  • 按照CPU使用率排序查看所有进程

    1
    2
    [root@localhost ~]# ps aux --sort %cpu     # 递增
    [root@localhost ~]# ps aux --sort -%cpu # 递减
  • 按照实际内存使用排序查看所有进程

    1
    2
    [root@localhost ~]# ps aux --sort rss     # 递增
    [root@localhost ~]# ps aux --sort -rss # 递减

top 实时显示 process 的动态

删除执行中的程序和工作

kill

常用命令

kill -9 ‘ ‘

kill -15 ‘ ‘

pkill

pkill 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令

1
2
pkill [选项]  name

  • name: 进程名
  • -u:指定用户名
  • -t:指定终端
进程优先级

nice

使用ps查看

1
2
[root@localhost ~]# ps axo pid,command,nice --sort=nice
[root@localhost ~]# ps axo pid,command,nice,cls --sort=-nice

PR

jobs

jobs 命令可以用来查看当前终端放入后台的任务

  • 在命令后面加入空格 &。使用这种方法放入后台的命令,在后台处于执行状态
  • 命令执行过裎中按 Ctrl+Z 快捷键,命令在后台处于暂停状态

fg 命令用于把后台工作恢复到前台执行