Linux知识点总结

Lou.Chen2022年7月8日
大约 56 分钟

一、常用通用命令

  • 重启虚拟机网络

service network restart

  • 清屏

clear

  • 查看IP地址

ip addr 或者 ifconfig

  • 查询系统版本

uname -a

二、Linux的目录结构

linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录 “/”,然后在此目录下再创建其他的目录。

目录结构详解

  • /bin [重点] (/usr/bin 、 /usr/local/bin)
    • 是Binary的缩写, 这个目录存放着最经常使用的命令
  • /sbin (/usr/sbin 、 /usr/local/sbin)
    • s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /home [重点]
    • 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般 该目录名是以用户的账号命名的。
  • /root [重点]
    • 该目录为系统管理员,也称作超级权限者的用户主目录。
  • /lib
    • 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几 乎所有的应用程序都需要用到这些共享库。
  • /lost+found
    • 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /etc [重点]
    • 所有的系统管理所需要的配置文件和子目录 my.conf
  • /usr [重点]
    • 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与 windows下的program files目录。
  • /boot [重点]
    • 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /proc
    • 这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
  • /srv
    • service缩写,该目录存放一些服务启动之后需要提取的数据。
  • /sys
    • 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs
  • /tmp
    • 这个目录是用来存放一些临时文件的,到期会自动清除
  • /dev
    • 类似于windows的设备管理器,把所有的硬件用文件的形式存储。
  • /media [重点]
    • linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux 会把识别的设备挂载到这个目录下。
  • /mnt [重点]
    • 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂 载在/mnt/上,然后进入该目录就可以查看里的内容了。 d:/myshare
  • /opt
    • 这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。 默认为空。
  • /usr/local [重点]
    • 这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序
  • /var [重点]
    • 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。 包括各种日志文件。
  • /selinux [security-enhanced linux] 360
    • SELinux是一种安全子系统,它能控制程序只能访问特定文件。

三、vi和vim

所有的 Linux 系统都会内建 vi 文本编辑器。

Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

  • 若提示没有安装vim则安装

vim编辑器需要安装三个包:

vim-enhanced-7.0.109-7.el5
vim-minimal-7.0.109-7.el5
vim-common-7.0.109-7.el5

确认一下你的VIM是否已经安装

rpm -qa|grep vim

缺少了其中某个,比如说: vim-enhanced这个包少了 则执行

yum -y install vim-enhanced

source /etc/profile如果上面三个包一个都没有显示,则直接输入命令:

yum -y install vim*

1、三种模式

1.1 正常模式/一般模式(esc退出到正常模式)

在正常模式下,我们可以使用快捷键。

以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用

『复制、贴上』来处理你的文件数据。

常用命令

  • yy 赋值当前行
  • 4yy 赋值当前光标下的4行
  • p 粘贴到光标位置
  • dd 删除光标下的当前行
  • 4dd 删除当前光标下的4行
  • /words 查找关键字words ,若匹配到多个则按 n 到光标移到到下一个匹配的位置
  • G 跳到文件末行
  • gg 跳到文件开头
  • u 撤销上一步操作
  • ctrl+r 恢复上一步被撤销的操作
  • A 在当前光标行末插入
  • I 在当前光标行首插入
  • o 在光标下方插入 O 在光标上方插入
  • 跳转到指定行号
    • ①显示行号 :set nu
    • ②命令行模式下 :行号 回车
  • **ctrl+f **--->向下翻一页代码 ctrl+b --->向上翻一页代码 **ctrl+d **--->向下翻半页代码 **ctrl+u **--->向上翻半页代码

其他命令:

	i 在当前光标之前插入
   I 在当前光标行首插入
   a 在当前光标之后插入
   A 在当前光标行末插入
   x 删除当前光标内容
   	yy复制光标所在的这一行
   	4yy复制 光标所在行开始向下的4行
	dd剪切 光标所在的这一行
	2dd剪切 光标所在行 向下 2行
	D从当前的光标开始剪切,一直到行末
	d0从当前的光标开始剪切,一直到行首
	x删除当前的光标,每次只会删除一个
	X删除当前光标前面的那个,每次只会删除一个
	h左 j下 k上 l右
	H当前屏幕的上方
	M当前屏幕的中间
	L当前屏幕的下方
	G快速的回到 整个代码的最后一行
	gg快速回到 整个代码的第1行
	w向后跳一个单词的长度,即调到下一个单词的开始出
	b向前跳一个单词的长度,即调到上一个单词的开始出
	>>向右移动代码
	<<向左移动代码
	.重复执行上一次的命令
	r替换一个字符
	R替换光标以及后面的字符
1.2 插入模式/编辑模式(按 i 或者 insert键)

在模式下,程序员可以输入内容。

按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可

1.3 命令行模式(输入 : )

在这个模式当中, 可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的!

常用命令:

  • q 退出(未做任何修改,不会保存)

  • q! 保存并强制退出(做了修改,不会保存)

  • wq 保存并且退出

  • w 保存不退出

  • e! 放弃所有修改,从上次保存文件开始再编辑

  • wq! 强制保存文件,并退出

  • w! 强制保存,不退出

  • w file 将修改另外保存到file中,不退出

  • set nu 显示行号

  • set nonu 取消行号的显示

2、三种模式的转换

3、命令行中移动光标

  • Backspace 删除当前光标左边一个字符

  • ctrl + d 删除当前光标位置字符

  • ctrl + a 调到行首

  • ctrl + e 调到行末

  • ctrl + f 向右移动光标

  • ctrl + b 向左移动光标

  • esc + f 向右移动一个单词

  • esc + b 向左移动一个单词

    按下一次后,需要松开后在按

  • ctrl + k 删除光标后到所有内容(包括光标位置)

  • ctrl+u 删除光标前到所有内容(不包括光标位置)

  • ctrl + w 删除到当前光标的前的一个空格位置为止(以空格分隔的块,不删除当前光标位置)

  • ctrl + y 粘贴上一次快捷删除的内容

四、开机重启、用户登录注销

1、关机和重启

  • shutdown -h now 立即关机
  • shutdown -h 1 一分钟后关机
  • shutdown -r now 立即重启
  • halt 直接使用,效果等价于关机
  • reboot 重启
  • syn 把内存数据同步到磁盘(关机前的一般操作)
    • 当我们关机或者重启时,都应该先执行以下 sync 指令,把内存的数据写入磁盘,防止数据丢失。

2、用户登录与注销

  • logout 注销用户

3、用户的切换

su 用户名
  • 在root用户下可直接切换

  • 在普通用户下切换root需要输入root的密码

五、用户管理

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

  2. Linux 的用户需要至少要属于一个组。

1、用户和密码的添加

  • 添加用户

    • useradd [选项] 用户名

      • 默认在 /home下创建和用户名同名的家目录

      • useradd xm
        
    • useradd -d 指定目录 用户名

      • 在指定目录下创建用户名和指定家目录
  • 密码添加

passwd 用户名

passwd xm

2、删除用户

  • 删除用户,保留家目录
    • userdel 用户名
  • 删除用户及家目录
    • userdel -r 用户名

