清空控制台命令: clear

查看 ip 地址的两种方式

  1. ip add
  2. ifconfig 如果不存在下载执行: sudo yum install net-tools.x86_64 -y

# 路径

==安全人员[必须]知道的路径==
cat /var/log/messages #Linux 系统日志文件
cat /var/log/secure #登入日志,ssh 远程连接安全,很重要
cat /var/log/lastlog #有哪些用户登入 lastlog
==用户和组相关文件==
cat /etc/passwd #用户 (user) 的配置文件,记录用户的各种信息
每行的含义:用户名|用户标识号|组标识号|注释性描述|主目录|登入Shell( )
cat /etc/shadow #口令的配置文件
每行的含义:登入名|加密口令|最后一次修改的时间|最小时间间隔|最大时间间隔|警告时间|不活动时间|失效时间|标志
cat /etc/group #组 (group) 的配置文件,记录 Linux 包含的组的信息
每行含义:组名|口令|组标识号|组内用户列表

# 删除目录或文件

  • 参数 -r:-R: 删除指定目录及目录下的所有文件
  • 参数 -f: 强制删除,不进行提示
  • 参数 -i: 删除前进行提示
  • 参数 -d: 将欲删除目录的硬链接数据删成 0, 删除该目录
  • 参数 -l: 删除文件超过 3 个或递归删除前进行提示
==删除目录或文件==
rm英文全拼(remove)删除的意思
用于删除一个文件或目录
注意:文件一旦通过rm命令删除,则无法恢复,所以必须格外小心的使用该命令
参数: 
-i 删除前逐一确认是否删除
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认
-r 将目录及以下之档案亦逐一删除
案例:
删除一般文件
rm  文件名
删除目录/文件
rm -r /目录
rm:是否删除 目录XXX? 回复y就是确认删除
删除当前目录下所有文件及目录
rm -r *
删除指定目录所有文件及目录直接删除无需逐一确认
rm -rf 文件名或者/目录/

# 添加用户 / 删除用户

==添加==
[root@localhost ~]# useradd 用户名
说明:
1.当创建成功后,会自动创建和用户名同名的家目录
2.通过useradd -d /目录/ 用户名,指定目录,新的用户名,给新创建的用户指定家目录,注意:不用提前创建家目录因为自己创建的
[root@localhost home]# useradd -d /home/nidejia/ tom
==删除==
1.删除用户但保留家目录
[root@localhost home]# userdel 用户名
2.删除用户与家目录一并删除,不用指定目录位置
[root@localhost home]# userdel -r 用户名
细节:讨论是否保留家目录
建议:保留,毕竟删了就找不回来了

# 指定 / 修改用户密码

passwd是password的缩写是密码的意思
passwd 用户名,注意:如果不指定密码则修改当前的用户密码很危险
[root@localhost home]# passwd zwj

# 显示当前所在目录位置

pwd:显示当前所在目录
[root@localhost home]# pwd

# 查询用户信息

翻译:此用户不存在 id: jack: no such user
[root@localhost home]# id 用户名
输出 : uid=1002(用户名) gid=1003(group)=1003(group)

# 查询当前用户 / 第一次登入的用户信息

[root@localhost home]# who am i
输出: root     pts/0        2022-09-29 20:43 (192.168.244.1)

# 切换用户

[root@localhost home]# su - dkx
如果低权限转高权限则需要密码,反之高权限转低权限不需要密码
通过logout指令回到上次的登入状态,注意此指令只能在Xshell中使用
[dkx@localhost ~]$ logout
[root@localhost home]#
如果上次没有登入记录则退出登入
[root@localhost home]# logout
Connection closed. 翻译:连接关闭

解释图:

image-20221019191019613

# 用户组

image-20221019191034275

# 新增组:

