[Linux]Linux 基础知识常用命令和 Shell 脚本
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Linux]Linux 基础知识常用命令和 Shell 脚本相关的知识,希望对你有一定的参考价值。
一、Linux
1. Linux 的应用领域及介绍
- 应用领域:Linux 运维工程师、Linux 嵌入式工程师、Linux 下项目开发;个人桌面领域(Ubuntu、Fedora)、服务器领域、嵌入式领域
- 上世纪 70 年代贝尔实验室的
Ken tompson
和Dennis richres
共同发明了 Unix 操作系统- 80 年代
Richard Stallman
提出了 GUN 计划,后由Linus
在 Minix 操作系统的基础上发明编写了 Linux 内核
2. 网络连接的三种方式
- 桥接模式:虚拟系统与母机 IP 地址必须处于同一网段,如母机:
192.168.0.10
,则虚拟系统 IP 地址网段必须为:192.168.0.*
- NAT 模式(网络地址转换模式):虚拟系统有自己的网段,如
192.168.100
,仍然可以与外部主机系统通信- 主机模式:独立系统,不与外界发生联系
3. Linux 目录介绍
目录名 | 描述 |
---|---|
/bin(binaries) | (/usr/bin、/usr/local/bin)存放常用指令 |
/boot | 存放启动 Linux 时使用的一些核心文件,如一些链接文件以及镜像文件 |
/dev(device) | 类似 windows 的设备管理器,把所有的硬件用文件形式进行映射 |
/etc(etcetera) | 所有系统管理所需要的配置文件和子目录,如 mysql 的 my.conf 配置文件 |
/home | 存放普通用户的目录 |
/lib(library) | 系统开机时所需要的最基本的动态链接库,类似 windows 下的 .dll 文件,几乎所有的应用程序都会使用到这些共享库 |
/media | Linux 系统会自动识别一些设备,如 U 盘、光驱等,当识别成功后,Linux 会把识别的设备挂载到此 |
/mnt | 临时挂载别的文件系统,可以将外部的存储挂载到 /mnt/ 上,如共享文件夹 |
/opt(optional) | 额外安装的软件包的存放位置,如 oracle 数据库包文件 |
/proc(process) | 虚拟的目录,它是系统内存的映射,访问此目录可以获取系统相关信息 |
/root | 超级权限者的主目录 |
/run | 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除 |
/sbin(superuser binaries) | (/usr/sbin、/usr/local/sbin)存放系统管理员使用的系统管理程序 |
/srv | 存放一些服务启动之后需要提取的数据 |
/sys | 这是 Linux 2.6 内核的一个很大的变化,该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs |
/tmp(temporary) | 存放临时文件 |
/usr(unix shared resources) | 存放用户的应用程序和文件,类似 windows 下的 program files 目录 |
/var(variable) | 存放着不断扩充的东西,如系统日志 |
/lost + found | 此目录一般情况下内容为空,当系统非法关机后,自动存放一些文件 |
/usr/local | 软件安装的目标目录,一般是通过源码编译方式安装的程序 |
/selinux | security-enhanced linux,这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放 selinux 相关的文件的 |
4. vi 和 vim
- 拷贝当前行
yy
,拷贝当前行向下的连续 5 行5yy
- 删除当前行
dd
,删除当前行向下的连续 5 行5dd
- 查找单词 bear ,
/bear
回车查找,输入n
查看下一个- 显示行号
:set nu
,取消显示行号:set nonu
- 跳转到行尾
G
,跳转到行头gg
- 撤销
u
- 将光标移动到第 22 行
22 shift + g
5. 开机、关机、登录、注销
- 立刻关机
shutdown -h now
- 5 分钟后关机
shutdown -h 5
- 立刻重启
shutdown -r now
- 关机
halt
- 重启
reboot
- 同步内存数据到磁盘
sync
- 切换用户
su - root
- 用户注销
logout
(在图形化界面下无效,在运行级别 3 下有效)
6. 用户管理
- 添加 spring 用户
useradd spring
- 添加 spring 时指定 spring 的根目录
useradd -d /home/temp spring
- 给 spring 设置密码
passwd spring
- 删除用户但保留用户主目录
userdel spring
- 删除用户且删除用户主目录
userdel -r spring
- 查询用户信息
id root
- 猜猜我是谁
who am i
(显示的是登入系统时的用户信息)- 新增组
groupadd groupname
- 删除组
groupdel groupname
- 添加用户时指定组
useradd -g groupname username
- 修改用户所在组
usermod -g groupname username
7. 用户、组相关的配置文件
/etc/passwd
用户配置文件每行含义:用户名:口令:用户标识号:组标识号:注释性信息:主目录:登录Shell
/etc/shadow
口令配置文件每行含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/ect/group
组的配置文件每行含义:组名:口令:组标识号:组内用户列表
8. 运行级别
- 切换运行级别
init 6
- 查看当前系统的默认运行级别
systemctl get-default
- 设置当前系统的默认运行级别
systemctl set-default multi-user.target
级别 | 功能 |
---|---|
0 | 关机 |
1 | 单用户(找回丢失密码) |
2 | 多用户无网络服务 |
3 | 多用户有网络服务 |
4 | 系统未使用保留给用户 |
5 | 图形界面 |
6 | 重启 |
9. 帮助指令
- 获得 ls 命令的帮助信息
man ls
- 获得 shell 内置命令的帮助信息
help cd
10. 文件目录指令
- 回到自己的家目录
cd ~
- 创建多级目录
mkdir -p /home/spring/bear
- 删除空目录
rmdir /home/spring/bear
- 创建一个空文件
touch temp.java
- 递归拷贝当前文件夹到指定目录
cp -r srcdirectory dstdirectory
- 以覆盖方式递归拷贝当前文件夹到指定目录
\\cp -r srcdirectory dstdirectory
- 重命名
mv oldfilename newfilename
- 查看文件并显示行号
cat -n filename
- more 指令
键位 | 功能 |
---|---|
space | 下翻一页 |
enter | 下翻一行 |
q | 退出 |
ctrl + f | 下滚一屏 |
ctrl + b | 上滚一屏 |
= | 输出当前行号 |
:f | 输出文件名和当前行号 |
- less 用于分屏查看文件内容,优点是根据需要显示的内容动态加载文件,对于显示大型文件具有较高的效率
键位 | 功能 |
---|---|
space | 下翻一页 |
pagedown | 下翻一页 |
pageup | 上翻一页 |
/字串 | 向下搜索字串,n:向下查找 N:向上查找 |
?字串 | 向上搜索字串,n:向上查找 N:向下查找 |
q | 退出 |
- 输出内容到控制台
echo $HOSTNAME
- 查看文件的头 5 行内容
head -n 5 /ect/profile
(默认查看 10 行)- 查看文件的尾 5 行内容
head -n 5 /ect/profile
(默认查看 10 行)- 实时监控文件内容的更新
tail -f filename
(ctrl + c 退出)- 覆盖重定向
>
,追加重定向>>
- 为文件或目录创建软链接(快捷方式)
ln -s srcfile linkname
- 查看最近使用的十个命令
history 10
- 执行曾经执行过的编号为 5 的指令
!5
11. 日期时间指令
- 显示当前时间
date
- 按指定格式显示时间
date "+%Y-%m-%d %H:%M:%S"
- 设置系统当前时间
date -s "2022-02-02 22:22:22"
- 查看指定年指定月的日历
cal 5 2050
12. 查找指令
- 在指定目录下按文件名检索文件
find /home -name hello.txt
- 在指定目录下按用户名过滤文件
find /home -user root
- 在指定目录下按文件大小过滤文件
find /home -size +200M
(+
大于-
小于)- locate 指令可以快速定位文件路径,因其无需遍历整个文件系统,基于自定义的数据库进行检索,速度较快,第一次使用该指令前,需使用
updatedb
指令生成 locate 数据库- 查看某个指令存放的目录
which ls
|
管道符:表示将前一个命令的处理结果输出传递给后面的命令处理cat hello.t | grep -n -i "yes"
- 显示行号且忽略大小写方式从文件中查找内容
grep -n -i "yes" hello.txt
13. 压缩和解压
- 将指定目录下的文件压缩为 .gz 格式
gzip /home/hello.txt
- 解压指定目录下的 .gz 文件
gunzip /home/hello.txt.gz
- 压缩指定目录
zip -r myhome.zip /home
- 解压文件到指定目录
unzip -d /opt myhome.zip
- 压缩多个文件
tar -zcvf pc.tar.gz pig.txt cat.txt
- 解压到指定目录
tar -zxvf pc.tar.gz -C /opt/temp
参数 | 功能 |
---|---|
-c | 产生 .tar 打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包 .tar 文件 |
14. 组管理
Linux 中每个用户必须属于一个组,不能独立于组外;Linux 中每个文件有所有者、所在组和其它组的概念
- 查看文件的所有者
ls -ahl
- 修改文件的所有者
chown username filename
- 修改文件所在组
chgrp groupname filename
- 修改用户登入系统的初始目录
usermod -d directoryname username
(用户需要拥有进入新目录的权限)
15. 权限管理
- 第 0 位确定文件类型
- 第 1 - 3 位确定文件所有者拥有的权限
- 第 4 - 6 位确定文件所在组拥有的权限
- 第 7 - 9 位确定其它用户对该文件拥有的权限
- 第二列表示文件数加目录数,第三列表示所有者,第四列表示所在组,第五列表示大小
字符 | 说明 |
---|---|
- | 普通文件 |
d | 目录 |
l | 链接(快捷方式) |
c | 字符设备文件,如鼠标、键盘 |
b | 块设备,如硬盘 |
- rwx 权限作用到文件:r:可读 - 可以读取、查看;w:可写 - 可以修改,但不代表可以删除该文件,可以删除一个文件的前提是对该文件所在的目录拥有写权限;x:可执行 - 文件可以被执行
- rwx 权限作用到目录:r:可读 - 可以查看该目录内容;w:可写 - 可重命名目录,可在目录创建、删除文件;x:可执行 - 可以进入该目录
- rwx 也可用数字表示依次对应
4、2、1
- u - 所有者,g - 所在组,o - 其他用户,a - 所有人
- 依次赋予权限
chmod u=rwx,g=rx,o=x filenameordirectoryname
<=>chmod 751 filenameordirectoryname
- 增加指定权限
chmod o+w filenameordirectoryname
- 回收指定权限
chmod a-x filenameordirectoryname
- 修改文件或目录所有者
chown newowner filenameordirectoryname
- 修改文件的所有者和所在组
chown newowner:newgroup filenameordirectoryname
- 修改某个目录下的所有文件或目录的所有者和所在组
chown -R newowner:newgroup filenameordirectoryname
16. 定时任务调度 crond
- 任务调度:系统在某个指定的事件执行特定的命令或程序
- 任务调度分类:系统工作:有些重要的工作必须周而复始地执行,如病毒扫描;用户工作:用户希望执行某些程序,如对 MySQL 数据库的备份
crontab [params]
参数 | 功能 |
---|---|
-e | 编辑 crontab 定时任务 |
-l | 查询 crontab 定时任务 |
-r | 删除当前用户的所有 crontab 任务 |
- 重启任务调度
service crond restart
- 每分钟执行一次 ls -l /ect/ > tmp/to.txt 指令
*/1 * * * * ls -l /etc/ > /tmp/to.txt
占位符 | 含义 | 范围 |
---|---|---|
第一个 | 一个小时当中第几分钟 | 0 - 59 |
第二个 | 一天当中的第几小时 | 0 - 23 |
第三个 | 一个月当中的第几天 | 1 - 31 |
第四个 | 一年当中的第几个月 | 1 - 12 |
第五个 | 一周当中的星期几 | 0 - 7(0 和 7 都表示周日) |
符号 | 含义 |
---|---|
* | 代表任何时间。如第一个占位符为 * 代表一小时中的每分钟都执行一次命令 |
, | 代表不连续的时间。如 “0 8,12,16 * * *” 代表每天的 8、12、16 点整执行一次命令 |
- | 代表连续的时间范围。如 “0 5 * * 1-6” 代表周一至周六的 5 点整执行一次命令 |
*/n | 代表每隔多久执行一次。如 “*/10 * * * *” 代表每隔 10 分钟执行一次命令 |
17. 定时任务调度 at
- at 命令是一次性定时计划任务,at 的守护进程 atd 会在后台运行。默认情况下 atd 守护进程每隔 60s 检查一次作业队列,若有作业存在且作业运行时间与当前时间匹配,则运行此作业
- 在使用 at 命令时必须保证其守护进程 atd 处于运行状态,可以使用
ps -ef |grep atd
指令查看- at 命令格式
at [params] [time]
,可以使用ctrl + d
结束 at 命令的输入
参数 | 含义 |
---|---|
-m | 当指定的任务完成后,就给用户发送邮件,即使没有标准输出 |
-I | atq 的别名 |
-d | atrm 的别名 |
-v | 显示任务将要被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q<队列> | 使用指定的队列 |
-f<文件> | 从指定文件读入任务而不是从标准输入读入 |
-t<时间参数> | 以时间参数的形式提交要运行的任务 |
- 以 hh:mm(小时:分钟)指定,若该时间已过,则第二天执行
- 使用 midniging、noon、teatime 等比较模糊的词语来指定
- 采用 12 小时计时制来指定,如 12pm
- 使用具体的时间来指定,如 month day、mm/dd/yy、dd.mm.yy,例如 04:00 2021-03-01
- 使用相对计时法 now + count time-units,单位可以是 minutes、hours、days、weeks
- 直接使用 today、tomorrow 来指定时间
- 两天后的下午 5 点执行命令
at 5pm + 2 days
,/bin/ls /home<EOT>
,输入结束按两次ctrl + d
结束 at 命令的输入- 查看工作队列中的任务
atq
<=>at -l
- 删除已经存在的第 1 号任务
atrm 1
18. 磁盘分区、挂载
- 查看 Linux 系统硬盘分区挂载情况
lsblk
- Linux 硬盘分为 IDE 硬盘和 SCSI 硬盘,目前基本都是 SCSI 硬盘
- 对于 IDE 硬盘,驱动器标识符为 “hdx~”,其中 “hd” 表明分区所在设备的类型,这里是指 IDE 硬盘。“x” 为盘号(a 为基本盘、b 为基本从属盘、c 为辅助主盘,d 为辅助从属盘);“~” 代表分区,前四个分区用数字 1 - 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例如:hda3 表示第一个 IDE 硬盘上的第三个主分区或扩展分区;hdb2 表示第二个 IDE 硬盘上的第二个主分区或扩展分区
- 对于 SCSI 硬盘则标识为 “sdx~”,SCSI 硬盘用 “sd” 来表示分区所在设备的类型,其余则和 IDE 硬盘的表示方法一致
- 查看磁盘详细信息
lsblk -f
- 通过虚拟机设置为 Linux 系统增加一块硬盘,重启后系统识别到新增的硬盘
- 使用
fdisk /dev/sdb
命令对新增的硬盘进行分区,分区结束时输入w
写入分区并退出,若不想保存在输入q
- 格式化分区,系统为新增的磁盘分区分配唯一的 40 位字符串的 UUID
mkfs -t ext4 /dev/sdb1
- 分区挂载到目录下
mount /dev/sdb1 /home/bear
- 卸载分区挂载关系
umount /dev/sdb1
或umount /home/bear
- 使用命令行挂载重启后会失效,永久挂载需修改 /etc/fstab 配置文件实现,配置文件编辑完成使用
mount -a
指令使挂载立即生效- 查询系统整体磁盘使用情况
df -h
- 查询指定目录的磁盘占用情况
du -h
参数 | 含义 |
---|---|
-s | 指定目录占用大小汇总 |
-h | 带计量单位M、K、G |
-a | 包含文件 |
-c | 列出明细的同时,增加汇总值 |
–max-depth=1 | 子目录深度 |
- 统计指定目录下的文件个数
ls -l /opt | grep "^-" | wc -l
- 以树状显示目录结构
tree /opt
(安装 tree 指令yum install tree
)
19. 网络配置
通过修改配置文件指定 Linux 主机的 IP 地址
- vim /etc/sysconfig/network-scripts/ifcfg-ens33
- 修改虚拟机设置:编辑 -> 虚拟网络编辑器,修改子网 IP 和网关 IP 与 Linux 虚拟机 IP 处于同一网段
- 使配置生效
service network restart
或reboot
- 改主机名
vim /etc/hostname
- windows:C:\\Windows\\System32\\drivers\\etc\\hosts 中添加 IP 与主机的对应关系
192.168.222.222 machine
- Linux:
/etc/hosts
- Hosts:一个文本文件,用来记录 IP 和 Hostname 的映射关系
- DNS:
Domain Name System
,是互联网上作为域名和 IP 地址相互映射的一个分布式数据库- 主机名解析机制分析:浏览器先检查浏览器缓存中是否存在该域名对应的 IP,有则完成域名解析;否则检查操作系统的 DNS 解析器缓存中是否存在该域名对应的 IP,有则完成域名解析(即先查看本地解析器缓存);如果在本地解析器缓存中没有找到域名与 IP 的对应映射,则检查系统的 hosts 文件,找到映射关系则完成域名解析;如果在 hosts 文件中仍未找到域名与 IP 的映射关系,则到 DNS 服务器中进行查找
- 查看本地域名解析器缓存
ipconfig /displaydns
- 清除本地域名解析器缓存
ipconfig /flushdns
20. 进程管理
在 Linux 中,每一个执行的程序都称为一个进程,每一个进程都分配一个 id(pid 进程号)
ps 指令用来查看当前系统中进程的执行情况
参数 | 含义 |
---|---|
-a | 显示当前终端的所有进程信息 |
-u | 以用户的格式显示进程信息 |
-x | 显示后台进程 |
名称 | 含义 |
---|---|
USER | 用户名称 |
PID | 进程号 |
%CPU | 进程占用 CPU 的百分比 |
%MEM | 进程占用物理内存的百分比 |
VSZ | 进程占用虚拟内存大小(KB) |
RSS | 进程占用物理内存大小(KB) |
TT | 终端名称(缩写) |
STAT | 进程状态 |
STARTED | 进程启动时间 |
TIME | CPU 时间 |
COMMAND | 启动进程所用的命令和参数 |
参数 | 含义 |
---|---|
S- | 睡眠 |
s- | 该进程是会话的先导进程 |
N- | 进程优先级比普通优先级更低 |
R- | 正在运行 |
D- | 短期等待 |
Z- | 僵死进程 |
T- | 被跟踪或被停止 |
- 以全格式显示当前所有进程(包括父进程)
ps -ef
- 通过进程号杀死进程
kill 7940
- 重启 sshd 服务
/bin/system start sshd.service
- 通过进程名称杀掉进程(包括子进程)
killall gedit
- 查看本机终端进程
ps -aux | grep bash
,强制杀掉终端进程kill -9 8963
- 以树状形式显示进程信息并显示用户、进程号信息
pstree -p
21. 服务管理
- 服务本质是运行在后台的进程,通常会监听某个端口,等待其它程序的请求,又称为守护进程
- 服务管理指令
service servicename [start | stop | restart | reload | status]
service
指令可以管理的服务在 init.d 中查看ls -l /etc/init.d/
- 查看服务名
setup
- 开机流程:开机 -> Bios -> /boot -> 启动进程 systemd -> 确定运行级别 -> 启动对应服务
- 通过
chkconfig
指令服务在各种运行级别下设置是启动或关闭,chkconfig
指令管理的服务在/etc/init.d
文件中查看- 查看
chkconfig
管理服务在各级别下的状态chkconfig --list
- 设置服务在某个运行级别下的状态
chkconfig --level 5 servicename on/off
,重启系统后生效- systemctl 指令管理的服务在 /usr/lib/systemd/system 中查看
- 查看开机过程中的服务启动状态
systemctl list-unit-files
- 设置服务开机自启
systemctl enable servicename
- 关闭服务开机自启
systemctl disable servicename
- 查询某个服务是否开机自启
systemctl is-enabled servicename
- 临时关闭防火墙
systemctl stop firewalld.service
- 查看某台主机的端口是否可访问
telnet 192.168.222.222 22
- 打开端口
firewall-cmd --permanent --add-port=端口号/协议
- 关闭端口
firewall-cmd --permanent --remove-port=端口号/协议
- 打卡或关闭端口,需重载后方生效
firewall-cmd --reload
- 查询端口是否开放
firewall-cmd --query-port=端口号/协议
- 查看网络端口情况
netstat -an | more
- top 与 ps 命令很相似,都是用来显示正在运行的进程,top 与 ps 最大的不同之处在于 top 在执行一段时间后可以更新正在运行的进程
参数 | 功能 |
---|---|
-d 秒数 | 指定 top 命令刷新频率,默认为 3s |
-i | 不显示闲置或僵死的进程 |
-p | 指定进程号来动态监控某个进程的状态 |
- 以一定顺序并显示进程信息的方式显示网络情况
netstat -anp | more
22. rpm 和 yum
- rpm 用于互联网下载包的打包及安装工具,它包含在某些 Linux 发行版中。它生成 .rpm 扩展名的文件。RPM 是 ReadHat Package Manager 的缩写,类似 windows 中的 setup.exe
- 查询已安装的 rpm 列表
rpm -qa
- 查询软件包是否安装
rpm -q firefox
- 查询软件包详细信息
rpm -qi firefox
- 查询软件包安装后生成了哪些文件
rpm -ql firefox
- 查询文件归属于哪个软件包
rpm -qf /etc/passwd
- 强制删除软件包
rpm -e --nodeps firefox
- 安装 rpm 包
rpm -ivh rpmurl
(i:install、v:verbose(提示)、h:hash(进度条))- yum 是一个 shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 rpm 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
- 查询 yum 服务器是否存在需要的软件包
yum list | grep packagename
- 安装指定的 yum 包
yum install packageurl
23. 搭建 JavaEE 环境
-
安装配置 Oracle Java 8
- 通过 Xftps6 将 jdk 压缩文件上传到 Linux /opt 目录下
- 解压压缩文件
tar -zxvf jdk-8u311-linux-x64.tar.gz
- 自定义 jdk 安装目录
mkdir /usr/local/java
- 移动解压包到自定义目录
mv /opt/jdk1.8.0_311 /usr/local/java
- 配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_311
export PATH=$JAVA_HOME/bin:$PATH
- 使环境变量配置立即生效
source /etc/profile
-
安装配置 tomcat8
- 上传压缩文件到 /opt 目录下
- 解压
tar -zxvf apache-tomcat-8.5.59.tar.gz
- 自定义 tomcat 目录
mkdir /usr/local/tomcat
- 移动解压包到自定义目录
mv apache-tomcat-8.5.59 /usr/local/tomcat/
- 进入 tomcat bin 目录下启动 tomcat
cd /usr/local/tomcat/apache-tomcat-8.5.59/bin/
./startup.sh
- 开放 8080 端口
firewall-cmd --permanent --add-port=8080/tcp
- 重载即刻开放端口
firewall-cmd --reload
-
安装配置 MySQL5.7
- 删除 CentOS7.6 自带的数据库类 MySQL 数据库 mariadb
- 查询与 mariadb 相关的软件包
rpm -qa | grep mari
- 依次移除两个软件包
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
、rpm -e --nodeps marisa-0.2.4-4.el7.x86_64
- 从网络下载 MySQL 软件压缩包
wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
- 解压压缩包
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
- 依次安装 MySQL rpm 包
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
- 启动 MySQL 服务
systemctl start mysqld.service
- 查询 root 密码
grep "password" /var/log/mysqld.log
- 登录 MySQL
mysql -u root -p
- 设置密码设置提示策略
set global validate_password_policy=0;
- 重置 root 密码
set password for 'root'@'localhost' =password('yourpassword');
- 使密码立即生效
flush privileges;
24. Shell 编程
- Shell 是一个命令解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止和编写一些程序
- 脚本以
#!/bin/bash
开头,脚本需要有可执行权限
- Linux 中 Shell 变量分为系统变量和用户自定义变量,系统变量如 $HOME、$PWD、$SHELL、$USER 等
- 定义变量:
变量名=值
;撤销变量:unset 变量名
;声明静态变量:readonly变量
,只读指令不支持 unset- 变量定义规则:变量名称可以由字母、数字和下划线组成,不能以数字开头;等号两侧不能有空格;变量名一般大写
- 将命令的返回值赋给变量 A=`date` <=> A=$(date)
#!/bin/bash
# 定义变量A
A=100
echo A=$A
# 撤销定义变量A
unset A
echo A=$A
# 定义静态变量B,不可 unset
readonly B=200
echo B=$B
将 shell 变量输出为环境变量(全局变量)
export 变量名=值
让配置文件立即生效
source 配置文件
查询环境变量的值
echo $变量名
shell 脚本的多行注释
:<<! content !
$n
:n 为数字,$0 代表命令本身,$1-$9 代表第 1 到第 9 个参数,10 以上的参数,10 以上的参数需要用花括号包含,如 $10
$*
:命令行中的所有参数,$* 把所有的参数看成一个整体
$@
:命令行中的所有参数,$@ 把每个参数区分对待
$#
:命令行中所有参数的个数
#!/bin/bash
# 依次输出每一个参数变量
echo args0=$0
echo args1=$1
echo args2=$2
# 整体输出所有参数
echo args=$*
# 区别输出所有参数
echo args_=$@
# 输出参数个数
echo args_nums=$#
$$
:当前进程的进程号$!
:后台运行的最后一个进程的进程号$?
:最后一次执行的命令的返回状态。0 - 命令正确执行;!0 - 执行出错- 以后台方式运行脚本
sh /home/var.sh &
$((运算表达式))
<=>$[运算表达式]
<=>expr m + n
,使用 expr 时运算符间有空格,希望将结果赋值给变量时使用反引号 `- expr \\* / %
符号 | 功能 |
---|---|
= | 字符串比较是否相等 |
-lt | 小于 |
-le | 小于等于 |
-eq | 等于 |
-gt | 大于 |
-ge | 大于等于 |
-ne | 不等于 |
-r | 有读权限 |
-w | 有写权限 |
-x | 有执行权限 |
-f | 文件存在并且是一个常规文件 |
-e | 文件存在 |
-d | 文件存在并且是一个目录 |
[ condition ]
,condition 前后需要有空格,非空返回 true,可以用$?
进行验证,0 为 true,>1 为 false
# 分支格式
#!/bin/bash
if [ "ok" = "ok" ]
then
echo "equal"
elif[ "lcx" = "lcx" ]
echo "not equal"
else
echo "quit"
fi
# case 语句
#!/bin/bash
case $1 in
"1")
echo "Monday"
;;
"2")
echo "Tuesday"
;;
*)
echo "other"
;;
esac
# for 循环 1
#!/bin/bash
# $* 将命令行参数看作一个整体,所以 for 循环只执行一次
for i in "$*"
do
echo "args is $i"
done
echo "==========="
# $@ 区别对待各个命令行参数,所以有几个参数 for 循环执行>几次
for j in "$@"
do
echo "args is $j"
done
# for 循环 2
#!/bin/bash
SUM=0
for(( i=1; i<=$1; i++))
do
SUM=$[ $SUM+$i ]
done
echo "sum = $SUM"
# while 循环
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[ $i+1 ]
done
echo "The result is $SUM"
# read 读取输入
#!/bin/bash
# 读取控制台输入的一个值
read -p "Please input a number:" NUMBER
echo "The number that you entered is $NUMBER"
# 读取用户 10s 内输入的一个值
read -t 10 -p "Please input a number:" NUMBER1
echo "The number you entered is $NUMBER1"
- 系统函数:
basename
:返回文件名;dirname
:返回文件路径,不包含文件名- 自定义函数
#!/bin/bash
# Define the funtion
function getSum()
SUM=$[$n1+$n2]
echo "Sum is $SUM"
read -p "Input the first number:" n1
read -p "Input the second number:" n2
# Call the function
getSum $n1 $n2
25. Shell 之定时备份数据库
# 每天凌晨 2:30 定时备份指定的数据库,同时检查 10 天前的备份文件是否存在,存在则删除
DIRECTORY=/data
DATETIME=$(date +%Y%m%d%H%M%S)
DB_HOST=localhost
DB_USER=root
DB_PWD=2020@mywife
DB_NAME=mine
# If the save directory not exists, then create it
[ ! -d "$DIRECTORY/$DATETIME" ] && mkdir -p "$DIRECTORY/$DATETIME"
# Backup the database
mysqldump -h$DB_HOST -u$DB_USER -p$DB_PWD $DB_NAME > $DIRECTORY/$DATETIME/$DB_NAME.sql
# Compress the backup file
cd /$DIRECTORY
tar -zcvf $DIRECTORY/$DATETIME.tar.gz $DATETIME
rm -rf $DIRECTORY/$DATETIME
# Delete the file that existing more than 10 days
find $DIRECTORY -atime +10 -name "*.tar.gz" -exec rm -rf \\;
echo "Backup databse named $DB_NAME successfully"
# 定时调用脚本
crontab -e
30 2 * * * /home/bash/backup_mysql_mine.sh
26. apt 和 ssh 远程登录
- apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,可以使用 apt 命令进行软件包的安装、删除、清理等,类似于 windows 中的软件管理工具
- 查看 apt 配置文件
cat /etc/apt/sources.list
命令 | 功能 |
---|---|
sudo apt-get update | 更新源 |
sudo apt-get install package | 安装包 |
sudo apt-get remove package | 删除包 |
sudo apt-cache show package | 获取包的相关信息 |
sudo apt-get source package | 下载该包的源代码 |
sudo apt-cache search package | 搜索软件包 |
sudo apt-get install package --reinstall | 重新安装软件包 |
sudo apt-get -f install | 修复安装 |
sudo apt-get remove package --purge | 彻底删除包,包括配置文件等 |
sudo apt-get build-dep package | 安装相关的依赖环境 |
sudo apt-get upgrade | 更新已安装的包 |
sudo apt-get dist-upgrade | 升级系统 |
sudo apt-cache depends package | 查询该软件包所依赖的包 |
sudo apt-cache rdepends package | 查询该包被那些包依赖 |
清华大学开源软件镜像站
https://mirrors.tuna.tsinghua.edu.cn
备份配置文件
cp /etc/apt/sources.list /etc/apt/sources.list.backup
将原配置文件置空
echo '' > sources.list
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
- 更新源地址
sudo apt-get update
- 安装软件
sudo apt-get install vim
- 查看软件信息
sudo apt-cache show vim
- 删除软件
sudo apt-get remove vim
- SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组所制定,SSH 为建立在应用层与传输层基础上的安全协议
- 安装 netstat 指令
sudo apt install net-tools
- 在 Ubuntu 上安装 SSH 客户端和服务端
sudo apt-get install openssh-server
- 启动 sshd 服务
service sshd restart
- 从 Linux 登录到别的 Linux
ssh root@192.168.222.222
27. 日志管理
- 日志文件是重要的系统信息文件,记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等
日志文件 | 说明 |
---|---|
/var/log/boot.log | 系统启动日志 |
/var/log/cron | 记录与系统定时任务相关的日志 |
/var/log/lasllog | 记录系统中所有用户最后一次的登录事件的日志。二进制文件,需使用 lastlog 命令查看 |
/var/log/mailog | 记录邮件信息的日志 |
/var/log/message | 记录系统重要消息的日志。系统出现问题时检查首选 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录 |
/var/run/ulmp | 记录当前已经登陆的用户信息。此文件随用户登录、注销不断变化,只记录当前登录用户的的信息。需使用 w、who、users 等命令查看 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统开机时内核自检的信息。可使用 dmesg 命令直接查看内核自检信息 |
/var/log/btmp | 记录错误登录的日志。二进制文件,需使用 lastb 命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启关机事件。二进制文件,需使用 last 命令查看 |
查看系统中的 rsyslogd 服务是否启动
ps aux | grep "rsyslog" | grep -v "grep"
查询 rsyslogd 服务的自启动状态
systemctl list-unit-files | grep rsyslog
/etc/rsyslog.conf
文件内容说明,编辑格式为 *.* ,第一个 * 代表日志类型,第二个 * 代表日志级别
关键字 | 说明 |
---|---|
auth | ##pam产生的日志 |
authpriv | ##shh、ftp等登录信息的验证信息 |
corn | ##时间任务相关 |
kern | ##内核 |
lpr | ##打印 |
##邮件 | |
mark(syslog)-rsyslog | ##服务内部信息,时间标识 |
news | ##新闻组 |
user | ##用户程序产生的相关信息 |
uucp | ##unix to unix copy 主机之间相关的通信 |
local 1-7 | 自定义的日志设备 |
关键字 | 说明 |
---|---|
debug | ##有调试信息的,日志通信最多 |
info | ##一般信息日志,最常用 |
notice | ##最具有重要性的普通条件的信息 |
warning | ##警告级别 |
err | ##错误级别,阻止某个功能或模块不能正常工作的信息 |
crit | ##严重级别,阻止整个系统或整个软件不能正常工作的信息 |
alert | ##需要立即修改的信息 |
emerg | ##内核崩溃等重要信息 |
none | ##什么不记录 |
- 查看日志服务配置文件
cat /etc/rsyslog.conf
- 查看日志信息
cat /var/log/secure
- 自定义日志服务:在
/etc/rsyslog.conf
中添加规则:当有事件发送时(比如 sshd 服务相关事件),将相关信息保存到/var/log/custom.log
文件中- 日志轮替:把旧的日志文件移动并改名,同时建立心得空日志文件,当旧日志文件超出保存范围之后,就会进行删除
- CentOS7 使用 logrotate 进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中的 “dateext” 参数
- 如果配置文件中有 “dateext” 参数,那么日志会用日期来作为日志文件的命名,如 “secure-20201010”。这样日志文件名不会重复,只需要指定保存日志文件个数,删除多余的日志文件即可
- 如果配置文件中没有 “dateext” 参数,当第一次进行日志轮替时,当前的 “secure” 会重命名为 “secure.1”,然后新建 “secure” 文件来保存新的日志。当第二次进行日子轮替时,“secure.1” 会重命名为 “secure.2”,“secure” 重命名为 “secure.1” 用以保存新的日志,以此类推
- 查看日志轮替策略
cat /etc/logrotate.conf
/etc/logrotate.conf
配置文件参数说明
参数 | 含义 |
---|---|
daily | 轮替周期是天 |
weekly | 轮替周期是周 |
monthly | 轮替周期是月 |
rotate digit | 保留的日志文件的个数。0 指没有备份 |
compress | 旧的日志文件进行压缩 |
create mode owner group | 建立新的日志文件同时指定新日志的权限、所有者、所属组 |
mail address | 日志轮替时,发送内容到指定邮件地址 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize size | 日志轮替的最小值 |
size 大小 | 大于指定大小才轮替,而不是按照时间轮替 |
dateext | 使用日期作为日志轮替文件的后缀 |
sharedscripts | 在此关键字之后的脚本只执行一次 |
prerotate/endscript | 在日志轮替之前执行脚本命令 |
postrotate/endscript | 在日志轮替时候执行脚本命令 |
- 自定义日志轮替:第一种方法是直接在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略;第二种方法是在 /etc/logrotate.d 目录中新建该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被 “include” 到主配置文件中
- 日志轮替依赖于系统定时任务。在 /etc/cron.daily/logrotate,logrotate.conf 通过这个文件依赖定时任务执行
- 查看全部内存日志
journalctl
- 查看最新 3 条内存日志
journalctl -n 3
- 查看指定时间段间的内存日志
journalctl --since 19:00 --until 19:10:10
- 查看报错内存日志
journalctl -p err
- 查看日志详细内容
journalctl -o verbose
- 查看指定信息日志
以上是关于[Linux]Linux 基础知识常用命令和 Shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章