文章目录
- 一. Linux目录结构
- 二. vi 和 vim
-
- 三. Linux基础命令
-
- 1. 关机&重启
- 2. 登录&注销
- 3. 用户管理
- 4. 运行级别
- 5. 帮助指令
- 6. 文件目录指令
- 7. 压缩&解压
- 8. 组管理
- 9. 权限管理
- 10. 定时任务调度
- 11. 磁盘分区&挂载
- 12. 网络配置
- 13. 进程管理
- 14. RPM和YUM
- 四. JAVA
-
- 1. JDK
- 2. tomcat
- 3. mysql
- 五. Shell编程
-
- 1. Shell执行
- 2. Shell变量
- 3. 设置环境变量
- 4. 位置参数变量
- 5. 预定义变量
- 6. 运算符
- 7. 流程控制
- 8. read读取控制台输入
- 9. 函数
- 六. 日志
-
- 1. 日志管理服务 rsyslogd
- 2. 日志轮替
- 3. 查看内存日志
- 4. 备份$恢复
- 七. Linux面试题
一. Linux目录结构
- /bin 存放经常使用的命令
- /sbin 存放系统管理员使用的系统管理程序
- /home 存放普通用户的主目录,一般目录名是自己账户名
- /root 系统管理员的主目录
- /lib 系统开机所需要的动态连接共享库,几乎所有应用程序都需要用到这些共享库
- /lost+found 一般为空,非法关机后会存放一些文件 (默认被隐藏 ls 可以看到)
- /etc 所有系统管理所需要的配置文件和子目录,如安装 mysql 的 my.conf
- /usr 用户的很多应用程序和文件都放在这,安装之后的文件
- /boot 存放启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
- /proc 虚拟的目录,是系统内存的映射,访问这个目录可以获取系统信息
- /srv 存放一些服务启动之后需要提取的数据
- /sys 是 linux2.6 内核的一个大的变化,该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs
- /temp 存放一些临时文件
- /dev 类似于 windows 的设备管理器,把所有的硬件用文件的形式存储
- /media linux 系统会自动识别一些输入设备并把这些设备挂载到这个目录下
- /mnt 为了让用户临时挂载别的文件系统,可以将外部的存储挂载到 /mnt/ 上,然后就可以查看了
- /opt 给主机额外安装软件(安装包)摆放的目录,约定放到这里
- /usr/local 一般通过编译源码方式存放安装好的软件
- /var 存放不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
- /selinux 一种安全子系统,能控制程序只能访问特定文件,有三种工作模式,可以自行设置
二. vi 和 vim
1. 三种方式
- 正常模式:(默认),只能上下左右,删除,复制粘贴
- 插入模式:按下 i, I, o, O, a, A, r, R 等任何一个字母之后会进入编辑模式
- 命令行模式:输入 :或者/ ,读取,存盘,替换,离开vim, 显示行号等操作
- :wq 保存退出
- :q 退出
- :q! 强制退出,不保存
从其他模式切换到一般模式时点击 esc
2.基础操作
- yy:拷贝当前行,拷贝当前行向下的5行:5yy
- dd:删除当前行
- /关键字:命令行下直接回车查找关键字,输入 n 就是查找下一个匹配项
- :set nu:设置文件的行号,:set nonu设置取消文件的行号
- 一般模式下,
- G:定位到文档最末行
- gg:定位到文档首行
- u:撤销
- 行号+G 或者 行号+gg:定位到行号的位置
三. Linux基础命令
1. 关机&重启
- shutdown -h now:立刻关机
- shutdown -h 1:1分钟后关机
- shutdown -r now:立刻重启
- halt:关机
- reboot:重启
- sync:把内存的数据同步到磁盘
! 注意在重启和关机之前首先运行 sync 命令
2. 登录&注销
- su - 用户名:切换用户,从权限高用户切换到权限低用户不需要密码,反之需要密码,需要返回到原来用户时使用 exit/logout指令
- logout:注销用户,在图形运行及比如无效
3. 用户管理
- useradd 用户名:添加一个用户,默认该用户的家目录在 /home(以后用该用户登录时会自动切换到这个目录),
- useradd -d 指定目录 新的用户名:添加一个用户在指定目录
- passwd 用户名:不写用户名等于修改当前登录用户的密码,指定修改密码
- userdel 用户名:删除用户,但保留家目录
- userdel -r 用户名:删除用户,不保留家目录
- id 用户名:查询用户信息
- who am i:显示第一次登录的用户
用户组:系统可以对有共性/权限的多个用户进行统一的管理
- groupadd 组名:新增组
- groupdel 组名:删除组
- useradd -g 用户组 用户名:增加用户时直接加上组,如果没指定用户组,会默认创建一个和用户名同名的组,并把该用户放到该组
- usermod -g 用户组 用户名:修改用户的组
用户和组相关文件
- /etc/passwd 文件:用户的配置信息,记录用户的各种信息
- 每行的含义:用户名:口令:用户标识号:组标识号:注释行描述:主目录:登录Shell
- /etc/shadow 文件:口令的配置文件
- 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- /etc/group 文件:组的配置文件,记录 Linux 包含的组的信息
使用 vim 文件名可以查看文件信息
4. 运行级别
0:关机
1:单用户(找回丢失密码)
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用3, 5,也可以指定默认运行级别
- init 运行级别:切换不同的运行级别
- systemctl get-default:查询当前运行级别
- systemctl set-default TARGET.target:设置运行级别,CentOS7之后,在 /etc/inittab文件中进行了简化,multi-user.target:analogous to runlevel 3,graphical.target:analogous torunlevel 5,
5. 帮助指令
- man [命令或配置文件]:获得帮助信息
- help 命令:获得 shell 内置命令的帮助信息
linux 下,隐藏文件是以 . 开头的
6. 文件目录指令
-
pwd:显示当前工作目录的绝对路径
-
ls [选项] [目录或文件]:常用选项,-a:显示当前目录所有文件和目录包括隐藏,-l:以列表方式显示信息
-
cd [参数]:可以定位到绝对路径和相对路径,~ 表示回到自己家目录,root 会到 /root,tom 会到 /home/tom,… 表示回到当前目录的上一级目录
-
mkdir [选项] 要创建的目录:创建目录,选项 -p:创建多级目录
-
rmdir [选项] 要删除的目录:删除空目录,如果要删除非空目录,需要选项 -rf
-
touch 文件名称:创建一个空文件
-
cp [选项] source dest:把 source 拷贝到 dest,选项 -r 表示递归复制整个文件夹,\cp 表示强制覆盖不提示
-
rm [选项] 要删除的文件或目录:移除文件或目录,选项 -r:递归删除整个文件夹,-f:强制删除不提示
-
mv oldNameFile new NameFile:重命名文件,同级目录
-
mv /temp/movefile /targetFolder:移动文件
-
cat [选项] 要查看的文件:查看文件内容,选项 -n:显示行号,只能浏览文件不能修改,为了浏览方便一般加上管道命令 | more(把前面得到的结果交给下一个指令)
-
more 要查看的文件:按页显示文本文件的内容,操作:
- 空格:下一页
- Enter:向下一行
- q:立刻离开 more,不再显示文件内容
- Ctrl+F:向下滚动一屏
- Ctrl+B:返回上一屏
- =:输入当前行的行号
- :f:输出文件名和当前行的行号
-
less 要查看的文件:和 more 类似,但支持各种显示终端,根据显示的需要加载内容,显示大型文件时效率高,操作:
- 空格:向下翻动一页
- [pagedown]:向下翻动一页
- [pageup]:向上翻动一页
- /字串:向下搜寻[字串],n:向下查找,N:向上查找
- ?字串:向上搜寻[字串],n:向上查找,N:向下查找
- q:离开 less
-
echo [选项] [输出内容]:输出内容到控制台
-
head 文件:查看文件头10行内容
-
head -n 5 文件:查看文件头5行内容
-
tail 文件:查看文件尾10行内容
-
tail -n 5 文件:查看文件尾5行内容
-
tail -f 文件:实时追踪该文档的所有更新,Ctrl+C退出
-
> 输出重定向和 >> 追加:后面如果文件不存在会自动创建
- ls -l >文件:列表的内容写入文件(覆盖写)
- ls -al >>文件:列表的内容追加到文件的末尾
- cat 文件1 > 文件2:将文件1内容覆盖到文件2
- echo “内容” >> 文件:将内容追加到文件尾
软链接也称为符号链接,类似于 windows 中的快捷方式,主要存放了链接其他文件的路径
- ln -s[原文件或目录] [软链接名]:给原文件创建一个软链接
- history [指令数]:查看[指令数]已经执行过的历史命令,也可以执行历史命令
- !5:执行history中的编号为5的指令
- date:显示当前时间
- date +%Y:显示当前年份
- date +%m:显示当前月份
- date +%d:显示当前是哪一天
- date “+%Y-%m-%d %H:%M:%S”:显示年月日时分秒
- date -s:字符串时间,可以设置时间
- cal [选项]:不加选项,显示本月日历
- find [搜索范围] [选项]:从指定目录向下递归遍历各个子目录,将满足条件的文件或目录显示在终端
- 选项:-name<查询方式>:按指定的文件名查找模式查找文件
- -user<用户名>:查找属于指定用户名所有文件
- -size<文件大小>:按照指定文件大小查找文件,+n大于,-n小于,n等于,单位 K, M, G
- locate 搜索文件:快速定位文件路径,利用事先建立的所有文件和路径的数据库快速查找到文件,无需遍历整个文件系统,为了保证查询结果的准确度,必须定期更新locate时刻,第一次运行前,必须使用updatedb创建locate数据库
- which 指令:查看某个指令在哪个目录下
- grep [选项] 查找内容 源文件:过滤查找,一般和管道 | 一起用,
- cat a.txt | grep “hello”:查找a.txt中有没有 “hello”,和 grep -n “hello” a.txt效果一样
- 选项:-n:显示匹配行及行号,-i:忽略字母大小写
7. 压缩&解压
- gzip 文件:压缩文件,只能将文件压缩为 *.gz 文件
- gunzip 文件.gz:解压缩文件
- zip [选项] XXX.zip 将要压缩的内容:压缩文件,选项 -r:递归压缩(压缩目录)
- zip -r myhome.zip /home/:压缩/home目录及其包含的文件和子文件夹压缩
- unzip [选项] XXX.zip:解压缩文件,选项 -d<目录>:指定解压后文件的存放目录,默认解压到当前目录
- tar [选项] XXX.tar.gz 打包的内容:打包指令,最后打包后的文件是 .tar.gz 的文件
- 选项:-c:产生 .tar 打包文件
- -v:显示详细信息
- -f:指定压缩后的文件名
- -z:打包同时压缩
- -x:解包 .tar 文件
- tar -zcvf pc.tar.gz /home/pig/txt /home/cat.txt:将pig.txt和cat.txt压缩为 pc.tar.gz,以逗号隔开
- tar -zxvf /home/myhome.tar.gz -C /opt/tmp2:将 myhome.tar.gz解压到 /opt/tmp2目录下
8. 组管理
- ls ahl:查看文件的所有者以及文件所在的组(创建该文件的用户)
- chown 用户名 文件名:修改文件所有者
- chgrp 组名 文件名:修改文件所在的组
9. 权限管理
- ls -l 这个命令显示 -rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
- 第一列中:0-9位:
- 0位是文件类型(d 目录, - 普通文件 , l 链接, c 字符设备文件,鼠标,键盘, b 块设备,如硬盘)
- 1-3位确定所有者拥有该文件的权限 User
- 4-6位确定所属组(同用户组)拥有该文件的权限 Group
- 7-9位确定其他用户拥有该文件的权限 Other
- 权限作用到文件 r:可读,w:可以修改,不代表可以删除,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除文件,x:可执行
- 权限作用到目录 r:可以读取,ls查看目录结构,w:可以修改,对目录内创建+删除+重命名目录,x:可进入该目录
- rwx可以用数字表示,r=4,w=2,x=1,rwx=7
- 第二列:
- 第三列:文件所有者
- 第四列:文件所属组
- 第五列:文件大小(字节),如果是文件夹,显示 4096 字节
- 第六列:最后修改日期
- 第七列:文件名
- chmod u=rwx,g=rx,o=x 文件/目录名:u:所有者,q:所有组,o:其他人,a:所有人(u,g,o的总和),第一种使用 +,-,= 变更权限,第二种使用数字变更权限,r=4,w=2,x=1
- chown [选项] newowner 文件/目录:修改文件所有者,-R:如果是目录,则是其下所有文件或目录递归生效
- chown [选项] newowner:newgroup 文件/目录:修改文件所有者和所在组,-R同上
- chgrp [选项] newgroup 文件/目录:修改所在组,-R同上
10. 定时任务调度
- crontab [选项]:定时执行特定命令,选项:
- -e:编辑 crontab 定时任务
- 先 crontab -e 进入编辑定时任务,再编辑
- 例如 */1 * * * * ls -l /etc/ > /tmp/to.txt:意思是每小时的每分钟执行 ls -l /etc/ > /tmp/to.txt
- 五个占位符*,第一个:一小时中的第几分钟 0-59
- 第二个:一天中第几小时 0-23
- 第三个:一个月中第几天 1-31
- 第四个:一年中第几个月 1-12
- 第五个:一周中星期几 0-7(0,7都是星期日)
- 特殊符号: *:代表任何时间,第一个 * 就代表一小时中每一分钟都执行一次
- ,:代表不连续的时间,如 0 8,12,16 * * *,代表在每天的 8:00,12:00,16:00执行一次
- -:代表连续的时间范围,如 0 5 * * 1-6 ,代表周一到周六的5:00执行命令
- */n:代表每隔多久执行一次,如 */10 * * * *,代表每隔10分钟执行一次命令
- -l:查询 crontab 任务
- -r:删除当前用户所有的 crontab 任务
- vim XXX.sh:编辑shell脚本,执行时要先拥有执行的权限,再 ./XXX.sh进行执行
- /1 * * * * /home/XXX.sh:每隔一分钟执行一次shell*脚本
- at [选项] [时间]:一次性定时计划任务,执行一次就不执行了,使用 at 命令时,一定要保证 atd 进程的启动, ps -ef | grep atd检测atd进程,atd每隔60秒检查有没有作业,命令输入完毕后再输入 Ctrl + D 表示命令结束,选项:
- -m:指定任务被完成后,会给用户发送邮件,即使没有标准输出
- -i(大写):atq 的别名
- -d:atrm的别名
- -v:显示任务将被执行的时间
- -c:打印任务的内容到标准输出
- -V:显示版本信息
- -q<队列>:使用指定队列
- -f<文件>:从指定文件读入任务而不是从标准输入读入
- -t<时间参数>:以时间参数形式提交要运行的任务
- 时间:hh:mm的形式,如果时间过去就第二天执行,如 04:00
- midnight(深夜),noon(中午),teatime(饮茶时间,一般下午4点)等
- 12小时制,时间后加 AM(上午),PM(下午)
- month day (月 日) 或 mm/dd/yy (年 月 日) 或 dd.mm.yy,如 04:00 2021-03-1
- now + count time-units,time-units为时间单位,minutes,hours,days,weeks
- today,tomorrow
- atq:查看系统中没有执行的工作任务
- atrm 任务号:删除任务号的任务
11. 磁盘分区&挂载
分区可以挂载到目录下,进入该目录就等于进入该分区
- lsblk 或 lsblk -f:查看所有设备挂载情况
linux硬盘分为 IDE 硬盘和 SCSI 硬盘,目前基本 SCSI硬盘
IDE硬盘驱动器标识 hdx~,hd 表示分区所在设备类型,x 为盘号(a基本盘,b基本从属盘,c辅助主盘,d辅助从属盘),~ 代表分区,前四个分区用1-4表示,是主分区或扩展分区,从5开始是逻辑分区,如 hda3表示第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示第二个IDE硬盘上的第二个主分区或扩展分区
SCSI硬盘标识 sdx~,sd 表示分区所在设备类型,其他用法和上面一样
- fdisk /dev/硬盘标识:分区命令
- m:显示命令列表,p:显示磁盘分区 同 fdisk -l,n:新增分区,d:删除分区,w:写入并退出,q:不保存退出
格式化分区之后该分区会被分配一个唯一的40位的UUID
- mkfs -f ext4 /dev/分区标识:格式化磁盘,ext4是分区类型
- mount 分区 目录:将分区挂载到目录上,用命令行挂载重启后会失效
- unmount 目录或分区:取消挂载,卸载时先cd到其他目录
永久挂载,通过修改 /etc/fstab实现,添加完成后执行 mount -a 立刻生效
- df -h:查询系统整体磁盘使用情况
- du -h:查询指定目录的磁盘使用情况,默认当前目录
- -s:指定目录占用大小汇总
- -h:带计量单位
- -a:含文件
- –max-depth=1:子目录深度
- -c:列出明细同时增加汇总值
- tree 目录:以树状显示目录结构,如果没有tree指令用 yum install tree安装
12. 网络配置
修改配置文件来指定ip
- vim /etc/sysconfig/network-scripts/ifcfg-ens33:进入配置文件
更改之后service network restart 或 reboot 刷新
在 /etc/hostname 文件配置修改主机名
设置 hosts 映射
- windows:C:\Windows\System32\drivers\etc 指定
- linux:/etc/hosts 指定
windows中使用 ipconfig /displaydns 查看本地DNS域名解析的缓存,ipconfig /flushdns 清理本地DNS域名解析缓存,浏览器访问一个域名时,先检查游览器缓存中有没有该域名解析的ip,没有就检查本地DNS域名解析的缓存,如果没有就检查本地hosts文件中有没有对应映射,如果没有就到域名服务DNS找
13. 进程管理
-
ps [选项]:查看目前系统中正在执行以及执行状况的进程
- -a:显示当前终端的所有进程信息
- -u:以用户的格式显示进程信息
- -x:显示后台进程运行的参数
- 显示的信息选项:PID:进程识别号
- TTY:终端机号
- TIME:此进程所消CPU时间
- CMD:正在执行的命令或进程名
- COMMAND:启动进程的命令和参数,太长会截断
- -ef:以全格式显示当前所有进程
- PPID:父进程ID
-
kill [选项] 进程号:通过进程号杀死进程
-
killall 进程名称:通过进程名称杀死进程,也支持通配符,在系统因为负载过大而变慢时很有用
-
/bin/systemctl start 服务名称:重启服务
-
pstree [选项]:更直观查看进程信息
服务本质就是进程,运行在后台,通常监听某个端口,等待其他程序的请求,又称为守护进程
- service 服务名 [start | stop |restart | reload | status]:
CentOS 7.0 之后,很多服务不再使用service,而是systemctl,service管理的服务在 /etc/init.d中,也可以使用 setup
开机流程:开机 -> BIOS -> /boot -> systemd进程1 -> 运行级别 -> 运行级别对应的服务
chkconfig可以给服务的各个运行级别设置自启动/关闭,指令管理服务在 /etc/init.d 查看。设置后需要 reboot
- chkconfig --list [| grep xxx]:
- chkconfig 服务名 --list:
- chkconfig --level 级别名 服务名 on/off:
- systemctl [start | stop |restart |status] 服务名:
- systemctl设置服务自启动:指令管理的服务在 /usr/lib/systemd/system 中查看
- systemctl list-unit-files [| grep 服务名]:查看服务开机启动状态
- systemctl enable 服务名:设置服务开机启动
- systemctl disable 服务名:关闭服务开机启动
- systemctl is-enabled 服务名:查看服务是否自启动
- 关闭或启动防火墙后立即生效(telent 测试 某个端口即可)
- 只是临时生效,重启系统后会回归
- 如果希望自启动或关闭永久生效,使用 systemclt [enable|disable] 服务名
打开防火墙同时需要打开端口
- firewall-cmd -permanent --add-port=端口号/协议:打开端口
- firewall-cmd -permanent -remove-port=端口号/协议:关闭端口
- firewall-cmd --reload:重新载入才能生效
- firewall-cmd --query-port=端口/协议:查询端口是否开放
- top [选项]:top和ps很相似,都用来显示正在执行的进程,但top在执行一段时间会更新正在运行的进程
- -d 秒数:指定每隔几秒刷新,默认3秒
- -i:不显示任何闲置或僵死进程
- -p:指定监控进程id监控某个进程的状态
- 交互操作说明:P:以cpu使用率排序,默认就是这个
- M:以内存的使用率排序
- N:以PID排序
- q:退出top
- 监控特定用户:
- 终止指定的进程:
- netstat [选项]:查看系统网络情况
- -an:按一定顺序排列输出
- -p:显示哪个进程在调用
14. RPM和YUM
rpm 用于互联网下载包的打包及安装工具,包含在某些Linux分发版中,生成具有 .RPM 扩展名的文件,是 RedHat Package Manager(RedHat软件包管理工具),类似windows 的 setup.exe
- rpm -qa:查询已安装的rpm列表
- 例 firefox-60.2.2-1.el7.centos.x8w6_64
- 版本号:60.2.2-1
- 适用操作系统:el7.centos.x8w6_64,表示 centos7.x的64位系统
- rpm -q 软件包名:查询软件是否安装
- rpm -qi 软件包名:查询软件包信息
- rpm -ql 软件包名:查询软件包中的文件
- rpm -qf 文件全路径名:查询文件所属的软件包
- rpm -e RPM包的名称:卸载rpm包
- rpm -e --nodeps RPM包的名称:强制删除rpm包
- rpm -ivh RPM包全路径名称:安装RPM包
- i=install 安装,v=verbose 提示,h=hash 进度条
Yum 是一个Shell前端软件包管理器,基于RPM包管理,能从指定的服务器自动下载RPM包并安装,可以自动处理依赖关系,并一次性安装所有依赖
- yum list:查询yum服务器是否有需要安装的软件
- yum install xxx:安装指定的yum包
四. JAVA
1. JDK
- vim /etc/profile:编辑环境变量
- source /etc/profile:刷新环境变量
2. tomcat
- ./startup.sh:进入解压目录的bin目录,启动tomcat
- firewall-cmd --permanent --add-port=8080/tcp:开放8080端口
3. mysql
CentOS7.6自带Mysql数据库是mariadb,会和mysql冲突,要先删除
- grep “password” /var/log/mysqld.log:查看mysql给用户设置的临时密码
五. Shell编程
Shell是一个命令行解释器,为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序
1. Shell执行
要求
- 脚本以 #!/bin/bash 开头
- 脚本需要有可执行权限
执行方式
- 方式一,输入脚本绝对路径或相对路径,需要执行权限
- 方式二,sh+脚本,不需要执行权限
2. Shell变量
Linux Shell变量分为系统变量(如$HOME)和用户自定义变量
基本语法
- 定义:变量名=值
- 撤销:unset 变量
- 声明静态变量:readonly 变量,不能unset
- 规则:
- 不能以数字开头
- 等号两侧不能有空格
- 变量名一般大写
- 将命令返回值赋给变量
- A=`date`反引号,运行里面的命令返回结果给A
- A=$(date)
3. 设置环境变量
- export 变量名=变量值:将shell变量输出为环境变量
- source 配置文件:让修改后的配置信息立即生效
- echo $变量名:查询环境变量值
配置文件在 /etc/profiles
多行注释 ;<
4. 位置参数变量
如果希望获取命令行的参数信息,就可以使用位置参数变量,如 ./mysql.sh 100 200,这个命令行可以在myshell脚本中获取到参数信息
基本语法
- $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要大括号包含如 ${10}
- $*:代表命令行中所有参数
- $@:和上一个一样,但把每个参数区分对待
- $#:代表命令行中所有参数的个数
5. 预定义变量
shell设计者预先定义好的变量,可以直接使用
- $$:当前进程号(PID)
- $!:后台运行的最后一个进程的进程号
- $?:最后一次执行命令的返回状态,如果是0,表示上一个命令正确执行,非0表示上一个命令执行不正确
6. 运算符
- $((运算式)) 或 $[运算式] 或 expr m + n
- expr m - n
- expr *,/,%:乘除取余
7. 流程控制
- [condition]:非空为true,可以使用 $?验证(0为true,大于1为false)
判断语句
- =:字符串比较
- 整数比较
- -lt 小于,-le 小于等于,-eq 等于,-gt 大于,-ge 大于等于,-ne 不等于
- 按照文件权限判断
- -r 读,-w 写,-x 执行
- 按照文件类型判断
- -f 文件存在且是一个常规文件
- -e 文件存在
- -d 文件存在是一个目录
if [ "ok" = "ok" ]
then
echo "equal"
fi
if [ 条件 ]
then
elif [ 条件 ]
then
fi
case $变量名 in
"值1")
;;
"值2")
;;
*)
echo "other..."
;;
esac
for语法1:
for 变量 in 值1 值2...
do
程序
done
例1:因为$*会把输入的参数当作一个整体,所以只会输出一句
输入 100 200 300 ,输出 num is 100 200 300
换成$@时会分别对待
for i in "$*"
do
echo "num is $1"
done
for语法2:
for((初始值;循环控制条件;变量变化))
fo
程序
done
while语法
while [ 条件 ]
do
程序
done
8. read读取控制台输入
- read(选项)(参数):
- 选项:-p:指定读取值的提示符,-t:指定读取值时等待的时间(秒)
- 参数:变量:指定读取值的变量名
read -p "请输入一个NUM1=" NUM1
9. 函数
系统函数:
- basename [pathname] [suffix]:
- basename [string] [suffix]:删除所有前缀包括最后的一个/字符,然后将字符串显示出来,suffix为后缀,如果指定了suffix,basename会将pathname或string中的suffix去掉,功能:返回完整路径最后/的部分,常用于获取文件名
- basename /home/aaa/test.txt:返回 test.txt
- basename /home/aaa/test.txt .txt:返回 test
- dirname /home/aaa/test.txt:返回/home/aaa
自定义函数:
六. 日志
日志文件保存在 /var/log/目录
1. 日志管理服务 rsyslogd
CentOS7.6的日志服务是 rsyslogd,CentOS6.x的日志服务是 syslogd
- ps aux | grep “rsyslog” | grep -v “grep”:查询linux的rsyslogd服务是否启动
- systemctl list-unit-files | grep rsyslog:查询rsyslogd服务的自启动状态
配置文件 /etc/rsyslog.conf
编辑文件格式为 *.* 存放日志文件
第一个*代表日志类型,第二个*代表日志级别
由rsyslogd记录的日志文件,格式包含
- 事件产生时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
2. 日志轮替
日志轮替是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存范围之后,就会进行删除
日志轮替文件命名
- centos7使用 logrotate进行日志轮替管理,要想改变日志轮替文件的名字,通过 /etc/logrotate.conf 配置 dateext参数
- 如果配置文件有 dateext 参数,那么日志会用日期作为日志文件的后缀,这种不会重复,就不用改名,只需要指定保存日志个数,删除多余日志文件
- 如果配置文件没有 dateext 参数,日志文件就需要改名,第一次进行日志轮替时,当前的 secure 日志会自动改名为 secure.1,然后新建 secure 日志,用来保存新的日志,第二次进行日志轮替时,secure.1会自动改名 secure.2,当前 secure 日志会自动改名 secure.1,然后新建 secure 日志用改保存新的日志
参数说明
3. 查看内存日志
4. 备份$恢复
Linux备份和恢复有两种方式
- 把需要的文件(分区)用 tar 打包,下次恢复时解压
- 使用 dump 和 restore
没有指令时安装 yum - y install 指令名
七. Linux面试题
cut不能分割 " "(空格)的,要用 awk