[root@localhost home]# groupadd 组名
==查看组的位置==
[root@localhost home]# cat /etc/group
==查看指定的组==
[root@localhost home]# cat /etc/group|grep 组名
与上面的cat /etc/group|grep 组名 大同小异
[root@localhost ~]# getent group 组名
==删除组==
[root@localhost ~]# groupdel 组名
==增加用户时直接存入组中==
[root@localhost ~]# useradd -g 组名 用户名
可以通过id来查询这个用户的组
==修改用户的组==
[root@localhost ~]# usermod -g 组名 用户名
可以通过id来查询这个用户的组

# 关机指令 / 注销

注意:

  1. 不管是重启系统还是关闭系统,首先要运行 == sync == 指令,把内存中的数据写到磁盘中
  2. 目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 == sync ==, 提醒:小心使得万年船
shutdown -h now ---立刻进行关机
shutdown -h 指定分钟 ---指定分钟后关机
shutdown -r now ---现在重新启动计算机
halt ---关机,作用和上面一样
reboot ---现在重新启动计算机
sync ---把内存的数据同步到磁盘
logout/exit ---注销/登出

logout [^ 示意图]

image-20221019190932609

# 文件 <a href = "# 删除目录或文件"> 删除目录或文件 查看其它相关标题 </a>

修改文件所在组查看 (用户.md)[打开用户.md](E:\Typora\ 笔记 \Linux\CentOS 7 Linux\ 指令 \ 用户.md)

语法格式:

chgrp 组名 文件名

# 创建一个文件 (touch)

  • 参数 -a: 只修改文件的读取时间 (access)

  • 参数 -m: 只修改文件的修改时间 (modify)

  • 参数 -c: 若指定的文件不存在,不创建新的文件

  • 参数 -d: 修改时指定日期时间,而不是当前的系统时间,可设定多种格式 (date)

  • 参数 -r: 将指定文档和目录的日期时间设置成为与参考文档或目录日期时间一致

  • 参数 -t: 使用过指定的时间,而不是当前的系统时间,可设定多种格式 (time)

# 二进制文件
touch 文件名.后缀名

# 查看文件内容 (cat)

  • 参数 -b: 查看文件时对于空白行不编号
  • 参数 -E: 每行结尾显示 $ 符号
  • 参数 -n: 查看文件时对每一行进行显示行号,从 1 开始计数
  • 参数 -s: 当遇到两行以上的空白行时替换为一行空白行
  • 参数 -T: 将 tab 字符显示为 ^|
cat 文件名.后缀名

cat 只能浏览文件,而不能修改文件,为了方便,一般会带上 <font size=4,font color=red> 管道命令 </font> |more 分页查看

cat 文件名.后缀名 | more

查看文件内容并以分页的形式展示出来

关于 more 详情查看 <a href="#more">more 介绍 </a>

# 管道符号 (|)

在一个语句后面加上 | 表示将前一个命令的处理结果输出传递给后面的命令再次处理

# 过滤 test.txt 文件内容并以分页形式展现
grep -v he text.txt | more

# 编辑文件 (vi/vim)

vi 文件名.后缀名

# 拷贝文件或目录 (cp)

# 将 data 目录下的 test.txt 文件拷贝到 tmp 目录中
cp /data/test.txt [一个空格] /tmp/
  • 将 test.txt 文件拷贝到当前目录下 (. 为当前目录下), 使用特殊符号 . 表示当前目录
cp /root/data/test.txt .

使用 cp -r 命令,拷贝目录

  • 参数 -r: 为递归拷贝,拷贝目录及目录里的内容
  • 参数 -p: 拷贝时保持文件属性不变
  • 参数 -a: 为拷贝所有,与参数 -pdr 等价
  • 参数 -d: 若复制的源文件是符号链接,仅复制链接本身,并且保留符号链接所指向的目标文件或目录,复制时保留链接
  • 参数 -f: 强制覆盖已经存在的目标文件,不提示用户进行确认
  • 参数 -i: 在覆盖已经存在的目标文件前提示用户进行确认,防止覆盖重要文件
  • 参数 -l: 为源文件创建硬链接,与 ln 命令相同,(要求源文件和目标文件必须在同一个分区或同一个文件系统上)
  • 参数 -p: 复制文件时保留源文件的所有者,权限信息及事件属性
  • 参数 -u: 在目标文件不存在或源文件比目标文件新时才进行复制,否则,不进行复制
  • 参数 -S: 在备份文件时,用指定的后缀 SUFFIX 代替文件名的默认后缀
  • 参数 -v: 详细显示命令执行的操作
  • 参数 -s: 不进行真正的复制操作,仅为源文件创建符号链接,与 ls -s 功能相同
