系统的学习了下,之前都是哪里不会百度哪里,常用的指令也就那么几个,觉得具体学一下还是很有必要,虽然没有linux管理员学习那么深,但是作为开发人员我觉得还算够用。

linux学习笔记

linux作为一个操作系统内核,市面上有很多他的发行版本,如RedHat、CenOs、Ubuntu等,下面练习环境为centos

1. 常识篇

1.1 linux各目录作用

  • /bin 可执行命令的文件位置 类似于win下的system32目录
  • /sbin 超级管理员的可执行命令目录
  • /lib 系统函数库,类似win存dll的位置
  • /etc 配置文件存放目录
  • /home 各账号默认目录
  • /root root账号默认目录
  • /opt 应用安装包存放位置
  • /usr 应用安装位置,类似win默认的Program Files
  • /var 变化的文件存放位置,经常存日志啥的
  • /tmp 临时文件存放位置
  • /mnt 默认挂载目录,共享文件夹,镜像
  • /media 挂载光盘、u盘啥的
  • /dev 系统硬件管理区
  • /proc 虚拟目录,系统内存映射,系统信息,别动
  • /boot bios系统存放位置,别动
  • /lost+fount 系统异常后,异常文件存储 别动
  • /srv 系统相关 别动
  • /sys 系统相关 别动

1.2 vim使用及常用其快捷键

vim分三个模式,底线命令模式,命令模式,输入模式

  • 底线命令行模式 输入ESC 后,再输入冒号,切换到底线命令行模式

    • set nu 显示文本行号
    • set nonu 关闭文本行号
    • /关键字 搜索关键字,回车执行搜索,n查找下一处 N查找上一处
    • wq! w 写入 q保存 !强制 保存并强制退出
  • 命令模式 默认vim进入的就是正常模式,其他模式下ESC退回命令模式

    • dd 删除一行 , 4dd 就是删除4行
    • yy 复制一行,5yy 就是复制5行,p进行粘贴
    • i 当前光标开始插入,进入输入模式
    • o 换行插入,进入输入模式
    • gg 回到文档首行
    • G 拉倒文档尾部
    • x 删除光标所在字符
    • u 撤销操作
  • 输入模式

image.png

1.3 linux启动及停止命令

  • shutdown -h now 立刻关机 h代表 halt
  • shutdown -h 1 一分钟后关机,并通知其他用户
  • shutdown 默认执行 shutdown -h 1
  • halt 就是调用shutdown -h
  • sync 存储数据存到磁盘 关机重启前可执行
  • reboot 立即重启

具体关机命令之间的关系和不同,可参考网上其他资料

1.4 linux登录及注销命令

  • su - 用户 切换到某用户下
  • logout 注销用户(套娃式往上一层退,比如当前登录zhangsan, su - root后,执行logout会回到zhangsan,在执行logout就会退出系统) 图形化操作系统界面中调用的终端用此命令无效
  • exit 图形化操作系统推出终端页面,远程登录效果和logout一样

1.5 用户管理

  • useradd lisi 添加用户lisi,同时立即在/home 下生成lisi伴生的目录,也是lisi登录后的默认目录,默认也会生成同名的伴生角色组(group)
  • useradd -d /home/test wangwu 创建用户同时,更改伴生目录名称
  • passwd lisi 给李四设置新密码, 后面不跟用户就是改当前登录用户的密码
  • userdel lisi 删掉用户,保留伴生目录
  • userdel -r lisi 此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
  • id lisi 查看李四账号的信息
  • whoami/who am i 当前登录的用户
  • groupadd china 创建组(角色)
  • groupdel china 删除组(角色)
  • useradd -g china lilei 创建新用户lilei 到角色组china中
  • usermod -g Japan lilei 更改lilei的用户组
  • usermod -d /home/magua lilei 更改默认home位置
  • /etc/passwd 存放用户信息的配置文件
  • /etc/shadow 存放口令的配置文件
  • /etc/group 角色组的配置文件

1.6 文件所有者

正常文件有文件所有者、文件所在组、其他组的概念,正常通过ll 命令就能看的到文件的权限归属等

  • 文件所有者 哪个用户创建的 默认就是文件所有者, 可以通过 chown [用户] [文件] 进行转让 (change owner)
  • 文件所在组 默认创建文件的那个用户所在的组, 可以通过 chgrp [组名] [文件] 进行转让 (change group)
  • 其他组 非文件所在组的其他所有组