注意:一般我们要保留组目录。

3、查询用户及用户切换

  • 查询用户

    • id 用户名
    • whoami
      • 查看当前用户名
  • 切换用户

    • su 用户名

从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。

当需要返回到原来用户时,使用 exit 指令

4、组的增加和修改

  • 添加组名
    • groupadd 组名
  • 删除组名
    • groupdel 组名
  • 增加用户时直接指定组名
    • ①首先创建组名
      • groupadd 组名
    • ②创建用户时指定组名
      • useradd -g 组名 用户名
  • 修改用户的组
    • ①创建新组名
      • groupadd 新组名
    • ②修改用户组
      • usermod -g 新组名 用户名

5、用户和组的相关文件

/etc/passwd 文件

用户(user)的配置文件,记录用户的各种信息

每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell

/etc/shadow 文件

口令的配置文件

每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

/etc/group 文件

组(group)的配置文件,记录 Linux 包含的组的信息每行含义:组名:口令:组标识号:组内用户列表

六、centos7系统运行级别

1、系统运行级别在 /etc/inttab文件下

  • 运行级别对应的含义

init级别systemctl target
0shutdown.target
1emergency.target
2rescure.target
3multi-user.target
4
5graphical.target
6
# multi-user.target类似于runlevel 3;
# graphical.target类似于runlevel 5
1)获取默认运行级别
#查看默认运行级别的方式为
systemctl get-default
2)设置运行级别

① systemctl [command] [unit.target] 等同于 init [0/1/2/3/5]

  • [command指令]:
    • get-default :取得当前的target
    • set-default :设置指定的target为默认的运行级别
    • isolate :在不重启的情况下,切换到指定的运行级别
  • [unit.target]指定的运行级别
    • 参考运行级别对应的target表

② runlevel

  • 第一个数为之前的运行级别,第二个数为当前运行级别

init [0/1/2/3/5]

  • 设置运行级别

七、实用指令

1、帮助指令

1)man [指令]

查询某个指令的用法

2)help [指令]

查询某个指令的用法

2、文件/目录指令

1)pwd

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

  • pwdx [进程号]

显示指定进程的工作目录

2)ls
  • ls
    • 普通显示
  • ls -l (可简写为ll)
    • 以列表形式显示
  • ls -al
    • 以列表形式先所有以 . 开头的文件
  • ll [目录路径] 或者 ls -l [目录路径]

    • 以列表形式列出指定目录下的所有文件
  • ls -lh [文件目录]

    • 以列表的形式查看文件或目录的大小

3)cd
  • cd ~ 或者 cd
    • 回到当前用户的家目录
  • cd .
    • 就是代表的当前目录
  • cd ..
    • 回到当前目录的上一级目录
  • cd ../../
    • 回到当目录的上上级目录
4)mkdir/rmdir

mkdir命令

  • makdir [目录路径]

    • 只能创建一个目录

      • 创建person文件夹

  • makdir -p [目录路径]

    • 可同时创建多级目录
      • 创建man和zs文件夹

rmdir命令

  • rmdir [目录路径]
    • 删除的目录下必须是空的
  • rm -rf [目录路径]
    • 可删除里面有文件的文件夹
6)touch
  • **touch [文件名] **
    • 创建空文件
  • touch [文件名1] [文件名2]
    • 同时创建多个空文件