# 将 data 目录下内容递归拷贝到 tmp 目录中
cp -r /data/ /tmp/
# 如果再次执行就会提示是否覆盖如果内容过多可以直接使用以下两种方式强制覆盖不提示
\cp -r /data/ /tmp/
cp -rf /data/ /tmp/

# 移动文件或目录 (mv)(注意:移动跟拷贝不是一样含义的)

使用 mv 命令,全名为 move

  • 参数: -i: 在目标文件已存在时提示用户是否覆盖
  • 参数 -f: 强制覆盖已存在的目标文件而不进行提示
  • 参数 -b: 在覆盖目标文件前进行备份
  • 参数 -S: 与参数 b 一起使用,可指定备份文件的所有附加的字尾
# 将 data 目录移动到 root 目录中
mv /data/ /root/
  • 将 /data/ 目录移动到当前目录下,使用特殊符号 . 表示当前目录
mv /data/ .

# 查找当前位置的文件或目录 (find)

使用 find 命令,查找文件或目录

参数描述
-type查找类型,f 为文件 file<br>d 为目录 directory
-name查找名称,可以使用 * 作为通配符 <br> 匹配名称
-user查找属于指定用户的所有文件
-size按指定大小查找文件 (+n 大于 -n 小于 n 等于,单位有 k,M,G)
  • 在 /opt/typora/ 目录中,查找 /note/ 目录,找到则输出位置,否则不输出
# 要找到的目录不能带有 / 符号
[root@localhost ~]# find /opt/typora/ -type d -name note
/opt/typora/note
  • 在 /opt/typora/note/ 目录中,查找 MySQL.dm 文件,找到则输出,否则不输出
[root@localhost ~]# find /opt/typora/note/ -type f -name MySQL.md
/opt/typora/note/MySQL.md
  • 使用 * 作为通配符,匹配名称
[root@localhost ~]# find /opt/ -type d -name typo*
/opt/typora
  • 使用 * 通配符查找 /opt/typora/note/ 目录下所有后缀名为.md 的文件
[root@localhost /]# find /opt/typora/note -type f -name *.md
/opt/typora/note/MySQL.md
/opt/typora/note/test.md
/opt/typora/note/cha.md
  • find 命令与管道 | 配合使用,管道的意思是, | 前面的命令执行成功后,交给后面的命令再执行
# 查找 /opt/typora/note/ 目录下后缀名为 md 的文件并执行 ls 命令将它们列出来
[root@localhost ~]# find /opt/typora/note/ -type f -name *.md | xargs ls
/opt/typora/note/cha.md  /opt/typora/note/MySQL.md  /opt/typora/note/test.md
# 查找 /opt/typora/note/ 目录下后缀名为.md 的文件,并执行 cat 命令查看内容
[root@localhost /]# find /opt/typora/note/ -type f -name *.md |xargs cat
二进制文件夹Linux你好
  • 查找 /opt 目录下属于 root 的所有文件
[dkx@localhost ~]$ find /opt -type d -user root
/opt
/opt/rh
/opt/JDK17
/opt/IDEA
/opt/dataGrip
/opt/MySQL
/opt/google
/opt/google/chrome-unstable
/opt/google/chrome-unstable/MEIPreload
/opt/google/chrome-unstable/WidevineCdm
/opt/google/chrome-unstable/WidevineCdm/_platform_specific
/opt/google/chrome-unstable/WidevineCdm/_platform_specific/linux_x64
/opt/google/chrome-unstable/default_apps
/opt/google/chrome-unstable/locales
/opt/googlechajian
/opt/tujie
[dkx@localhost ~]$
  • 从 / 目录查找,大于 200M (兆) 的文件
