[Linux]Linux 基础知识、常用命令和 Shell 脚本
一、Linux
1. Linux 的应用领域及介绍

2. 网络连接的三种方式

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
5. 开机、关机、登录、注销
6. 用户管理
7. 用户、组相关的配置文件
8. 运行级别
| 级别 | 功能 |
|---|
| 0 | 关机 |
| 1 | 单用户(找回丢失密码) |
| 2 | 多用户无网络服务 |
| 3 | 多用户有网络服务 |
| 4 | 系统未使用保留给用户 |
| 5 | 图形界面 |
| 6 | 重启 |
9. 帮助指令
10. 文件目录指令
| 键位 | 功能 |
|---|
| space | 下翻一页 |
| enter | 下翻一行 |
| q | 退出 |
| ctrl + f | 下滚一屏 |
| ctrl + b | 上滚一屏 |
| = | 输出当前行号 |
| :f | 输出文件名和当前行号 |
| 键位 | 功能 |
|---|
| space | 下翻一页 |
| pagedown | 下翻一页 |
| pageup | 上翻一页 |
| /字串 | 向下搜索字串,n:向下查找 N:向上查找 |
| ?字串 | 向上搜索字串,n:向上查找 N:向下查找 |
| q | 退出 |
11. 日期时间指令
12. 查找指令
13. 压缩和解压
| 参数 | 功能 |
|---|
| -c | 产生 .tar 打包文件 |
| -v | 显示详细信息 |
| -f | 指定压缩后的文件名 |
| -z | 打包同时压缩 |
| -x | 解包 .tar 文件 |
14. 组管理
15. 权限管理

| 字符 | 说明 |
|---|
| - | 普通文件 |
| d | 目录 |
| l | 链接(快捷方式) |
| c | 字符设备文件,如鼠标、键盘 |
| b | 块设备,如硬盘 |
16. 定时任务调度 crond
| 参数 | 功能 |
|---|
| -e | 编辑 crontab 定时任务 |
| -l | 查询 crontab 定时任务 |
| -r | 删除当前用户的所有 crontab 任务 |
| 占位符 | 含义 | 范围 |
|---|
| 第一个 | 一个小时当中第几分钟 | 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
| 参数 | 含义 |
|---|
| -m | 当指定的任务完成后,就给用户发送邮件,即使没有标准输出 |
| -I | atq 的别名 |
| -d | atrm 的别名 |
| -v | 显示任务将要被执行的时间 |
| -c | 打印任务的内容到标准输出 |
| -V | 显示版本信息 |
| -q<队列> | 使用指定的队列 |
| -f<文件> | 从指定文件读入任务而不是从标准输入读入 |
| -t<时间参数> | 以时间参数的形式提交要运行的任务 |
18. 磁盘分区、挂载

| 参数 | 含义 |
|---|
| -s | 指定目录占用大小汇总 |
| -h | 带计量单位M、K、G |
| -a | 包含文件 |
| -c | 列出明细的同时,增加汇总值 |
| –max-depth=1 | 子目录深度 |
19. 网络配置


20. 进程管理
| 参数 | 含义 |
|---|
| -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- | 被跟踪或被停止 |
21. 服务管理
| 参数 | 功能 |
|---|
| -d 秒数 | 指定 top 命令刷新频率,默认为 3s |
| -i | 不显示闲置或僵死的进程 |
| -p | 指定进程号来动态监控某个进程的状态 |
22. rpm 和 yum
23. 搭建 JavaEE 环境
-
安装配置 Oracle Java 8
-
安装配置 tomcat8
-
安装配置 MySQL5.7
24. Shell 编程