7)cp
  • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。

  • -d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。

  • -f:覆盖已经存在的目标文件而不给出提示。

    • cp命令加了-f 参数仍然提示是否覆盖

      • 此时的cp实际上是 cp -i 的别名,可以在系统中用alias指令,查询当前cp指令默认值。
      • 查询当前cp指令默认值 alias cp
      • 修改cp指令为cp alias cp = 'cp'
      • 再输入cp -rf参数进行拷贝,系统就不会发出提示了
  • -i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。

  • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。

  • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。

  • -l:不复制文件,只是生成链接文件。

  • cp [源文件] [目标目录]

    • 拷贝单个文件到指定目录
  • cp -rf [源目录] [目标目录]

    • 递归拷贝源目录和文件到指定目录

      • d1目录(包括d1目录下的所有内容)拷贝到d2目录 d2带不带/都行

        • cp -rf d1 d2
          或者
          cp -rf d1/ d2
          
      • d1目录(包括d1目录下的所有内容)拷贝到d2目录,并修改d1目录为dd1

        • cp -rf d1 d2/dd1
          
      • d1目录(不包括d1目录)的下所有文件拷贝到d2目录 d2带不带/都行

        • cp -rf d1/* d2
          
  • \cp -rf [源目录] [目标目录]

    • 若有重复的文件则强制覆盖,不提示。

特殊符号的解释:

反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串
单引号(''):转义其中所有的变量为单纯的字符串
双引号(""):保留其中的变量属性,不进行转义处理
反引号(``):把其中的命令执行后返回结果
8)rm

删除文件或文件夹

  • rm [文件名]
    • 删除文件
  • rm -f [文件名]
    • 强制删除,不提示
  • rm -rf [目标路径]
    • 递归删除目录(包括其中的文件),不提示
9)mv

移动文件与目录或重命名

  • mv [旧文件名] [新文件名]
    • 文件重命名,实质时移动到同一目录达到文件的覆盖效果
  • mv [目标文件] [目标路径]
    • 移动文件到指定目录
10)cat/more/less

cat命令

  • cat [目标文件]
    • 一次性加载全部文件内容
  • cat -n [目标文件] | more
    • 以带行号和分页显示目标文件内容, -n 携带行号
    • 空格向下翻页,shift+\ 向上翻页

more命令

  • more [目标文件]
    • 空格 向下翻一页
    • Enter 向下翻一行
    • **q ** 退出显示
    • ctrl+f 向下滚动一屏
    • ctrl+b 向上滚动一屏
    • = 输出当前的行号
    • :f 输出文件名和当前行的行号

less命令

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

  • less [目标文件]

11) > 指令和 >> 指令

> 指令

输出重定向 : 会将原来的文件的内容覆盖

>> 指令

不会覆盖原来文件的内容,而是追加到文件的尾部。

  • ls -l > [文件名]
    • 将当前目录下的显示内容写入到指定的文件中(覆盖文件)
      • 将当前下的文件覆盖写入到a.txt文件中,若不存在此文件则创建
  • ls -l >> [文件名]
    • 将当前目录下的显示内容追加到指定的文件中(追加内容到文件)
  • cat [文件名1] > [文件名2]
    • 将文件 1 的内容覆盖到文件 2
  • cat [文件名1] >> [文件名2]
    • 将文件 1 的内容追加到文件 2
  • echo "内容" > [文件名]
    • 使用echo输出内容到控制台后覆盖写入到指定的文件中
12)echo

输出内容到控制台

  • echo “hello world”
    • 输出内容hello world到控制台
  • echo $PATH
    • 输出liunx的环境变量到控制台
13)head/tail
  • head [文件名]

    • 默认显示文件的头十行
  • head -n [行数] [文件名]

    • 显示指定文件的头部的指定行数
  • tail [文件名]

    • 默认显示的文件后十行+
  • tail -n [行数] [文件名]

    • 显示指定文件的末尾的指定行数
  • tail -f [文件名]

    • 实时追踪该文档的所有更新(常用指令)
14)ln

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

  • ln -s [文件或目录] [软链接名称]

    • 创建文件或目录的指定软连接
  • rm -rf [软链接名称]

    • 删除指定软连接,注意不要在软连接名称后边加 /
  • 当我们使用 pwd 指令查看目录时,仍然看到的是软链接所在目录。

软连接和硬连接的区别?

一个特殊角度的解释:linux的软链接和硬链接删除都不会影响原始文件,但是修改的话都会影响原始文件。linux的软链接相当于windows里的快捷方式,快捷方式删了就删了,原来文件还是存在的。linux的硬链接的特点就是,链接文件和原始文件只要有一个存在,文件就会存在,不会消失。(你删除源文件,依然可以在连接文件里打开)。但是软链接可以跨系统,这点硬链接不行。

应用(建立node的环境变量) 软连接

  • 建立软连接:
    • ln -s /usr/local/node-v4.2.6-linux-x86/bin/node /usr/local/bin/node
  • 解释:将/usr/local/node-v4.2.6-linux-x86/bin/下的node映射到/usr/local/bin/下的node
  • 删除软链接:rm -rf /usr/local/bin/node

应用(建立node的环境变量) 硬连接

  • 建立硬链接:
    • ln /usr/local/node-v4.2.6-linux-x86/bin/node /usr/local/bin/node
  • 解释:将/usr/local/node-v4.2.6-linux-x86/bin/下的node映射到/usr/local/bin/下的node
  • 删除硬链接: rm -rf /usr/local/bin/node
15)history

查看已经执行过历史命令,也可以执行历史指令

  • history
    • 直接显示所有执行过的命令
  • history [条数]
    • 显示最近使用指令的指定条数
  • ! [指令编号]
    • 使用指令编号执行历史命令
16)wc

wc -[参数] 文件名

  • -c或--bytes或--chars 只显示Bytes数。
  • -l或--lines 显示行数。
  • -w或--words 只显示字数。
  • --help 在线帮助。
  • --version 显示版本信息。
wc testfile           # testfile文件的统计信息  
3 92 598 testfile       # testfile文件的行数为3、单词数92、字节数598 
17)nl

将输出的文件内容自动的加上行号

nl [选项]... [文件]...

-b :指定行号指定的方式,主要有两种:

​ -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);

​ -b t :如果有空行,空的那一行不要列出行号(默认值);

-n :列出行号表示的方法,主要有三种:

​ -n ln :行号在萤幕的最左方显示;

​ -n rn :行号在自己栏位的最右方显示,且不加 0 ;

​ -n rz :行号在自己栏位的最右方显示,且加 0 ;

-w :行号栏位的占用的位数。

18)whereis

该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。

该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。

whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]

  • 选项 -b  只查找二进制文件。

    -B<目录>  只在设置的目录下查找二进制文件。

    -f  不显示文件名前的路径名称。

    -m  只查找说明文件。

    -M<目录>  只在设置的目录下查找说明文件。

    -s  只查找原始代码文件。

    -S<目录>  只在设置的目录下查找原始代码文件。

    -u  查找不包含指定类型的文件。

3、时间日期指令

1)date
  • date

    • 显示日期时间
  • date +%Y

    • 显示年份
  • date +%m

    • 显示月份
  • date +%d

    • 显示日
  • date "+%Y-%m-%d %H:%M:%S"

    • 显示年月日,时分秒
  • date -s "字符串时间"

    • 设置系统日期
      • data -s "2020-01-10 8:33:33"
2)cal
  • cal
    • 显示本月日历
  • cal [年份]
    • 显示指定年份的所有月份

4、搜索查找指令

1)find
  • find [搜索路径] [选项] [选项值]

    选项功能
    -name [文件名]按照指定的文件名查找文件
    -user [用户名]按照指定的用户名查找文件
    -size [数值]按照指定大小查找文件

实例:

  • find /home -name hello.txt
    • 查找/home目录下的名称为hello.txt的文件
  • find /home -user root
    • 查找/home目录下的用户为root的文件
  • find / -size +20M
    • 查询 / 目录下大小超过20M的文件
  • find / -size -20M
    • 查询 / 目录下大小小于20M的文件
  • find / -size 20M
    • 查询 / 目录下等于20M的文件
  • find / -name \*.txt
    • 查询 / 目录下文件名为 .txt结尾的文件
2)locate

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

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

若提示 updatedb 命令无法识别则安装 yum install mlocate

  • updatedb

    • 创建locate数据库
  • locate [文件名]

    • 查找指定文件名

3)grep和管道符号|

若有特殊字符,则必须要使用 ''括起来

grep通过一行行对内容进行分析,若当中有需要的信息,则将该行拿出来。

grep 过滤查找,管道符 |,表示将前一个命令的处理结果输出传递给后面的命令处理

  • ll | grep 'txt' 查找ll列表命令后的txt字符

  • grep [选项] [查找内容] [查找的目标文件]

    • 在指定文件中查找指定内容并输出到控制台
      • [选项]可省略
        • -n 显示匹配行及行号
        • -i 忽略字母大小写
        • -c 计算找到的内容次数
        • -v 反向选择,显示出不包含指定内容的行内容
        • -o 只查找匹配到的字符串,而不是数据行

实例

hello.txt文件内容

  • grep hello hello.txt
    • 在hello.txt文件中查找hello字符串(默认区分大小写)
  • grep -n hello hello.txt
    • 在hello.txt文件中查找hello字符串并携带行号
  • grep -ni hello hello.txt
    • 在hello.txt文件中查找hello字符串(不区分大小写)并携带行号

grep联合管道操作符一同实现上述相同操作

  • cat hello.txt | grep -n hello
    • 查找hello.txt文件中 字符串为hello的内容并携带行号
  • cat hello.txt | grep hello
    • 查找hello.txt文件中 字符串为hello的内容
  • cat hello.txt | grep -ni hello
    • 查找hello.txt文件中 字符串为hello的内容(不区分大小写)并携带行号

正则相关的字符查找:

⚠️特殊字符需要加\表示取消转义,并在外层加''单引号

  • 特殊字符:. { } "
  • grep -n 't[ae]st' t.txt

    • 在t.txt文件中,查找包含 tast 或者 test 的字符行,[]中的字符只会取一个匹配
  • grep -n '[^g]oo' t.txt

    • 在t.txt文件中,查找不包含 goo 开头的字符行

      同理:

    • grep -n '[^a-z]oo' t.txt 查找不包含 a到z加oo 开头的字符行

    • grep -n '[a-zA-Z0-9]oo' t.txt 查找包含 a到z或者A-Z或者0-9加oo 开头的字符行

  • grep -n '^oo' t.txt

    • 在t.txt文件中,查找行首是以oo开头的字符行,若前面有空格则不匹配

    • grep -n '^[^a-z]oo' t.txt 查找行首包含不以a到z家oo开头的字符行

  • grep -n '\.$' t.txt

    • 在t.txt文件中,查找末尾包含 . 的字符行
  • grep -n '^$' t.txt

    • 在t.txt文件中,查找所有的空白行

      常用:

    • cat redis.conf | grep -v '^$' | grep -v '#' > redis-6381.conf

      • 去掉redis.conf配置文件中的空格和包含**#**的字符行,并将内容重定向到redis-6381.conf文件中
  • *. 用法

    .小数点:代表【一定有一个任意字符】

    *星号:代表【重复前一个字符,0到无穷多次】

    • grep -n 'g..d' t.txt
      • 在t.txt文件中匹配,g开头d结尾的任意四个字符
    • grep -n 'goo*'
      • 匹配以go开头的任意字符,并且第三个字符出现的次数可以为0次或者多次。
      • grep -n g* t.txt 没有实际意义,因为g可以出现0次或者多次,这里会列出全部内容
    • grep -n 'g.*g'
      • 匹配以g开头,g结尾并且两个g之间的字符可有可无的字符行。【.*代表零个或多个任意字符】
    • grep -n '[0-9][0-9]*'
      • 匹配包含任意数字的行
  • 限定连续字符范围:

    因为{}的符号在shell是有特殊意义的,所以这里需要使用转义符\来使其失去特殊意义

    • grep -n 'g\{2\}' t.txt
      • 找出两个g的字符串
    • grep -n 'go\{2,5\}g' t.txt
      • 找出g后面接2到5个o,然后再接一个g的字符串
    • grep -n 'go\{2,\}g' t.txt
      • 找出g后面接2个及其以上的o,再接一个g的字符串
4)cut命令

cut命令可以将一段信息某一段给它【切】出来,处理的信息是以【行】为单位

  • cut [选项]

    • -d 后面接分隔字符,与-f一起使用
    • -f 根据-d的分隔字符将一段信息划分为数段,用-f取出第几段
    • -c 以字符的单位取出固定字符区间
  • cut -d ':' -f 1,3

    • [root@localhost redis]# echo ${PATH}
      /opt/jdk/jdk1.8.0_261/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
      [root@localhost redis]# echo ${PATH} |cut -d ':' -f 1,3
      /opt/jdk/jdk1.8.0_261/bin:/usr/local/bin
      
    • 取出以':'字符分隔,取出第一段和第三段

5)sed命令

sed 可依照脚本的指令来处理、编辑文本文件。

sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

sed 不会改变一个文件中的内容,sed输出的内容会在控制台打印

  • sed 's/26379/26380/g' sentinel-26379.conf
    • sentinel-26379.conf文件中的26379字符串替换为26380

5、压缩和解压

1)gzip/gunzip

压缩文件,只能将文件压缩为.gz 文件*,当我们使用 gzip 对文件进行压缩后,不会保留原来的文件。解压后也不会保留*.gz的压缩文件

  • gzip [文件名]
    • 压缩指定文件
  • gunzip [文件名]
    • 解压指定文件
2)zip/unzip

zip 用于压缩文件, unzip 用于解压的,这个在项目打包发布中很有用的

压缩和解压都会保留之前的文件

若没有安装则 yum install zip unzip

  • zip [选项] xxx.zip [要压缩的文件或目录]
    • 压缩指定的文件或目录为xxx.zip
    • [选项]可省略
      • -r 递归压缩,即压缩目录
  • unzip [选项] xxx.zip
    • 解压指定的zip文件
    • [选项]可省略
      • -d [解压的目录] 解压到指定目录
  • 压缩文件
  • 解压文件
  • 压缩目录
  • 解压到指定目录
3)tar

tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。

  • tar [选项] xxx.tar.gz [要打包的文件或目录]
    • [选项]不可省略
      • -c 产生.tar打包文件
      • -v 显示详细信息
      • -f 指定压缩后的文件名
      • -z 打包同时压缩
      • -x 解压.tar文件
  • tar -zcvf xxx.tar.gz [文件1] [文件2]
    • 打包多个文件并自定义命名压缩后的文件名xxx.tar.gz
      • 打包a.txt和b.txt文件并将打包后的文件命名为myab.tar.gz
  • tar -zcvf xxx.tar.gz [目录]
    • 压缩指定目录到当前目录
  • tar -zxvf xxx.tar.gz
    • 解压指定压缩文件到当前目录
  • tar -zxvf xxx.tar.gz -C [解压的指定目录]
    • 解压指定文件到指定目录(该目录必须存在)
4)分段压缩

例如压缩 CentOS-7-x86_64-DVD-1810.iso 文件大小为4.59GB

  • 分段压缩

    tar -zcvf - CentOS-7-x86_64-DVD-1810.iso|split -b 1G - CentOS-7-x86_64-DVD-1810.iso.tar.gz

    • -b 每个分卷的大小为1G (可选为 MB/G 等)
    image-20220506121151925
  • 批量解压

    首先cat命令将分卷包合并

    cat CentOS-7-x86_64-DVD-1810.iso.tar.gz* >CentOS.iso.tar.gz

  • 解压文件

    tar -zxvf CentOS.iso.tar.gz

6、客户端(client)的 URL 工具 curl

curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。

它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。

curl http://www.baidu.com

上面命令向 http://www.baidu.com发出open in new window GET 请求,服务器返回的内容会在命令行输出。

详细用法参考:https://www.ruanyifeng.com/blog/2019/09/curl-reference.htmlopen in new window

7、输入输出重定向命令 > <

在linux系统中一切皆文件,就是说java -jar 也是一个文件,是文件就会有文件描述符FD,在liunx中每个文件都有3个固定的文件描述符0,1,2

其中0 可以理解为Java中的System.inopen in new window;1可以理解为Java中的System.out ;2可以假定为一个System.error 即产生错误后的输出流,如图所示

注意图中FD下的 0u 1u 2u 分别指的是我们刚才描述的三种类型的描述符,后面的字母代表当前流的状态有三种u r w ,u代表双向的读写,r代表读,w代表写

1>log.log 2<log.log 2>&1

上面代码中,< 代表输入定向 > 代表输出定向 两种命令符号的左边均是要重定向的类型,中间不能有空格,右边为定位的终止端。比较特殊的是 2>&1是将error输出流重定向到out输出流,且1前面加上&。可以在虚拟机中做如下测试(都是基本的linux常用命令)

nohup java -jar xxxx.jar >log.log 2>&1 &

nohup & 将xxx.jar 以后台运行的方式启动,并将java -jar 产生的输出重定向到log.log文件中。

注意 : > log.log 只是重定向了正常的输出流q,我们还要将发生错误的输出流2重定向到正常的输出流1中。

https://blog.csdn.net/qq_39775940/article/details/114108020open in new window

8、jps命令

查看与Java运行的有关程序

9、文件上传与下载 rz sz

文件上传

rz [选项]

  • -b 以二进制方式,默认为文本方式
  • -e 对所有控制字符转义。(Force sender to escape all control characters; normally XON, XOFF, DLE, CR-@-CR, and Ctrl-X are escaped.)
  • -y 若存在相同文件名,则覆盖。

rz -be

此命令执行时,会弹出文件选择对话框,选择好需要上传的文件之后,点确定,就可以开始上传的过程了。上传的速度取决于当时网络的状况。

  • 若有相同文件名会报错。需要改为 rz -bye
文件下载
  • sz dir/*
    • 下载某个文件夹下的所有内容(不能下载文件夹)
  • sz file
    • 下载文件 (不能下载文件夹)

10、别名 alias

定义别名:alias [别名] = [指令名称]

  • 指令可以是执行脚本地址,或者具体执行命令

取消别名:unalias [别名]

  • alias cls= 'clear'

    • clear命令起别名为cls
    • 使用 cls clear命令都可代表清除内容
  • alias

    查看所有别名信息

    [root@VM-4-14-centos etc]# alias
    alias cls='clear'
    alias cp='cp -i'
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
    
  • 设置永久有效

    • 编辑 .bashrc 文件

      • vim ~/.bashrc
    • 添加别名配置 alias cls='clear'

    • # .bashrc
      
      # User specific aliases and functions
      alias cls='clear'
      
      alias rm='rm -i'
      alias cp='cp -i'
      alias mv='mv -i'
      
      # Source global definitions
      if [ -f /etc/bashrc ]; then
              . /etc/bashrc
      fi
      
      
    • 重启配置

      • source ~/.bashrc

11、环境变量及环境配置文件名相关

环境配置文件名区别
  • /etc/profile
    • 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行并从**/etc/profile.d**目录的配置文件中搜集shell的设置.
    • 所以如果你有对/etc/profile有修改的话必须得重启你的修改才会生效,此修改对每个用户都生效。
  • /etc/bashrc
    • 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
    • 如果你想对所有的使用bash的用户修改某个配置并在以后打开的bash都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个bash即可生效。
  • ~/.bash_profile
    • 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的**.bashrc**文件.
    • 此文件类似于/etc/profile,也是需要需要重启才会生效,/etc/profile对所有用户生效,~/.bash_profile只对当前用户生效。
  • ~/.bashrc
    • 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.(每个用户都有一个.bashrc文件,在用户目录下)
    • 此文件类似于/etc/bashrc,不需要重启生效,重新打开一个bash即可生效, /etc/bashrc对所有用户新打开的bash都生效,但~/.bashrc只对当前用户新打开的bash生效。
  • ~/.bash_logout
    • 当每次退出系统(退出bash shell)时,执行该文件.