[dkx@localhost ~]$ find /opt -type f -size +200M
/opt/IDEA/ideaIU-2021.3.3.tar.gz
/opt/dataGrip/datagrip-2021.3.3.tar.gz
/opt/MySQL/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
/opt/MySQL/mysql-community-server-8.0.28-1.el7.x86_64.rpm
/opt/MySQL/mysql-community-test-8.0.28-1.el7.x86_64.rpm
/opt/google/chrome-unstable/chrome
[dkx@localhost ~]$

# 定位文件路径 (locate)

locate 指令可以 <font color=red> 快速定位文件路径 </font>,locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件,locate 指令无须遍历整个文件系统,查询速度较快,为了保证查询结果的准备度 管理员必须定期更新 locate 时刻

基本语法:

# 建立数据库
updatedb
# 使用 locate 快速定位文件路径
locate [文件/目录]

<font color=blue> 特别说明:</font> 由于 locate 指令基于数据库进行查询,所以第一次运行前必须使用 updatedb 指令 <font color =red> 创建数据库 </font>.

# 查看指令所存放的目录中的位置 (which)

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

语法格式:

which [名称]

# 在文件内容中筛选出执行内容 (grep)

# 方法 1, 使用 grep 命令,筛选文件指定内容

参数描述
-v排除指定内容
-n显示行号
-i忽略大小写
  • test.txt 文件内容中,找到包含 he 的内容
[root@localhost /]# grep he /opt/typora/note/test.md
hello
  • test.txt 文件内容中,找到排除 he 的内容
[root@localhost /]# grep -v he /opt/typora/note/test.md
Linux
Hello

# 方法 2, 使用 awk 命令,筛选文件指定内容 (查找的内容需要使用 '/内容/' 包含)

  • test.txt 文件内容中,找到包含 he 的内容
[root@localhost /]# awk '/he/' /opt/typora/note/test.md
hello
  • test.txt 文件内容中,查找不包含 he 的内容 (语法: <font color = Re,font size=5> !'/内容/' </font>)
[root@localhost /]# awk '!/he/' /opt/typora/note/test.md
Linux
Hello

# 方式 3, 使用 sed 命令,筛选文件指定内容

  • 使用 sed 命令,获取 test.txt 文件内容,删除 (并不是删除文件中的) 包含 he 字符的行
hello[root@localhost /]# sed '/he/d' /opt/typora/note/test.md
Linux
Hello

其中参数 '/he/d' 表示删除包含 he 的选项行,最后的结果是不包含 he 的行

# 获取文件内容的前几行 (head)

使用 head 命令,取出文件的前几行,默认取出前 10 行

参数描述
-n [数字]表示取出前几行 <br> 例如 -n2 表示取出前 2 行
-[数字]表示取出前几行 <br> 例如 -2 表示取出前 2 行

使用 head -n2 命令,取出 test.txt 文件的前 2 行

[root@localhost /]# head -2 /opt/typora/note/test.md
Linux
Hello

# 获取文件内容的最后几行 (tail)

使用 tail 命令,取出文件最后几行,默认去处最后 10 行

  • 参数 -f: 实时追踪该文件的所有更新
参数描述
-n [数字]表示取出最后几行 <br> 例如 - n2 表示取出最后 2 行
-[数字]表示取出最后几行 <br> 例如 - 2 表示取出最后 2 行
[root@localhost /]# tail -2 /opt/typora/note/test.md
Hello
hello

# 获取文件某一行,或连续几行

题目:有一个 text.txt 文件,共有 100 行,要求显示出文件中的第 50 行至第 60 行内容

使用 seq 命令,给 test.txt 文件写入 100 行内容

[root@localhost /]# seq 100 >/opt/typora/note/test.md

使用 sed 替换指定

# 方法 1, 使用 sed 命令

  • 获取文件第 50 行内容
[root@localhost /]# sed -n '50p' /opt/typora/note/test.md 
50

sed 命令默认输出文件全部内容,使用参数 -n 取消默认输出, '50p' 表示只输出第 50 行内容

  • 获取文件第 50 到 60 行内容
