Linux知识点总结
一、常用通用命令
- 重启虚拟机网络
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的密码
五、用户管理
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
Linux 的用户需要至少要属于一个组。
1、用户和密码的添加
添加用户
useradd [选项] 用户名
默认在 /home下创建和用户名同名的家目录
useradd xm
useradd -d 指定目录 用户名
- 在指定目录下创建用户名和指定家目录
密码添加
passwd 用户名
passwd xm
2、删除用户
- 删除用户,保留家目录
- userdel 用户名
- 删除用户及家目录
- userdel -r 用户名
注意:一般我们要保留组目录。
3、查询用户及用户切换
查询用户
- id 用户名
- whoami
- 查看当前用户名
- id 用户名
切换用户
- 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 |
---|---|
0 | shutdown.target |
1 | emergency.target |
2 | rescure.target |
3 | multi-user.target |
4 | 无 |
5 | graphical.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目录为dd1cp -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的文件
- 查找/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
- 打包a.txt和b.txt文件并将打包后的文件命名为myab.tar.gz
- 打包多个文件并自定义命名压缩后的文件名xxx.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 等)
批量解压
首先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发出 GET 请求,服务器返回的内容会在命令行输出。
详细用法参考:https://www.ruanyifeng.com/blog/2019/09/curl-reference.html
7、输入输出重定向命令 > <
在linux系统中一切皆文件,就是说java -jar 也是一个文件,是文件就会有文件描述符FD,在liunx中每个文件都有3个固定的文件描述符0,1,2
其中0 可以理解为Java中的System.in;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/114108020
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/103476368
直接运行./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.sh 一个可以执行权限
- 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 列出明细的同时,增加汇总值
- 查询指定目录的深度为1磁盘占用情况,默认为当前目录
2)统计文件或文件夹个数
- 统计指定文件夹下的文件个数
- ls -l [指定目录] | grep "^-" | wc -l
- ”^-“ :表示以 - 开头的即文件。wc:表示word count
- ls -l [指定目录] | grep "^-" | wc -l
- 统计指定文件夹个数
- ls -l [指定目录] | grep "^d" | wc -l
- "^d": 表示以d开头的文件,即文件夹
- ls -l [指定目录] | grep "^d" | wc -l
- 递归统计文件的个数和子文件中的文件个数
- ls -lR /home | grep "^-" | wc -l
- -R:递归统计
- ls -lR /home | grep "^-" | wc -l
- 递归统计文件夹个数和子文件夹个数
- 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 [秒数] 指定间隔秒数刷新内存的使用情况
- -h 带单位大小内存显示格式
- 【选项】
使用虚拟内存
https://blog.csdn.net/qq_35500685/article/details/92787168
启用虚拟内存
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 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 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/80863781
①下载对应的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
- 或者防火墙单独放行tomcat 8080端口
3、安装ElasticSearch
安装过:https://blog.csdn.net/nishihong/article/details/109367795
- 使用内置的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_coun
t的内存大小
切换到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
就是表示将错误重定向输出到标准输出
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-blog
项目路径为 http://localhost:9001/moti-blog
注意:SpringBoot项目路径携带前缀
moti-blog