1.7 文件权限

通过ll命令或是ls -lh可以看到文件的对应所有者及权限

#文件权限  文件个数  文件所有者  文件所在组  文件大小  最后一次修改日期  文件名
-rw-r--r-- 1 root root    0 6月   8 09:41 hello.txt

文件权限 10个字符 -rw-r--r--

  • 第0位 文件类型符号
    • '-' 一般文件
    • l 软连接
    • b 块设备,硬盘啥的
    • c 字符设备文件 鼠标键盘啥的
    • d 目录
  • 第1-3位 文件所有者权限
  • 第4-6位 文件所在组权限
  • 第7-9位 其他组权限
  • r read 只读权限 r=4 ,如果目录没有r 权限, 则ls 命令在此目录不生效
  • w write 文件修改权限|目录修改权限,目录有w权限,则代表目录中文件可以删除,跟目录中文件权限无关
  • x 文件执行权限|目录进入权限 x=1 , 目录的x权限代表用户是否可以进入目录中

文件权限修改命令

chmod change mode 修改权限 u 所有者 g 所在组 o 其他组 a 所有人

  • chmod u=rwx,g=rx,o=r hello.txt 更改文件权限,数组表示相当于 754
  • chmod u-x,g+w hello.txt 所有者去除执行权限,所在组增加写权限
  • chmod a-x hello.txt 所有用户去除执行权限
  • chmod 754 hello.txt 三个数字代表三组,每个数字为rwx代表数字相加之和

控制文件属性,禁止修改、删除等

  • chattr chattr [-RV][-v<版本编号>][+/-/=<属性>] [文件目录文件名]
    • a:让文件或目录仅供附加用途。
    • b:不更新文件或目录的最后存取时间。
    • c:将文件或目录压缩后存放。
    • d:将文件或目录排除在倾倒操作之外。
    • i:不得任意更动文件或目录。 chattr +i /etc/passwd 禁止改动文件 -i 解锁
    • s:保密性删除文件或目录。
    • S:即时更新文件或目录。
    • u:预防意外删除。
    • -R 递归处理,将指定目录下的所有文件及子目录一并处理。
    • -v<版本编号> 设置文件或目录版本。
    • -V 显示指令执行过程。
    • +<属性> 开启文件或目录的该项属性。
    • -<属性> 关闭文件或目录的该项属性。
    • =<属性> 指定文件或目录的该项属性。

1.8 linux运行级别

  • 0 关机
  • 1 单用户(找回密码)
  • 2 多用户没有网
  • 3 多用户有网 常用
  • 4 保留
  • 5 图形化 常用
  • 6 重启
  • init 各级别之间切换

1.9 帮助命令

  • man ls 展示ls命令的详细说明文档
  • help cd 获得cd命令的帮助文档, help是获取shell内置命令的帮助,man则可以获取后安装软件的一些命令

1.10 文件目录指令

  • pwd 展示当前位置绝对路径
  • ls 显示当前目录所有文件和目录
  • cd [目录名] 目录切换
  • mkdir [目录名] 创建目录 -p 创建多级目录
  • rmdir [目录名] 仅能删除空目录
  • touch [文件名] 创建一个空文件
  • cp [原路径地址] [目的路径地址] 拷贝 -r 递归;强制不提示覆盖 \cp
  • rm [文件名] 删除文件或目录 -r 递归(recursion) -f 强制不提示(force)
  • mv [old] [new] 剪切或重命名
  • cat [文件名] 查看文件内容 -n 显示行号
  • awk AWK 是一种处理文本文件的语言,是一个强大的文本分析工具 awk '{print $1,$4}' log.txt
  • cut 文本切割
    • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
    • -c :以字符为单位进行分割。
    • -d :自定义分隔符,默认为制表符。
    • -f :与-d一起使用,指定显示哪个区域。
    • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的 范围之内,该字符将被写出;否则,该字符将被排除