另外 /etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

profile和bashrc区别

  • bashrc是在系统启动后就会自动运行
  • profile是在用户登录后才会运行
  • 进行设置后,可运用source bashrc命令更新bashrc,也可运用source profile命令更新profile

~/.bash_profile 是交互式、login 方式进入bash 运行的; ~/.bashrc 是交互式 non-login 方式进入bash 运行的; 通常二者设置大致相同,所以通常前者会调用后者。

常用命令
  • 查看所有环境变量

    • env

      [root@VM-4-14-centos ~]# env
      XDG_SESSION_ID=34275
      HOSTNAME=VM-4-14-centos
      TERM=xterm
      SHELL=/bin/bash
      HISTSIZE=3000
      SSH_CLIENT=218.94.83.123 26643 22
      SSH_TTY=/dev/pts/0
      USER=root
      LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
      MAIL=/var/spool/mail/root
      PATH=/root/jdk/jdk1.8.0_311/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:/root/nodejs/node-v14.18.2-linux-x64/bin:/root/bin
      NGINX_HOME=/usr/local/nginx
      PWD=/root
      JAVA_HOME=/root/jdk/jdk1.8.0_311
      TST_HACK_BASH_SESSION_ID=48148225536618
      LANG=en_US.utf8
      SHLVL=1
      HOME=/root
      NODEJS_HOME=/root/nodejs/node-v14.18.2-linux-x64
      LOGNAME=root
      CLASSPATH=.:/root/jdk/jdk1.8.0_311/lib.tools.jar
      SSH_CONNECTION=218.94.83.123 26643 10.0.4.14 22
      LESSOPEN=||/usr/bin/lesspipe.sh %s
      
  • 打印指定变量

    • echo $PATH

      [root@VM-4-14-centos ~]# echo $PATH
      /root/jdk/jdk1.8.0_311/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:/root/nodejs/node-v14.18.2-linux-x64/bin:/root/bin
      