[root@localhost typora]# sed -n '50,60p' /opt/typora/note/test.md 
50
51
52
53
54
55
56
57
58
59
60

把参数改成 '50,60p' 即可

# 方法 2, 使用 headtail 命令

  • 首先,使用 tail 命令获取倒数 20 行
[root@localhost typora]# tail -20 /opt/typora/note/test.md 
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  • 然后使用 | 管道加 head 命令,获取第 50 到 60 行内容
[root@localhost typora]# tail -50 /opt/typora/note/test.md |head -10
51
52
53
54
55
56
57
58
59
60

# 方法 3, 使用 awk 命令

  • 获取文件第 50 行内容
[root@localhost typora]# awk 'NR==50' /opt/typora/note/test.md 
50

参数中 NR 表示行号, == 表示等于

  • 获取文件第 50 到 60 行内容
[root@localhost typora]# awk 'NR==50,NR==60' /opt/typora/note/test.md 
50
51
52
53
54
55
56
57
58
59
60

参数中添加 'NR==60' , 限定行号范围,从第 50 行到第 60 行的内容

# 修改文件名 (mv)

例如:吧 abc.txt 文件重命名为 abc123.txt

<font color=red> 注意 </font>: 这是文件重命名,不是移动文件

可以使用 mv 命令,必须保证 abc123.txt 文件是不存在的,正是因为文件不存在,所以在使用 mv 命令时,直接重命名了该文件

# 创建一个文件
[root@localhost opt]# cd typora/
[root@localhost typora]# ls
note  Typora-linux-x64  Typora-linux-x64(1).tar.gz
[root@localhost typora]# mkdir test
[root@localhost typora]# ls
note  test  Typora-linux-x64  Typora-linux-x64(1).tar.gz
[root@localhost typora]# mv test/ 测试文件
[root@localhost typora]# ls
note  Typora-linux-x64  Typora-linux-x64(1).tar.gz  测试文件

# 写入文件

使用 echo 命令与 >> 追加重定向符号,将内容写入某个文件内的最后一行

# 将 "Hello Linux" 这句话写入到 Demo.txt 文件的最后一行中
echo Hello Linux >> Demo.txt

# Linux 重定向相关知识

配合 echo 使用,echo 原本输出到终端中,如果使用重定向那么就会输出到一个文件中

水流:从一个地方流向另一个地方

如果目标文件不存在则会创建目标文件

数据流: > 从左流向右

> 把输出的内容写入到右边的文件,同时清理右边源文件内容,放入新写入的内容:

鸠占鹊巢 :

[root@localhost 测试文件]# echo 1 >test.txt 
[root@localhost 测试文件]# cat test.txt 
1

>> 把输出写入到文件,源文件内容不动,在尾部放入写入的内容

1 >> 和 >> 相同,接收,标准 [追加] [输出] 重定向 === 正确的输出

鸠鹊同居:

[root@localhost 测试文件]# echo 1 >>test.txt 
[root@localhost 测试文件]# cat test.txt 
1
1

2> (没有空格) 标准 [错误] [输出] 重定向 === 错误的输出:

[root@localhost 测试文件]# cho 2>test.txt 
[root@localhost 测试文件]# cat test.txt 
bash: cho: 未找到命令...

向文件中输出 1~100 个数字

seq 100 >text.txt

将日期输出重定向到 test 文件中

[dkx@localhost 桌面]$ cal
      十月 2022     
日 一 二 三 四 五 六
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
[dkx@localhost 桌面]$ cal >test
[dkx@localhost 桌面]$ cat test 
      十月 2022     
日 一 二 三 四 五 六
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
[dkx@localhost 桌面]$

# 文件夹

# 创建文件夹 / 目录 (mkdir)

  • 参数 -m: 设置新目录的存取权限,类似于 chmod
  • 参数 -p: 创建多级目录
# 在 test 目录下 创建一级目录
[root@localhost opt]# mkdir test/demo
# 在 test 目录下 创建多级目录
[root@localhost opt]# mkdir -p test/demoa/demob