#按字节分割  取第三个字节  显示o
who | cut -b 3
#http://10.129.2.1/index.html    以/ 分割显示第三段  IP部分
cat 1.txt | cut -d / -f 3
  • more [文件名] 分页查看文件 可以和cat组合使用 cat --n [文件名] | more
  • uniq 检查及删除文本文件中连续重复出现的行列,一般与 sort 命令结合使用。
    • -c或--count 在每列旁边显示该行重复出现的次数。
    • -d或--repeated 仅显示重复出现的行列。
    • -u或--unique 仅显示出一次的行列。
  • sort 排序
    • -b 忽略每行前面开始出的空格字符。
    • -c 检查文件是否已经按照顺序排序。
    • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
    • -f 排序时,将小写字母视为大写字母。
    • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
    • -m 将几个排序好的文件进行合并。
    • -M 将前面3个字母依照月份的缩写进行排序。
    • -n 依照数值的大小排序。
    • -u 意味着是唯一的(unique),输出的结果是去完重了的。
    • -o<输出文件> 将排序后的结果存入指定的文件。
    • -r 以相反的顺序来排序。
    • -t<分隔字符> 指定排序时所用的栏位分隔字符。
    • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • less [文件名] 分页查看文件,相当于more plus++ ,大文件懒加载,效率高;pageup down 翻页;/n N 查找
  • echo 输出字符串或环境变量到控制台;
  • head -n 6 [文件名] 查看某文件前6行, 默认 head [文件名]是 -n 10 显示前10行
  • tail -n 8 [文件名] 查看文件尾多少行,默认10行;-f 动态查看
  • '>' 输出重定向, 覆盖写 如 echo "hello" > a.txt 文件不存在则创建;可用于保存日志,复制文件,清空文件等
  • '>>' 追加写入 如 echo "world" >> a.txt 文件不存在则创建
  • ln -s [源文件、目录] [链接名] 创建软连接或符号链接,删除和正常文件删除一样
  • history 查看执行过得历史命令;history 10 最近10条; !387 重新执行一下 编号为387的命令

1.11 时间日期指令

  • date 显示当前日期
    • date “+%Y-%m-%d %H:%M:%S” 2021-06-01 15:54:01
    • date -s "2021-06-01 15:54:01" 改时间
  • cal 显示当月日历
    • cal 2020 显示2020年全月日历
    • cal 6 2020 显示2020年6月

1.12 查找指令

  • find path -option [ -print ] [ -exec -ok command ] {} ; 递归查找指定目录下的文件和目录 后选跟执行命令

    •  find /opt -name  *.txt  -exec -lh {} \;  查找opt下 所有后缀为txt的文件,并展开信息
      
    •  find /opt -size  +200M    查找opt下超过200M的文件 +大于 -小于  不写 等于;(单位c/k 字节 M G  不写单位默认块 1块=521k)
      
    •  find /opt -user root   查找opt下所有属于root的文件  文件多 可以配合 | more  分页查看
      
    • find . -mtime +7 查找当前目录改动时间7天以前的文件 +n -n

    • find . -cmin -9 查找当前目录9分钟以内创建的文件 +n -n

    • find . -type b/d/c/p/l/f 根据类型查找文件 (设备、目录、字符设备、管道、符号链接、普通文件)

    • find . -empty 空文件

    • find . -perm 755 查看权限为755的文件

  •  locate [文件名]   基于文件数据库搜索文件所在路径,搜索前要更新数据库updatedb,要不然数据不准
    
  •  which [命令]  查看命令所在位置
    
  •  grep    是一种使用正则表达式的多用途文本搜索工具(global search regular expression(RE) and print out the line)
    
     -      grep -n "yes" /home/hello.txt     或者  cat /home/hello/txt | grep "yes"     找到含yes的行并显示行号
     -      grep -v   反向匹配
    

1.13 压缩与解压

  • gzip [文件名] 压缩文件,仅支持压缩文件,夹不支持 ,压缩后缀为.gz 源文件消失

  • gunzip [*.gz] 解压文件

  • zip [压缩后文件名] [压缩文件或目录]

  • unzip -d [解压后目录] [*.zip]

  • tar -option [压缩后文件名.tar.gz] [压缩文件或目录] 打包或是解压 同一个指令;tar -zxvf xxx.tar.gz -C /zzz/bbs

    • -c或--create 建立新的备份文件

    • -v或--verbose 显示指令执行过程。

    • -z或--gzip或--ungzip 通过gzip指令处理备份文件

    • -f <备份文件>或--file <备份文件> 指定备份文件

    • -x或--extract或--get 从备份文件中还原文件。

    • tar -xzvf filename.tar 解压

    • tart -czvf filename.tar dirname 打包压缩