12、.sh和./执行的区别

https://blog.csdn.net/weixin_43727372/article/details/103476368open in new window

直接运行./a.sh,首先你会查找脚本第一行是否指定了解释器,如果没指定,那么就用当前系统默认的shell(大多数linux默认是bash),如果指定了解释器,那么就将该脚本交给指定的解释器

a.run文件:

#!/usr/bin/python

print("This is Python script")

那么你如果运行./a.run,结果就是输出一行文字,但是如果你运行sh a.run,会报错。因为这是一个python脚本

在centos7中

  • ls -al which sh

    lrwxrwxrwx 1 root root 4 8月 7 2020 /usr/bin/sh -> bash

    可以看到 sh其实就是bash,那么在这个发行版中,你如果你写的是一个shell脚本,而且脚本第一行没申明shell解释器,那么使用./a.sh和sh a.sh并没有什么区别

使用./执行脚本,对应的xxx.sh脚本必须要有执行权限,用脚本文件中第一行#!指定的shell(解释器)来执行命令(譬如常见的/bin/bash),不指定系统会调用默认shell程序

使用sh 执行脚本,对应的xxx.sh没有执行权限限制,sh这个是使用shell执行命令,是个软链接,它可能是一个任意的shell,通常默认是bash shell

13、测试ip和port连通性

telnet
  • 测试tcp连接

telnet [IP地址] [端口号]

nc

nc是netcat

  • 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
  • 端口的扫描,nc可以作为client发起TCP或UDP连接
  • 机器之间传输文件
  • 机器之间网络测速
  • 安装nc

    yum install -y nc

  • 常用参数

    nc [-46AcDCdhklnrtUuvz] [-b boundif] [-i interval] [-p source_port]

    ​ [-s source_ip_address] [-w timeout] [-X proxy_protocol]

    ​ [-x proxy_address[:port]] [--apple-delegate-pid pid]

    ​ [--apple-delegate-uuid uuid] [--apple-ext-bk-idle]

    ​ [--apple-nowakefromsleep n] [--apple-ecn mode] [hostname] [port[s]]

    -z 指定nc应只扫描侦听守护程序,而不扫描向他们发送任何数据。不能和-l选项结合使用

    -v 显示指令执行过程

    -n 不要在任何指定地址上进行任何DNS或服务查找,主机名或端口

    -u 使用udp协议,默认为Tcp

    -w [秒] 设置等待连线的时间

    详细请使用 man nc查看

  • 测试udp连接

    nc -v -u [ip地址] [端口号]

    [root@localhost ~]# nc -v -u 172.22.35.65 1123
    Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Connected to 172.22.35.65:1123.
    
  • 向udp发送数据

    [root@localhost ~]# echo "test123" | nc -v -u 176.54.0.77 5140
    Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Connected to 176.54.0.77:5140.
    Ncat: 8 bytes sent, 0 bytes received in 0.02 seconds.
    