# rmdir (删除空文件夹,不可删除非空文件夹)

  • 参数 --ignore-fail-on-non-empty: 忽略数据存在目录非空产生的错误

  • 参数 -p: 递归删除各级目录

其它删除文件夹操作详情查看 (rm): <a href="# 删除目录或文件"> 删除目录或文件 </a>

# more

Linux more 命令类似于 cat , 不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键 (space), 就往下一页显示,按 b 键就会往回 (back) 一页显示,而且还有搜寻字符串的功能 (与 vi 相似), 使用中的说明文件,请按 h , 退出命令 q

常用操作

  • Space 键:显示文本的下一屏内容
  • Enter 键:只显示文本的下一行内容
  • 按斜线符 | : 接着输入一个模式,可以在文本中寻找下一个相匹配的模式
  • H 键:显示帮助屏,该屏上有相关的帮助信息
  • B 键:显示上一行屏内容
  • Q 键:退出 more 命令
  • Ctrl+F 向下滚动一屏
  • = 输出当前行的行号
  • :f 输出文件名和当前行的行号
  • V 调用 vi 编辑器
  • l 命令,调用 shell, 并执行命令

语法格式:

more (参数)(文件)
  • 参数 <数字> : 指定每屏显示的行数
  • 参数 -d : 显示 "[press space to continue,'q' to quit]" 和 "[perss 'h' for instructions]"
--More--(68%)[Press space to continue, 'q' to quit.]
  • 参数 -c : 不进行滚屏操作,每次刷新这个屏幕

  • 参数 -s : 将多个空行压缩成一行显示

  • 参数 -u : 禁止下划线

  • 参数 +<数字> : 从指定数字的行开始显示

  • 参数 -l : 取消遇见特殊字元 ^L (送纸字元) 时会暂停的功能

  • 参数 -p : 不以卷动的方式显示每一页,而是先清除荧幕后再显示内容

# 分屏查看 less

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

常用操作

  • space bar: 向下翻动一页

  • [pagedown] : 向下翻动一页

  • [pageup] : 向上翻动一页

  • / 字串:向下搜寻 [字串] 的功能; n : 向下查; N : 向上查找

  • ? 字串:向上搜寻 [字串] 的功能; n 向上查找; N 向下查找

  • q : 离开 less 这个程序

基本语法:

less [文件]
  • 参数 -b:<缓冲区大小>设置缓冲区的大小
  • 参数 -e: 当文件显示结束后,自动离开
  • 参数 -f: 强迫打开特殊文件,例如外围设备代号,目录和二进制文件
  • 参数 -g: 只标志追后搜索的关键词
  • 参数 -i: 忽略搜索时的大小写
  • 参数 -m: 显示类似 more 命令的百分比
  • 参数 -N: 显示每行的行号
  • 参数 -o<文件名>: 将 less 输出的内容在指定文件中保存起来
  • 参数 -Q: 不使用警告音
  • 参数 -s: 显示连续空行为一行
  • 参数 -S: 行过长时间将超出部分舍弃
  • 参数 -x<数字>: 将 "tab" 键显示为规定的数字空格

# 输出 (重定向查看 < a href ="#Linux 重定向相关知识">o</a>) 内容到控制台 (echo)

echo 命令用于在 shell 中打印 shell 变量的值,或者直接输出指定的字符串,linux 的 echo 命令,在 shell 编程中极为常用。在终端下打印变量 value 的时候也是常常用到的。因此有必要了解下 echo 的用法 echo 命令的功能是在显示器上显示一段文字,一般起到一个提示的作用

使用 echo 输出环境变量演示:

输出环境变量前面要加上 $ 并且大写

echo $PATRH
echo $HOSTNAME

语法格式:

echo [参数] [输出内容]
  • 参数 -e: 激活转移字符,使用 -e 参数时,若字符串中出现以下字符,则特殊加以处理,而不会将它当成一般文字输出:
  • \a: 发出警告声
  • \b: 删除前一个字符
  • \c: 最后不加上换行符号
  • \f: 换行但光标仍旧停留在原来的位置
  • \n: 换行但光标移至行首
  • \r: 光标移至行首,但不换行
  • \t: 插入 rab
  • \v: 与 \f 相同
  • \\: 插入 \ 字符
  • \nnn: 插入 nnn (八进制) 所代表的的 ASCII 字符