2. 高阶篇

2.1 crond 周期性任务调度

linux 后台存在一个crond的任务,监听crontab文件,我们可以在crontab文件中编写脚本,定时执行周期性任务

  • crontab
    • -l 展示任务文件中的所有内容
    • -e 编辑当前用户的定时任务文件
    • -r 删除当前用户所有定时任务
#每分钟执行一次 
*/1 * * * * ll /etc/ > /tmp/test.txt

crontab 定时任务占位符说明

位置 含义 范围
第1位* 一小时中的第几分 0-59
第2位* 一天中的第几小时 0-23
第3位* 一月中的第几天 1-31
第4位* 一年中的第几月 1-12
第5位* 一周的星期几 0-7(0和7都是星期日)

crontab 特殊符号说明

符号 含义
* 如第1个*,代表每小时每分钟都执行
, 代表多个时间段,如 0 7,9,15 * * * 就是每天 的7 9 15点都执行
- 代表连续时间段,如 0 7-9 * * * 就是每天 的7 8 9点都执行
*/n 代表 每隔多长时间执行一次 */10 * * * * 代表每10分钟执行一次

2.2 atd 临时性任务调度

ps -ef|grep atd 先看看进程开没开,at命令 ,临时执行任务,执行一次后消失

  • at [日期] 回车后[命令] 两次ctrl D 结束编辑

    • at now+1min echo hello > /tmp/hello.txt 1分钟后执行

      at 20:00 2008-10-1  在具体时间执行

      at 17:00 tomorrow  明天下午五点执行

      at 6:00 pm + 3 days  在3天后下午6点执行

      at 23:00 < a.txt  将a.txt导入

    • at -l 或 atq 查询未执行的临时任务

    • at -r 或 at -d 或 atrm [任务号] 删除任务

2.3 日志管理

一、系统日志rsyslogd

linux管理日志的进程为rsyslogd,进程配置文件为/etc/rsyslog.conf,可从配置文件看出系统日志基本都在/var/log下