traceroute

14、ssh与sftp相关

14.1 修改端口
  • 进入/etc/ssh目录

  • 进入sshd_config文件中

    修改port端口为22122

    #       $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
    
    # This is the sshd server system-wide configuration file.  See
    # sshd_config(5) for more information.
    
    # This sshd was compiled with PATH=/usr/local/bin:/usr/bin
    
    # The strategy used for options in the default sshd_config shipped with
    # OpenSSH is to specify options with their default value where
    # possible, but leave them commented.  Uncommented options override the
    # default value.
    
    # If you want to change the port on a SELinux system, you have to tell
    # SELinux about this change.
    # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
    #
    Port 22122
    #AddressFamily any
    #ListenAddress 0.0.0.0
    #ListenAddress ::
    
  • 重启服务:systemctl restart sshd.service

14.1 给sftp账号添加访问路径
  • 进入/etc/ssh目录

  • 进入sshd_config文件中

  • 给用户ainmssftp 添加访问路径/export/home/sftp/ainmssftp,在文件最后添加如下内容:

    ⚠️ 注意:进入文件夹使用ll查看ainmssftp用户是否有该路径下的权限

    Match User ainmssftp
    ChrootDirectory /export/home/sftp/ainmssftp
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
    
  • 参数详解:

    • X11Forwarding

      是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。
      如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。
      那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。
      需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。
      如果启用了 UseLogin ,那么X11转发将被自动禁止。

    • AllowTcpForwarding

      是否允许TCP转发,默认值为"yes"。禁止TCP转发并不能增强安全性,除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。

八、组管理

  • **其他组:**除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组.

1、查看文件或目录的所属用户及所属组

  • ls -lh 或者 ll

2、创建用户的同时指定组

  • ①创建组
    • groupadd 组名
  • ②创建用户时指定组
    • useradd -g 组名 用户名

3、修改文件或目录所有者

  • chown [用户名] [文件名]
    • 修改文件所有者
  • chown -R [用户名] [目录下的所有]
    • 递归修该指定目录下的所有文件的所有者 (在目录后写 /* 代表所有文件)
  • chown [用户名]:[组名] 文件
    • 同时改变文件的所有者和所有组

4、修改文件或目录所在组

  • chgrp [组名] [文件名]
    • 修改文件所在组
  • chgrp -R [组名] [目录位置]
    • 递归修改指定目录下所有文件的所有组 (在目录后写 /* 代表所有文件)

5、修改用户所在组

  • usermod -g [组名] [用户名]

九、文件的权限管理

1、文件及文件夹的权限介绍(重点)

1)rwx权限介绍

①rwx作用到文件:

  • [ r ]代表可读(read): 可以读取,查看
  • [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
  • [ x ]代表可执行(execute):可以被执行

②rwx作用到目录

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

  • [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录

  • [ x ]代表可执行(execute):可以进入该目录

第1位:

  • 代表文件类型: 文件 (-),目录(d),软链接(l)

第2,3,4位:

  • 文件拥有者的权限

第5,6,7位:

  • 与文件拥有者同一组的用户的权限

第8,9,10位:

  • 不与文件拥有者同组的其他用户的权限

2)其他

  • 文件大小为字节

2、修改文件权限

①使用+ 、-、= 变更权限

u:所有者 g:所有组 o:其他人 a:所有人(u、g、o 的总和)

=:重新赋予权限(覆盖) - :去掉权限 +:增加权限

  • chmod u=rwx,g=rx,o=x [文件或目录]

  • 修改指定文件或目录的 u所有者的权限为**[读写执行],g所有组的权限为[读和执行],o其他的人的权限为[执行]**

  • chmod u-x,g-rwx,o-rwx [文件或目录]

    • 给指定文件或目录的 ,u用户权限去掉【执行】,g组权限去掉【读写执行】,o其他用户撤销【读写执行】

  • chmod a+r [文件或目录]

    • 给指定文件或目录为所有用户赋予【读】权限 (在目录后写 /* 代表所有文件)

②通过数字变更权限

r=4 w=2 x=1

例如:rwx=4+2+1=7

  • chmod u=rwx,g=rx,o=x [指定文件或目录] 相当于==> chmod 751 [指定文件或目录]

十、定时任务调度crontab

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

任务调度分类:

​ 1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等

​ 2.个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。

1、基本使用

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

实例

①执行 crontab -e 进入任务调度编辑文件

②输入任务到调度文件中保存退出,即任务调度开始

任务示例:*/1 * * * * ls -l /etc/ > /home/ct.txt

  • 将/etc/目录下以行显示的内容覆盖到/home/ct.txt文件中。 每1分钟执行一次

cron表达式说明

特殊符号说明:

特定任务执行案例:

2、案例

案例

1)每隔一分钟,追加当前日期时间到指定文件中

  • ①编写文件/home/mytask.sh
    • 添加内容 date >> datet.txt
  • ②为/home/mytask.sh添加执行权限
    • chmod 744 /home/mytask.sh
  • ③编辑定时任务 crontab -e
    • 添加内容 */1 * * * * /home/mytask.sh 保存退出
  • ④定时任务即可生效

2) 每天凌晨 2:00 将 mysql 数据库 testdb ,备份到文件中mydb.bak。

  • ①先编写一个文件 /home/mytask3.sh
    • /usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak
  • ②给 mytask3.shopen in new window 一个可以执行权限
    • chmod 744 /home/mytask3.sh
  • ③执行crontab -e 编辑任务调度
    • 0 2 * * * /home/mytask3.sh

十一、Linux磁盘分区和挂载

1、Linux分区

1)基本原理

1)Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分。

2)Linux 采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

2)查询分区情况
  • **lsblk-f ** (巧记:老师不离开)

    • 查看分区情况:

  • lsblk

    • 查看存储各分区存储大小

2、磁盘情况查询df

1)查询磁盘使用情况
  • df [选项]

    • 【选项】可省略

      • -h单位的列表查看所有的磁盘情况

  • du -ach --max-depth=1 [指定目录]

    • 查询指定目录的深度为1磁盘占用情况,默认为当前目录
      • -s 指定目录占用大小汇总
      • -h 带计量单位
      • -a 含文件
      • --max-depth=1 子目录深度为1
      • -c 列出明细的同时,增加汇总值
2)统计文件或文件夹个数
  • 统计指定文件夹下的文件个数
    • ls -l [指定目录] | grep "^-" | wc -l
      • ”^-“ :表示以 - 开头的即文件。wc:表示word count
  • 统计指定文件夹个数
    • ls -l [指定目录] | grep "^d" | wc -l
      • "^d": 表示以d开头的文件,即文件夹
  • 递归统计文件的个数和子文件中的文件个数
    • ls -lR /home | grep "^-" | wc -l
      • -R:递归统计
  • 递归统计文件夹个数和子文件夹个数
    • ls -lR /home | grep "^d" | wc -l
3)以树状显示目录结构

若没有安装此命令则