#!/bin/bash
A=100
echo A=$A
unset A
echo A=$A
readonly B=200
echo B=$B
#!/bin/bash
echo args0=$0
echo args1=$1
echo args2=$2
echo args=$*
echo args_=$@
echo args_nums=$#
| 符号 | 功能 |
|---|
= | 字符串比较是否相等 |
-lt | 小于 |
-le | 小于等于 |
-eq | 等于 |
-gt | 大于 |
-ge | 大于等于 |
-ne | 不等于 |
-r | 有读权限 |
-w | 有写权限 |
-x | 有执行权限 |
-f | 文件存在并且是一个常规文件 |
-e | 文件存在 |
-d | 文件存在并且是一个目录 |
if [ "ok" = "ok" ]
then
echo "equal"
elif[ "lcx" = "lcx" ]
echo "not equal"
else
echo "quit"
fi
case $1 in
"1")
echo "Monday"
;;
"2")
echo "Tuesday"
;;
*)
echo "other"
;;
esac
for i in "$*"
do
echo "args is $i"
done
echo "==========="
for j in "$@"
do
echo "args is $j"
done
SUM=0
for(( i=1; i<=$1; i++))
do
SUM=$[ $SUM+$i ]
done
echo "sum = $SUM"
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[ $i+1 ]
done
echo "The result is $SUM"
read -p "Please input a number:" NUMBER
echo "The number that you entered is $NUMBER"
read -t 10 -p "Please input a number:" NUMBER1
echo "The number you entered is $NUMBER1"
#!/bin/bash
function getSum() {
SUM=$[$n1+$n2]
echo "Sum is $SUM"
}
read -p "Input the first number:" n1
read -p "Input the second number:" n2
getSum $n1 $n2
25. Shell 之定时备份数据库
DIRECTORY=/data
DATETIME=$(date +%Y%m%d%H%M%S)
DB_HOST=localhost
DB_USER=root
DB_PWD=2020@mywife
DB_NAME=mine
[ ! -d "${DIRECTORY}/${DATETIME}" ] && mkdir -p "${DIRECTORY}/${DATETIME}"
mysqldump -h${DB_HOST} -u${DB_USER} -p${DB_PWD} ${DB_NAME} > ${DIRECTORY}/${DATETIME}/${DB_NAME}.sql
cd /${DIRECTORY}
tar -zcvf ${DIRECTORY}/${DATETIME}.tar.gz ${DATETIME}
rm -rf ${DIRECTORY}/${DATETIME}
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 远程登录
| 命令 | 功能 |
|---|
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 | 查询该包被那些包依赖 |
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
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 命令查看 |
| 关键字 | 说明 |
|---|
| auth | ##pam产生的日志 |
| authpriv | ##shh、ftp等登录信息的验证信息 |
| corn | ##时间任务相关 |
| kern | ##内核 |
| lpr | ##打印 |
| mail | ##邮件 |
| mark(syslog)-rsyslog | ##服务内部信息,时间标识 |
| news | ##新闻组 |
| user | ##用户程序产生的相关信息 |
| uucp | ##unix to unix copy 主机之间相关的通信 |
| local 1-7 | 自定义的日志设备 |
| 关键字 | 说明 |
|---|
| debug | ##有调试信息的,日志通信最多 |
| info | ##一般信息日志,最常用 |
| notice | ##最具有重要性的普通条件的信息 |
| warning | ##警告级别 |
| err | ##错误级别,阻止某个功能或模块不能正常工作的信息 |
| crit | ##严重级别,阻止整个系统或整个软件不能正常工作的信息 |
| alert | ##需要立即修改的信息 |
| emerg | ##内核崩溃等重要信息 |
| none | ##什么不记录 |
| 参数 | 含义 |
|---|
| daily | 轮替周期是天 |
| weekly | 轮替周期是周 |
| monthly | 轮替周期是月 |
| rotate digit | 保留的日志文件的个数。0 指没有备份 |
| compress | 旧的日志文件进行压缩 |
| create mode owner group | 建立新的日志文件同时指定新日志的权限、所有者、所属组 |
| mail address | 日志轮替时,发送内容到指定邮件地址 |
| missingok | 如果日志不存在,则忽略该日志的警告信息 |
| notifempty | 如果日志为空文件,则不进行日志轮替 |
| minsize size | 日志轮替的最小值 |
| size 大小 | 大于指定大小才轮替,而不是按照时间轮替 |
| dateext | 使用日期作为日志轮替文件的后缀 |
| sharedscripts | 在此关键字之后的脚本只执行一次 |
| prerotate/endscript | 在日志轮替之前执行脚本命令 |
| postrotate/endscript | 在日志轮替时候执行脚本命令 |
28. 内核升级
29. Linux 系统备份与恢复
30. webmin 和 bt 运维工具