# 加载其他配置文件
$IncludeConfig /etc/rsyslog.d/*.conf
#格式为  *.*   日志位置
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
#第2星号为空,不记录日志
local7.*                                                /var/log/boot.log

第1个星号代表日志类型

日志类型 日志内容
auth 用户认证时产生的日志
authpriv ssh、ftp等登录信息的验证信息
daemon 一些守护进程产生的日志
ftp FTP产生的日志
lpr 打印相关活动
mark 服务内部的信息,时间标识
news 网络新闻传输协议(nntp)产生的消息。
syslog 系统日志
security
uucp Unix-to-Unix Copy 两个unix之间的相关通信
console 针对系统控制台的消息。
cron 系统执行定时任务产生的日志。
kern 系统内核日志
local0~local7 自定义程序使用
mail 邮件日志
user 用户进程

第2个星号代表日志级别

日志等级 说明
7 emerg 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。
6 alert 需要立即修复的告警。
5 crit 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。
4 error/err 一般错误消息。
3 warning/warn 警告。
2 notice 不是错误,但是可能需要处理。
1 info 通用性消息,一般用来提供有用信息。
debug 调试程序产生的信息。
none 没有优先级,不记录任何日志消息。
配置文件中常见的表示符号
.          <-- 用来分隔服务和日志级别		mail.info
*          <-- 任何服务,或者任何级别		*.info	mail.*
=          <-- 有等号表示等于某一日志级别,没有等号表示大于或者等于某一级别 mail.=info     mail.info
!          <-- 排除操作,前面有相同服务的表达式,这个操作才有意义 代表从前面表达式所包含的内容中排除某些内容
;          <-- 用于分隔不同的  服务.日志级别 组合cron.=info;mail.info			/var/log/abc.log
,          <-- 用于分隔不同的服务cron,mail.=info
-          <-- 用于指定目标文件时,代表异步写入	-/var/log/maillog
二、日志轮替logrotate

简单理解就是日志备份切割,基本原理是crond定时任务发起,由/etc下cron.daily 、cron.weekly 这种每天或每周等定时任务调用/etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
	minsize 1M
    rotate 1
}
/opt/tomcat/apache-tomcat-8.5.40/logs/catalina.out{
    missingok
    daily
    copytruncate
    rotate 7
    notifempty
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

配置参数 说明
compress 通过gzip压缩转储以后的日志
nocompress 不压缩
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create *mode owner group* 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail *address* 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir *directory* 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabooext [+] list 让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)
missingok 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
三、内存日志 journalctl

日志管理工具journalctl是centos7上专有的日志管理工具,内存日志,重启后清空,配置文件 /etc/systemd/journald.conf,7专有不过多描述

2.4 磁盘管理

linux系统上磁盘、分区、目录的关系

磁盘(硬盘)-->多分区( 1-4 )-->分区挂载目录;分区是物理上的区分,目录是逻辑上的区分

磁盘类型:IDE和SCSI,SCSI比IDE的贵也好,常用的基本都是SCSI,IDE驱动器标识为hdx~,SCSI为sdx~

字符 含义
hd 或sd 表明磁盘类型 hd代表IDE,sd代表SCSI
x a基本盘,b基本从属盘,c辅助主盘,d辅助从属盘
~ 分区标志,前4个分区就是1-4,比如sda1意思就是SCSI类型主盘的第一个分区
  • lsblk 查看磁盘挂载情况 (list block)
NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                            11:0    1 1024M  0 rom  
sda                             8:0    0  100G  0 disk 
|-sda1                          8:1    0  500M  0 part /boot
`-sda2                          8:2    0 99.5G  0 part 
  |-vg_redhat6-lv_root (dm-0) 253:0    0   50G  0 lvm  /
  |-vg_redhat6-lv_swap (dm-1) 253:1    0  3.9G  0 lvm  [SWAP]
  `-vg_redhat6-lv_home (dm-3) 253:3    0 45.6G  0 lvm  /home
sdb                             8:16   0  200G  0 disk 
`-sdb1                          8:17   0  200G  0 part 
  `-gp-usr (dm-2)             253:2    0  190G  0 lvm  /data
  • lsblk -f 查看文件系统格式 及 分区唯一UUID
NAME                          FSTYPE      LABEL UUID                                   MOUNTPOINT
sr0                                                                                    
sda                                                                                    
|-sda1                        ext4              189f0104-2257-4199-b189-233a40a044df   /boot
`-sda2                        LVM2_member       p4ydO0-cNyB-LqJ8-pzEv-IPLv-Wnqj-uT0hQ4 
  |-vg_redhat6-lv_root (dm-0) ext4              c07fbcfd-4e09-4bb5-b660-284fc0ff9915   /
  |-vg_redhat6-lv_swap (dm-1) swap              d520972c-6ce9-4ee4-8c2e-e750fefde3bc   [SWAP]
  `-vg_redhat6-lv_home (dm-3) ext4              74b9719c-d2ec-4f0d-98cd-ed5f618b6dc3   /home
sdb                                                                                    
`-sdb1                        LVM2_member       gdZcmo-I3d9-SLyp-XidS-W3Mc-WmRT-HJFkcb 
  `-gp-usr (dm-2)             ext4              68b9f2c3-8fe6-4b64-bc42-2e1e22f48d1f   /data
一、新增磁盘

这个是在虚拟机的可视化界面操作,新增盘需要重启机器lsblk才会显示,此处不演示

二、磁盘新增分区

​ 加入新增一块盘后,可以用lsblk 看到有盘但是没有分区,也没有挂载目录,假设盘名为 sdb,开始创建分区

#输入分区命令
fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
#m 列出命令提示信息
Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)
#从上面提示可以看出  n 是创建分区    输入n
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
#提示 e是扩展盘  p是主分区   二选一 选p
p
#选择磁盘要几个分区,下面出入的是分区1
Partition number (1-4): 1
Partition 1 is already defined.  Delete it before re-adding it.
#输入w配置生效并退出,q直接退出不保存设置
Command (m for help): q

命令操作后,lsblk 会看到sdb1的分区,此时有分区也暂时不能挂载,还需要格式化

三、分区格式化
#将分区sdb1 格式化 指定文件系统为ext4
mkfs -t ext4 /dev/sdb1

格式化后用lsblk可以看到,系统为分区分配了UUID,此时可以挂载目录了

四、目录挂载

命令行挂载,系统重启后挂载失效

#将分区sdb1 挂载到 根目录下的newdisk文件下
mount /dev/sdb1  /newdisk

#取消挂载
umount /dev/sdb1 
#或是
umount /newdisk
五、永久挂载

编辑/etc/fstab 文件,新增一行后,mount -a 生效,重启也行

vim /etc/fstab 

#可以写分区名也可以写UUID								 #挂载目录                文件格式   挂载参数      备份  检查
/dev/mapper/vg_redhat6-lv_root 						/                       ext4    defaults        1 1
UUID=189f0104-2257-4199-b189-233a40a044df 			/boot                   ext4    defaults        1 2
/dev/mapper/vg_redhat6-lv_home 						/home                   ext4    defaults        1 2
/dev/mapper/vg_redhat6-lv_swap 						swap                 	swap    defaults        0 0
tmpfs                   							/dev/shm                tmpfs   defaults        0 0
devpts                  							/dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   							/sys                    sysfs   defaults        0 0
proc                    							/proc                   proc    defaults        0 0
/dev/gp/usr											/data					ext4 	defaults		1 1
#/dev/sdb1											/newdisk                ext4    defaults		0 0

六、磁盘空间查看
  • df 检查文件系统的磁盘空间占用情况。常用df -hT
    • -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
    • -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
#df -hT
Filesystem                     Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_redhat6-lv_root ext4    50G   38G  8.8G  82% /
tmpfs                          tmpfs   16G   80K   16G   1% /dev/shm
/dev/sda1                      ext4   485M   39M  421M   9% /boot
/dev/mapper/vg_redhat6-lv_home ext4    45G  195M   43G   1% /home
/dev/mapper/gp-usr             ext4   188G  188M  178G   1% /data

  • du 检查具体目录空间占用情况 du -h --max-depth=1 /opt
    • --max-depth 目录深度
    • -h 以人们较易读的容量格式 (G/M) 显示
    • -s 显示目录总共占多少,不列出子目录
  • ls -Rl /opt |grep "^-" | wc -l 查询opt下所有普通文件个数,包括子目录下面的文件

2.4 进程管理

  • ps -aux 查看所有进程 aux是一个指令 不是三个,输出格式; 进程名称后面的字母d,代表deamon 守护进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • ps -ef |grep php 也是查所有进程,用grep过滤了一下
# ps -ef | grep php
root       794     1  0  2020 ?        00:00:52 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
www-data   951   794  0  2020 ?        00:24:15 php-fpm: pool www
www-data   953   794  0  2020 ?        00:24:14 php-fpm: pool www
www-data   954   794  0  2020 ?        00:24:29 php-fpm: pool www
  • kill [-9] pid 杀进程 其中9就是信号
 #信号列表   9 是SIGKILL    kill -9   也可以写成 kill -KILL
 kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
  • killall 进程名或父进程id 杀一片 ,比如nginx
  • pstree 树状查看进程 -u 显示进程用户 -p显示pid
  • top 动态查看进程、内存状态 默认3秒一刷, -d 可以改时间 top显示时候: P按cpu M按内存排序;u 查看指定用户进程 k 杀进程 -9
  • iotop io状态 命令如果没有需要安装

2.5 服务管理

  • service [服务名] start|stop|status|reload|restart 服务的开停、查看状态等,centos 7.0以后服务命令为systemctl

  • chkconfig centos 6版本 管理服务开机启停命令

    • chkconfig --list | [grep ] 查看所有服务 开闭情况
    • chkconfig [服务名] on/off 开机自启停服务 重启后生效
  • systemctl start|stop|status|reload|restart [服务名] 7版本启停

  • systemctl centos 7版本 管理服务开机启停命令

    • systemctl enable/disable [服务名]
    • systemctl list-unit-files | [grep] 开启自启动列表
    • systemctl is-enable [服务名] 查看是否开机自启动
  • setup 启动窗口查看linux 防火墙、网络配置、服务启动情况等,界面操作,可查看开机自启动的服务

  • netstat -anp | more 查看端口情况 netstat -tnulp 端口占用

2.6 防火墙管理

  • iptables centos 6版本防火墙名称

    CentOS 6.5  防火墙文件地址 /etc/sysconfig/iptables
    1.开放指定端口
    /sbin/iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT   //写入修改
    /etc/init.d/iptables save                                       //保存修改
    service iptables restart        //重启防火墙,修改生效
    2.关闭指定端口
    /sbin/iptables -I INPUT -p tcp --dport 端口号 -j DROP       //写入修改
    /etc/init.d/iptables save   //保存修改
    service iptables restart    //重启防火墙,修改生效
    3.查看端口状态
    /etc/init.d/iptables status
    
    
  • firewalld centos 7版本防火墙名称

    CentOS 7
    1.防火墙操作
    启动: systemctl start firewalld
    查看状态: systemctl status firewalld 
    停止: systemctl disable firewalld
    禁用: systemctl stop firewalld
    2.开放指定端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent   //开放端口
    firewall-cmd --reload         //重新载入,使其生效
    3.关闭指定端口
    firewall-cmd --zone=public --remove-port=80/tcp --permanent            //关闭端口
    firewall-cmd --reload       //重新载入,使其生效
    4.查看端口状态
    firewall-cmd --zone=public --query-port=80/tcp    //查看端口状态
    

2.7 rpm和yum

rpm(英文全拼:redhat package manager)

  • rpm -qa|grep xx 查询是否安装了某个rpm包

    • q 使用询问模式

    • -qi 显示套件的相关信息 rpm -qi firefox 查看firefox的软件详情

    • -i rpm -i xxx.rpm 安装 pm -ivh xxxxx.rpm 安装软件包 v提示 h进度条

    • -U 升级指定的套件档 rpm -U xxx.rpm 更新

    • -l 显示套件的文件列表 rpm -ql firefox 查看火狐 安装后文件都在哪

    • -f 查询拥有指定文件的套件 rpm -qf /etc/passwd 查看这个文件属于哪个安装包

    • -e 删除(erase)指定的套件 rpm -e --nodeps xxx.rpm

  • yum [options] [command] [package ...] 基于 RPM 包管理,可以处理级联依赖关系,类似maven 、npm

    • yum list app* 查找app开头的npm包
    • yum install xxx 安装

国内 yum 源

将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。

安装步骤

首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)

  • CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
  • CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
  • CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo

运行以下命令生成缓存

yum clean all
yum makecache

2.8 备份与恢复

备份dump

0-9个级别,0是全量备份,后续都是增量,只对分区级别有增量一说,单独文件或文件夹只能是全量备份,也就是0级别;

增量备份0-9是个递归方式,第一次是0,第二次1,第三次是2,然后是9,然后又是0,循环备份,配置crond可以做到无人值守备份。

#语法
dump [-cnu][-0123456789][-f <设备名称>][目录或文件系统]   或 dump [-wW]
 
#第一次全量备份 boot分区
dump -0ju -f /data/backup/20210622_0.bz   /boot
#第二次
dump -1ju -f /data/backup/20210623_1.bz   /boot
  • dump
    • -0123456789  备份的层级。
    • -f 备份后文件名
    • -j 调用bzlib 压缩
    • -u  备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期与时间等。
    • -W   展示/etc/dumpdates文件内容
恢复restore

根据备份文件恢复

restore -[C|i|r|t] -f [备份文件]
#还原文件, 如果有增量文件,按顺序 还原增量文件      恢复到当前目录
restore -r -f /data/backup/20210622_0.bz
  • restore
    • -C 对比备份文件和原文件的区别,显示差异
    • -i 交互模式还原,还原一个问一个
    • -r 还原内模式
    • -t 查看备份文件里有啥
    • -f 指定 备份文件

3.shell篇

1.简介

shell 是用户操作linux的桥梁,正常用户敲命令给linux内核,内核是不懂什么意思的,shell在这里做一个双向翻译的工作。

vim hello.sh
#文件开头执行 哪种shell ,中国多是bash shell
#!/bin/bash
#写自己的逻辑脚本
echo "hello world ~"

#执行方式  两种,1. 给文件的x可执行权限  2.不给x权限 ,用sh  hello.sh直接执行

2.变量

分为系统变量和自定义变量,系统变量如$HOME,$PATH等,编码大多用自定义变量

2.1 自定义变量

1.变量与值之间不能有空格 如A=100

2.变量名可以字母下划线数字混合,但不能以数字开头,尽量大写变量名

3.变量使用应该以$+变量名进行使用,以区分常规字符串

  1. 将命令的返回值赋给变量 ``包裹,或用$()包裹
#!/bin/bash
#常规变量写法
A=100
echo A=$A
echo "A=$A"
#取消变量
unset A
#静态变量  无法unset
readonly B=200
echo B=$B
#多行注释开始  独立一行
:<<!
#表达式写法
C=`date`
D=$(date)
#多行注释结束  独立一行
!
echo C=$C
echo D=$D
2.2 环境变量

在/etc/profile中编写 export 变量名=变量值 保存后,source /etc/profile 立即生效,echo 变量名查看

vim /etc/profile
export TOMCAT_HOME=/opt/tomcat
#立即生效
source /etc/profile
echo $TOMCAT_HOME
2.3 $变量用法

位置变量及预定义变量

  • $0:Shell 的命令本身
  • $1到9:表示 Shell 的第几个参数 10以后 ${10}
  • $#:传递到脚本的参数个数,${#变量名}获取变量长度
  • $$:脚本运行的当前进程 ID 号
  • $*:以一个单字符串显示所有向脚本传递的参数
  • $@: 以数组形式显示所有向脚本传递的参数
  • $? :显示最后命令的执行情况
  • $!:后台运行的最后一个进程的 ID 号 后台方式运行 命令后 跟 & 如 ./hello.sh &
  • $-:显示 Shell 使用的当前选项

3.表达式

三种写法,计算 (2+3)*4

#一、用 $(())包裹
A=$(((2+3)*4))
#二、用$[]
B=$[(2+3)*4]
#三、用 expr 2 + 3  方式,必须有空格,且乘法 为 \*,用``包裹
C=`expr 2 + 3`
D=`expr $C \* 4`

4.流程控制

4.1 if

if 条件用[ 条件判断式 ]来包裹表达式,判断式与[]两边必须有空格,不为空表示true ,反之false,常用在条件判断式符号如下

  • = 字符串比较是否相等

  • -lt 小于 less then

  • -le 小于等于 less then or equals

  • -gt 大于 greater then

  • -ge 大于等于 greater then or equals

  • -eq 等于 equals

  • -ne 不等于 not equals

  • -f 文件存在 且是个常规文件

  • -e 文件存在

  • -d 文件存在 且是个目录

#!/bin/bash
A=10
B=20
if [ $A == $B= ]
then
   echo "A 等于 B="
elif [ $A -gt $B= ]
then
   echo "A 大于 B="
elif [ $A -lt $B= ]
then
   echo "A 小于 B="
else
   echo "没有符合的条件"
fi
4.2 case

具体语法

#!/bin/bash
case $1 in
"1")
echo "周一";;
"2")
echo "周二";;
*)
echo "other";;
esac

4.3 for

两种用法

#!/bin/bash
for i in $@
do
  echo "num us $i"
done
echo "------------------------------------"
SUM=0
for((j=0;j<=100;j++))
do
  SUM=$[$SUM+$j]
done
echo "SUM===$SUM"

执行命令及结果

sh fordemo.sh 100 200 300

num us 100
num us 200
num us 300
------------------------------------
SUM===5050
4.4 while
#!/bin/bash
sum=0
i=0
while [ $i -le $1 ]
do
  sum=$[$sum+$i]
  i=$[$i+1]
done
echo "sum=$sum"

执行命令及结果

sh whiledemo.sh  100
sum=5050
4.5 read 控制台输入
#!/bin/bash
read -p "来个数" str1
echo "刚才输入的是 $str1"
#-t 等待秒数
read -t 5 -p "再来个数,五秒内给出" str2
echo "刚才输入的是 $str2"

5.函数

5.1系统函数
  • basename /opt/tomcat/bin/startup.sh .sh 返回的就是startup ,不加后缀 就是startup.sh
  • dirname /opt/tomcat/bin/startup.sh 返回/opt/tomcat/bin
5.2 自定义函数
#!/bin/bash
funWithReturn(){
    echo "函数"
}
funWithReturn

4.相关开发环境安装

1.jdk安装
#1. opt下新建 jdk目录
mkdir /opt/jdk
#2.文件上传到jdk目录下
#3.新建/user/local/java目录
mkdir /user/local/java
#4.解压jdk 文件 到/user/local/java下
tar -zxvf xxxx.tar.gz -C /user/local/java
#5.配置环境变量   /etc/profile   下新增
export JAVA_HOME=/usr/local/java/jdk1.8.0_201
export JRE_HOME=/usr/local/java/jdk1.8.0_201/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin/$JAVA_HOME:$PATH
#刷新 加载环境变量
source /etc/profile