yum intall tree
  • tree [指定目录]

    • 若不指定目录则显示当前目录

十二、进程服务管理

1、进程详细信息介绍

  • **STAT:**进程状态,其中 S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
  • **TIME:**CPU 时间,即进程使用 CPU 的总时间

父进程有关介绍:

• UID:用户 ID

• PID:进程 ID

• PPID:父进程 ID

• C:CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高

• TIME:CPU 时间,即进程使用 CPU 的总时间

2、显示系统进程ps

  • ps -aux

    • 【选项】
      • -a 显示当前终端的所有进程信息
      • -u 以用户格式显示进程信息
      • -x 显示后台进程运行参数
  • ps -aux | more

    • 查询所有进程信息,并以more命令形式查看
  • ps -aux |grep [服务名称]

    • 查询指定服务进程

      • 查询ssh相关的进程服务

  • ps -ef | more

    • 以全格式显示当前所有的进程,主要用于查看进程的父进程
    • 【选项】
      • -e 显示所有进程
      • -f 全格式
  • ps -ef | grep [服务名称]

    • 主要查找指定服务的父进程

3、终止进程kill/killall

若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完成此项任务。

  • kill [选项] [进程号PID]

    • 杀死指定进程
      • 【选项】可省略
        • -9 强迫进程立即停止
  • killall [进程名称]

    • 通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用

    • 例如:killall grep

4、查看进程树

若没有安装命令则安装

yum -y install psmisc
  • pstree [选项]
    • 可以更加直观的来看进程信息
    • 【选项】
      • -p 显示进程的 PID
      • -u 显示进程的所属用户

5、服务管理systemctl

服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点

在 CentOS7.0 后 不再使用 service ,而是 systemctl

  • systemctl [status|stop|restart|reload|start] 服务名

    • 对指定的服务的操作**[查看状态|停止|重启|重新加载|启动]**
  • 列出正在运行的服务状态

systemctl

  • 以树形列出正在运行的进程,它可以递归显示控制组内容

    systemd-cgls

  • 查看已启动的服务列表

    systemctl list-unit-files|grep enabled

  • 启动一个服务

    systemctl start postfix.service

  • 关闭一个服务

    systemctl stop postfix.service

  • 重启一个服务

    systemctl restart postfix.service

  • 显示一个服务的状态

    systemctl status postfix.service

  • 在开机时启用一个服务

    systemctl enable postfix.service

  • 在开机时禁用一个服务

    systemctl enable postfix.service

  • 查看服务是否开机启动

    systemctl is-enabled postfix.service;echo $?

  • 重新加载一个服务的配置文件

    systemctl reload apache.service

  • 重载所有修改过的配置文件

    systemctl daemon-reload

6、动态进程监控top

  • top

    • 默认3s更新一次进程信息
  • top [选项]

    • [选项]可省略
      • -d [秒数] 指定秒数更新进程信息
      • -i 使top不显示任何闲置或者僵尸进程
      • -p 通过指定监控进程id来仅仅监控某个进程的状态

交互操作,即输入top命令后在监控时的操作

  • P 以cpu使用率排序,默认就是此选项
  • M 以内存使用率排序
  • N 以PID排序
  • q 退出top
  • u 输入 [用户名] 查看指定用户的进程
  • k 输入 [进程号] 结束指定进程

7、查看网络连接情况及端口netstat

  • netstat -lnp

    • 查询所有网络连接情况
  • netstat -lnp|grep [端口号]

    • 根据端口号查找指定进程

    • 【选项】

      • -a 显示所有连接

      • -l 仅列出在Listen(监听)的服务状态

      • -n 拒绝显示别名,能显示数字的全部转化为数字

      • -p 显示建立相关链接的程序名

9、内存相关free

基本命令

free 命令显示系统内存的使用情况,包括物理内存交换内存(swap)内核缓冲区内存。

Mem 行(第二行)是内存的使用情况。 Swap 行(第三行)是交换空间的使用情况。 total 列显示系统总的可用物理内存和交换空间大小。 used 列显示已经被使用的物理内存和交换空间。 free 列显示还有多少物理内存和交换空间可用使用。 shared 列显示被共享使用的物理内存大小。 buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。 available 列显示还可以被应用程序使用的物理内存大小。

  • free [选项]
    • 【选项】
      • -h 带单位大小内存显示格式
      • -s [秒数] 指定间隔秒数刷新内存的使用情况

使用虚拟内存

https://blog.csdn.net/qq_35500685/article/details/92787168open in new window

  • 启用虚拟内存

    free -h 查看内存使用情况

    mkdir /swap 在根目录创建虚拟内存分区目录

    dd if=/dev/zero of=/swap/swapadd bs=1024 count=2024288 创建2G大小的虚拟内存

    mkswap /swap/swapadd 将磁盘卷转为虚拟内存卷

    swapon /swap/swapadd 启用虚拟内存服务

    • 若没有权限,则增加权限 sudo chmod 700 /swap
  • 关闭虚拟内存

    • swapoff -v /swap/swapadd
  • 移动虚拟内存空间

    • 如果当前的虚存所在的磁盘空间不够,可以首先关闭虚存服务,将其移动到别的磁盘,再启用即可。
    • swapoff -v /swap/swapadd
    • mv /swap/swapadd /mnt/swap
    • swapon /swap/swapadd

清除内存缓存

读写文件时,Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这就是Cache Memory(缓存内存)。 即使程序运行结束后,Cache Memory也不会自动释放。这就会导致程序频繁读写文件后,可用物理内存会很少。 其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以不必担心没有内存可用。 如果你希望手动去释放Cache Memory(缓存内存)的话也是有办法的。

  • 默认是0

⚠️ 注意:在清空缓存之前使用sync命令同步数据到磁盘

  • 释放网页缓存(To free pagecache):

sync; echo 1 > /proc/sys/vm/drop_caches

  • 释放目录项和索引(To free dentries and inodes):

sync; echo 2 > /proc/sys/vm/drop_caches

  • 释放网页缓存,目录项和索引(To free pagecache, dentries and inodes):

echo 3 > /proc/sys/vm/drop_caches

10.防火墙相关

10.1 firewall
  • systemctl status firewalld 或者 firewall-cmd --state

    • 查看防火墙状态
  • systemctl status firewalld

    • 关闭防火墙
      • systemctl stop firewalld
  • systemctl start firewalld

    • 启用防火墙
  • systemctl restart firewalld 或者 firewall-cmd --reload

    • 重启防火墙
  • systemctl disable firewalld.service

    • 禁止firewall开机启动
  • 注意:

    • 关闭或者启用防火墙后,立即生效
  • firewall-cmd --zone=public --add-port=[端口]/tcp --permanent

  • 打开TCP的指定端口

  • firewall-cmd --zone=public --add-port=[端口]/udp --permanent

  • 打开UDP的指定端口

  • 【选项】

    • –zone 作用域
    • –add-port=[端口]/tcp 添加端口,格式为:端口/通讯协议
    • –permanent 永久生效,没有此参数重启后失效
  • firewall-cmd --zone=public --remove-port=[端口]/tcp --permanent

  • 移除开放的指定端口

  • firewall-cmd --query-port=[端口]/tcp

    • 查询指定端口是否开启防火墙
  • firewall-cmd --list-port

  • 查询哪些端口开放