实例:

设置文字颜色和样式

颜色码:重置 = 0; 黑色 = 30; 绿色 = 31; 黄色 = 33; 蓝色 = 34; 洋红 = 35; 青色 = 36; 白色 = 37

  • 演示格式:
[dkx@localhost ~]$ echo -e "\e[36m 你好阿 \e[0m"
你好阿[此时这个字体是青色的]

背景色:重置 = 0; 黑色 = 40; 红色 = 41; 绿色 = 42; 黄色 = 43; 蓝色 = 44; 洋红 = 45; 青色 = 46; 白色 = 47

  • 演示格式:
[dkx@localhost ~]$ echo -e "\e[41m 你好阿 \e[0m"
 你好阿 [此时这个字体的背景颜色是红色的]

文字样式:关闭所有属性 = 0; 设置高亮度 (加粗)=1; 下划线 = 4; 闪烁 = 5; 反显 = 7; 消隐 = 8

  • 演示格式:
[dkx@localhost ~]$ echo -e "\e[5m 你好阿 \e[0m"
 你好阿[此时这个字体为闪烁状态]
  • 组合演示:
[dkx@localhost ~]$ echo -e "\e[7;36;41m 你好Linux \e[1m"

image-20221022185908381

ANSI 控制码说明:

\33[0m: 关闭所有属性

\33[1m: 设置高亮度

\33[4m: 下划线

\33[5m: 闪烁

\33[7m: 反显

\33[8m: 消隐

\33[30m--\33[37m: 设置前景色

\33[40m--\33[47m: 设置背景色

\33[nA: 光标上移 n 行

\33[nB: 光标下移 n 行

\33[nC: 光标右移 n 行

\33[nD: 光标左移 n 行

\33[y;xH: 设置光标位置

\33[2J: 清屏

\33[K: 清除从光标到行尾的内容

\33[s: 保存光标位置

\33[u: 恢复光标位置

\33[?25|: 隐藏光标

\33[?25h: 显示光标

# 符号链接 (ln)

软连接也称为符号链接,类似于 Windows 里的快捷方式,主要存放了链接其它文件的路径

示意图

image-20221022223300608

语法格式:

ln -s [原文件或目录] [目标文件或目录] #功能描述:给原文件创建一个软连接
  • 刪除软连接使用 rm 删除掉软连接的那个文件夹即可

# 查看或执行历史命令 (history)

语法格式:

# 查看历史命令
history
# 显示历史使用的 n 个命令
history n[数字]
# 执行历史命令
!n[数字执行历史命令]

# 显示当前进程的状态 (ps)

ps (英文全拼:process stafus) 命令用于显示当前进程的状态,类似于 windows 的任务管理器

语法格式:

ps [options] [--help]
  • 参数 -A: 列出所有的进程
  • 参数 -w: 显示加宽可以显示较多的资讯
  • 参数 -au: 显示较详细的资讯
  • 参数 -aux: 显示所有包含其它使用者的进程
  • 参数 -e: 显示所有进程
  • 参数 -f: 全格式
  • 参数 -h: 不显示标题
  • 参数 -l: 长格式
  • 参数 -r: 指显示正在运行的进程
  • 参数 -x: 显示没有控制终端的进程

USER: 行程拥有者

PID: pid

%CPU: 占用的 cpu 是用率

%MEM: 占用的记忆体使用率

VSZ: 占用的虚拟记忆体大小

RSS: 占用的记忆体大小

TTY: 终端的次要装置号码 (minor device number of tty)

STAT: 该行程的状态:

  • D: 无法终端的休眠状态 (通常 io 的进程)
  • R: 正在执行中
  • S: 静止状态
  • T: 暂停执行
  • Z: 不存在但暂时无法消除
  • W: 没有足够的记忆体分页可分配
  • <: 高优先序的行程
  • N: 低优先序的行程
  • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱 A I/O)
  • START: 行程开始时间
  • TIME: 执行的时间
  • COMMAND: 所执行的指令

# 结束进程:

通过指令查看进程 PID

ps -ef|grep [进程名称]

然后得到 PID 再通过指令来终止这个进程

kill -9 [PID]

当使用此命令时,一定要通过 ps -ef 确认没有剩下任何僵尸进程,只能通过终止父进程来消除僵尸进程,如果僵尸进程被 init 收养,问题就比较严重了,杀死 init 进程意味着关闭系统,如果系统中有僵尸进程,并且其父进程是 init, 而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了

# crond 任何调度

crontab 进行,定时任务的设置

  • 概述

任务调度:是指系统在某个时间执行的特定的命令或程序 <br> 任务调度分类:1. 系统工作:有些重要的工作必须周而复始的执行。如病毒扫描等 < br > 个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份

image_2023-01-05-13-34-54

基本语法:

crontab [选项]
  • 常用选项
-e编辑 crontab 定时任务
-l查询 crontab 任务
-r删除当前用户所有的 crontab 任务
service crond restart重启任务调度

输入指令 crontab -e 后进入编辑任务文档

案例:每隔一分钟执行一次命令: cal > /opt/data.txt 在 opt 目录下重定向 data 文件内容为当前时间

image_2023-01-05-13-56-27

* 号之间有空格

  • 参数说明:

五个占位符说明:速记口诀:分,时,月,年,星

项目含义范围
第一个 *一小时当中的第几分钟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 命令每周 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 号,每周 1 的 0 点 0 分都会执行命令,注意:星期几和几号最好不要同时出现,因为它们定义的都是天,非常容易让管理员混乱

案例:每隔 1 分钟,将当前日期和日历都追加到 /home/mycal 文件中

  1. 先写脚本:my.sh, 并给其脚本增加可执行权限:x
date >> /home/mycal.txt
cal >> /home/mycal.txt
  1. 编辑任务调度:crontab -e
  • 每 1 分钟执行一次脚本文件
*/1 * * * * ~/./my.sh

image_2023-01-05-14-41-41

# at 定时任务

  1. at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行

  2. 默认情况下,atd 守护进程每 60 秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业

  3. at 命令是一次性定时计划任务,执行完一个任务后不再执行此任务了

  4. 在使用 at 命令的时候,一定要保证 atd 进程的启动,可以使用相关指令来查看

  • at 命令格式
at [选项][时间]

image_2023-01-05-15-14-39

Ctrl + D 结束 at 命令的输入

  • at 命令选项
选项含义
-m当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-Iatq 的别名
-datrm 的别名
-v显示任务将被执行的时间
-c打印任务的内容到标准输出
-V显示版本信息
-q <队列>使用指定的队列
-f <文件>从指定文件读入任务而不是从标准输入读入
-t <时间参数>以时间参数的形式提交要运行的任务
  • at 时间定义

at 指定时间的方法:

  1. 接收在当天的 hh:mm (小时:分钟) 式的时间指定,假如该时间已过去,那么就放在第二天执行,例如:04:00

  2. 使用 midnight (深夜), noon (中午), teatime (饮茶时间,一般是下午 4 点) 等比较模糊的词语来指定时间

  3. 采用 12 小时计时制,即在时间后面加上 AM (上午) 或 PM (下午) 来说明是上午还是下午,例如:12pm

  4. 指定命令执行的具体日期:指定格式为 month day (月日) 或 mm/dd/yy (月 / 日 / 年) 或 dd.mm.yy (日。月. 年) 指定的日期必须跟在指定时间的后面,例如:04:00 2021-03-1

  5. 使用相对计时法,指定格式为:now+count time-units, now 就是当前时间,time-units 是时间单位,这里能够是 minutes (分钟), hours (小时), days (天), weeks (星期), count 是时间数量,几天,几小时,例如:now+5 minutes

  6. 直接使用 today (今天), tomorrow (明天) 来指定完成命令的时间