10.2 iptables
  • 查看防火墙状态

    systemctl status iptables

  • 安装防火墙

    yum install -y iptables-services

  • iptables默认规则

    more /etc/sysconfig/iptables

十三、rpm、yum、wget管理

1、RPM的使用

一种用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中。它生成具有.RPM 扩展名的文件。RPM 是 RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似 windows 的 setup.exe,这一文件格式名称虽然打上了 RedHat 的标志,但理念是通用的。

Linux 的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标准了。

1)安装包的的查询

  • rpm -qa
    • 查询所安装的所有 rpm 软件包
  • rpm -qa | more
    • 分页显示所有rpm软件包
  • rpm -qa | grep [软件包]
    • 搜索指定本机的软件包
  • rpm -qi [软件包]
    • 查询指定软件包的详细信息
  • rpm -ql [软件包]
    • 查询指定软件包中安装的文件位置
  • rpm -qf [文件路径]
    • 查询指定文件所属那个rpm包

2)安装包的卸载

  • rpm -e [软件包]
    • 卸载指定rpm软件包
  • rpm -e --nodeps [软件包]
    • 强制卸载指定rpm软件包

3)安装rpm包

  • rpm -ivh [安装包全路径名称]
    • i=install 安 装
    • v=verbose 提 示
    • h=hash 进度条

2、YUM包管理(常用)

Yum 是一个 Shell open in new window前端软件包管理器。基于 RPM open in new window包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系并且一次安装所有依赖的软件包。使用 yum 的前提是可以联网。

  • yum list|grep [软件包]
    • 从yum服务器上查询指定软件包是否存在
  • yum [选项] install [软件包]
    • 安装指定软件包
      • 【选项】
        • -y 安装时全部同意

3、wget

wget是一个下载文件的组件,只要url正确可以下载任何东西,视频、音乐、软件包等等。wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来方便简单

url的组成,如果是安装包,必须是出现下载窗口的url,才可以正常下载。 ①是自己组成的:网站/包名 ②直接复制来的:是镜像的网址 ③直接复制来的:是图片地址

  • wget -O 下载并以不同的文件名保存

    • wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确。 错误:下面的例子会下载一个文件并以名称download.php?id=1080保存

      wget http://www.centos.bz/download?id=1 即使下载的文件是zip格式,它仍然以download.php?id=1080命名。 正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:

      wget -O wordpress.zip http://www.centos.bz/download.php?id=1080

十四、Java开发常用软件的安装

1、安装jdk1.8

https://blog.csdn.net/weixin_42266606/article/details/80863781open in new window

①下载对应的jdk安装包后,解压到指定目录即可

②编辑/etc/profile vim /etc/profile文件来添加jdk环境变量

  • 在文件默认增加以下内容

    • JAVA_HOME=/usr/local/java/jdk1.8.0_261
      CLASSPATH=.:$JAVA_HOME/lib.tools.jar
      PATH=$JAVA_HOME/bin:$PATH
      export JAVA_HOME CLASSPATH PATH
      
  • source /etc/profile 命令使更改的配置立即生效

  • 通过 java -version 命令和 javac -version 命令来查看 jdk 是否安装成功

③测试

  • java -version
    • 查看安装的版本
  • 编写Hello.java文件
  • javac Hello.java
    • 编译此源文件
  • java Hello
    • 运行此编译的class文件

2、安装tomcat8

  • 下载解压后启动

    • 或者进入到bin目录执行

  • 若在虚拟机外部访问tomcat地址,则需要先关闭防火墙 systemctl stop firewalld

    • 或者防火墙单独放行tomcat 8080端口
      • firewall-cmd --add-port=8080/tcp --permanent
    • 移除放行的端口
      • firewall-cmd --reomve-port=8080/tcp --permanent
    • 重启防火墙
      • systemctl restart firewalld

3、安装ElasticSearch

安装过:https://blog.csdn.net/nishihong/article/details/109367795open in new window

  • 使用内置的jdk
#使用ES内置的jdk
export JAVA_HOME=/home/vdb1/elastic_cluster/elasticsearch-7.3.0_node/elasticsearch-7.3.0_node1/jdk/
export PATH=$JAVA_HOME/bin:$PATH
  • 内存不足

修改 /opt/elasticsearch/elasticsearch-7.9.3/config 下的jvm.options

修改为108m:

-Xms180m
-Xmx180m
  • 虚拟机内存不足

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

需要修改vm.max_map_count的内存大小

切换到root账户 命令 su root

修改sysctl.conf文件 命令: vim /etc/sysctl.conf 如下:

vm.max_map_count=655360

输入命令:sysctl -p 重启系统配置

  • 不能使用root用户启动es

在新的es中,不能使用root用户启动es,需要创建其他用户来启动es

adduser es 添加用户名为es的用户

passwd es 修改用户为es的密码

chown es /usr/local/elasticsearch-7.1.1/ -R 为安装elasticsearch的路径赋予权限

su es 切换es用户启动elasticsearch

  • 后台启动

./bin/elasticsearch -d

十五、部署Jar项目

1、启动jar方式

  • 方式1

    • java -jar vhr-web-0.0.1-SNAPSHOT.jar
      • 前台启动,当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
  • 方式2

    • java -jar vhr-web-0.0.1-SNAPSHOT.jar &
      • &代表在后台运行
      • 当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行
  • 方式3

    • nohup java -jar vhr-web-0.0.1-SNAPSHOT.jar &
      • nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
      • 当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件
      • 关闭该程序必须使用 kill 或者 kill -9 进程id 强制关闭
  • 方式4(常用)

    • nohup java -jar moti-blog-0.0.1-SNAPSHOT.jar >moti.log 2>&1 &
      • 后台启动jar,并将错误输出流的内容合并到输出流并写入moti.log文件中
  • 其他参数介绍:

    nohup (no hang up)当账户退出或终端关闭时,程序仍然运行。 &指如果客户端关闭,程序就会停止运行。 >log/lts.txt指程序运行生成日志文件的存储位置,如果不指定,默认该项目所有输出被重定向到nohup.out的文件中。 dev/null 表示空设备文件 0 表示stdin标准输入 1 表示stdout标准输出 2 表示stderr标准错误 2>&1 就是表示将错误重定向输出到标准输出

    https://blog.csdn.net/zhaominpro/article/details/82630528open in new window

    https://blog.csdn.net/qq_39775940/article/details/114108020open in new window

2、Nginx部署SpringBoot项目

server {
        listen       80;
        server_name  blog.louchen.top;
      	location /moti-blog {
             proxy_set_header Host $host;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_pass http://127.0.0.1:9001/moti-blog;
    	}
}

Nginx监听80端口,通过 blog.louchen.top 转发到该服务器

访问路径为 http://blog.louchen.top/moti-blogopen in new window

项目路径为 http://localhost:9001/moti-blogopen in new window

注意:SpringBoot项目路径携带前缀 moti-blog