挂载
新建挂载文件夹 mkdir /mnt/cdrom
挂载 mount /dev/sr0 /mnt/cdrom
RPM
安装
rpm -ivh 包全名 -i install 安装 -v verbose 显示详细信息 -h hash 显示进度 --nodeps 不检测依赖性
模块依赖查询www.rpmfind.net
升级
rpm -Uvh 包全名 -U upgrade 升级
查询
rpm -q 包名 -q query 查询 -a all 全部 -i information 查询软件信息 -p package 查询未安装包信息 -l list 列表 -f file 查询系统文件属于哪个软件包 -R require 查询软件包的依赖性
校验
rpm -V 已安装的包名 -V verify 校验指定文件
提取
rpm2cpio 包全名 | \cpio -idv .文件绝对路径
卸载
rpm -e 包名 -e erase 卸载 --nodeps 不检测依赖性
yum
setup 使用setup工具
vi /etc/sysconfig/network-script/ifcfg-eth0 修改ONBOOT="yes" 启动网卡
service network restart 重启网络服务
查询
yum list 查询所有可以包名
yum search 包名 搜索服务器上相关包
安装
yum -y install 包名
升级(高危)
yum -y update 包名
卸载(高危)
yum -y remove 包名
yum grouplist 列出所有可用软件组列表
yum groupinstall 软件组名 安装指定软件组
yum groupremove 软件组名 卸载指定软件组
RPM包安装位置
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc 基本的软件手册保存位置
/usr/share/man 帮助文件保存位置
源码包安装位置
/usr/local/软件包名/
Linux服务启动(源码包, RPM包)
绝对路径 start
REHL系列可以使用service 启动RPM包的服务
service httpd start
源码包的保存位置
/usr/local/src/
源码包安装步骤
./configure 软件配置和检查
./configure --prefix=/usr/local/node
make 编译
# make clean 如果报错可清空
make install 安装编译
卸载
rm -rf 安装目录
本机使用建议RPM包安装,网络使用建议源码包安装
用户配置文件
用户信息文件
/etc/passwd
影子文件
/etc/shadow
时间戳换算
时间戳 => 日期
>>> date -d "2019-10-04 16066 days"
日期 => 时间戳
>>> echo $(($(date --date="2019/10/04" +%s)/86400 + 1))
组信息文件
/etc/group
组密码文件
/etc/gshadow
用户家目录
普通用户,所有者所属组为该用户,权限为700(rwx------)
/home/用户名/
超级用户,所有者所属组为root,权限为500(r-x------)
/root/
用户的邮箱
/var/spool/mail/用户名/
用户模板目录
# 新建用户默认创建文件所在目录
/etc/skel/
用户管理命令
创建用户 useradd
# -u 指定UID
# -d 指定家目录
# -c 指定用户说明
# -g 指定初始组
# -G 指定附加组
# -s 指定登录shell,默认/bin/bash
useradd user1
用户默认值文件
/etc/default/useradd
/etc/login.defs
设置用户登录密码 passwd
# -S
passwd user1
查看密码状态
passwd -S 用户名
锁定用户和解锁用户
# 锁定用户
passwd -l 用户名
# 解锁用户
passwd -u 用户名
使用字符串作为用户的密码(密码明文未加密)
echo "123" | passwd -stdin 用户名
修改用户信息 usermod
# -c -G -L -U
usermod -c "说明信息" 用户名
修改用户密码状态 chage
# -l 列出用户详细密码状态
# -d 日期 => 修改密码最后一次更改日期
# -m 天数 => 两次密码修改间隔
# -M 天数 => 密码有效期
# -W 天数 => 密码过期前警告天数
# -I 天数 => 密码过期后宽限天数
# -E 日期 => 账号失效时间
删除用户 userdel
-r 删除家目录
userdel -r 用户名
手工删除
vi /etc/passwd && vi /etc/shadow && vi /etc/group && vi /etc/gshadow && rm -rf /var/spool/mail/用户名 && rm -rf /home/用户名/
查看用户 id
id 用户名
切换用户 su
- 连带用户环境变量一起切换(默认必选,否则因环境变量未切换报错)
-c 仅执行一次root权限能执行的命令,不切换用户身份
su - root -c "useradd user2"
用户组管理
添加用户组
# -g GID => 指定组id
groupadd 用户组名
修改用户组
# -g GID => 修改组id
# -n 新组名 => 修改组名
groupmod [选项] 用户组名
删除用户组
# 组中不允许有初始用户存在
groupdel 用户组名
把用户加入组或从组中删除
# -a 用户名 => 把用户加入组
# -d 用户名 => 把用户从组中删除
gpasswd [选项] 组名
权限管理
ACL权限
查看分区ACL权限是否开启
#先查看分区使用情况 df -h
dumpe2fs -h /dev/sda5
临时开启分区ACL权限
# 重新挂载根分区,加入acl权限
mount -o remount,acl /
永久开启分区ACL权限
vi /etc/fstab
# 重新挂载或重启系统,使修改生效
mount -o remount /
查看ACL命令
getfacl [选项] 文件名
getfacl /project/
设定ACL权限命令
# -m 设定ACL权限
# -x 删除指定的ACL权限
# -b 删除所有的ACL权限
# -d 设定默认ACL权限
# -k 删除默认ACL权限
# -R 递归设定ACl权限
setfacl [选项] 文件名
# 例子
# mkdir /project && useradd bimm && useradd cangls && groupadd tgroup && gpasswd -a bimm tgroup && gpasswd -a cangls tgroup && chown root:tgroup /project && chmod 770 /project/ && useradd st && passwd st
# setfacl -m u:st:rx /project/
给用户组设定ACL权限
groupadd tgproup2
setfacl -m g:rgroup2:rwx /project/
getfacl /project/
最大有效权限mask(影响所属组和ACL权限)
# 修改最大有效权限
setfacl -m m:rx /project/
递归ACL权限
setfacl -m u:st:rx -R /project/
默认ACL权限
setfacl -m d:u:st:rx -R /project/
文件特殊权限(权限S无效,s有效)
SetUID(危险) 4 可执行文件
# 例 cat
chmod 4755 文件名
chmod u+s 文件名
# 恢复
chmod 755 文件名
chmod u-s 文件名
SetGID(危险) 2
# 例 /usr/bin/locate
# 可执行文件
chmod 2755 文件名
chmod g+s 文件名
# 恢复
chmod 755 文件名
chmod g-s 文件名
Sticky BIT 1(root执行粘着位权限,目录有效,普通用户wx权限)
chmod 1755 目录名
chmod o+t 目录名
# 恢复
chmod 777 目录名
chmod o-t 目录名
文件系统属性chattr权限(对root也生效)
# i 文件 => 只可查看不允许修改删除文件
目录 => 只可修改目录下文件,不允许创建删除
# a 文件 => 只能增加数据,不能删除修改原文件内容
目录 => 只能建立修改文件,不能删除文件
chattr [+-=] [选项] 文件名
查看文件系统属性
# -a 显示所有文件目录
# -d 目录,仅列出本身属性,非子文件
lsattr [选项] 文件名
系统文件命令sudo权限
visudo
/etc/sudoers文件
sudo 命令绝对路径
文件系统管理
分区类型
主分区 最多只能分四个
扩展分区 只能有一个,算主分区一个,不能存储数据和格式化,必须再划分成逻辑分区才能使用
逻辑分区 逻辑分区是在扩展分区中划分的
IDE硬盘,Linux最多支持59个逻辑分区
SCSI硬盘Linux最多支持11个逻辑分区
| 分区 | 分区设备文件名 |
|---|
| 主分区1 | /dev/sda1 |
| 扩展分区 | /dev/sda2 |
| 逻辑分区1 | /dev/sda5 |
| 逻辑分区2 | /dev/sda6 |
| 逻辑分区3 | /dev/sda7 |
ext2: 是ext文件系统的升级版本,一个分区大小不能超过16TB,一个文件大小不能超过2TB ext3: 是ext2文件系统的升级版本,带日志功能 ext4: 是ext3文件系统的升级版本,分区1EB,单文件16TB(默认)
文件系统常用命令
文件系统查看命令df(包含进程和命令)
# -a 显示所有文件系统信息
# -h 高可读性查看容量
# -T 显示文件系统类型
# -m 以MB为单位显示容量
# -k 以KB为单位显示容量
df [选项] [挂载点]
统计目录或文件大小
# -a 显示每个子文件的磁盘占用量
# -h 高可读性查看容量
# -s 统计总占用量,不列出子目录和子文件的占用量
du [选项] [文件或目录名]
备注:网站每个月重启,游戏,下载每周重启
文件系统修复命令fsck
# -a 不用显示用户提示,自动修复文件系统
# -y 同-a,自动修复。部分文件只支持-y
fsck [选项] 分区设备文件名
显示磁盘状态命令dumpe2fs(针对ext,xfs不支持)
dumpe2fs 分区设备文件名
挂载命令
查询与自动挂载
# 查询文件系统中已经挂载的设备,-l会显示卷标名称
mount [-l]
# 依据配置文件/etc/fstab的内容,自动挂载
mount -a
挂载命令格式
# -t 文件系统 ext3,ext4,iso9660
# -L 挂载指定卷标的分区,而不是安装设备文件名挂载
# -o 指定挂载的额外选项
mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
| 参数 | 说明 |
|---|
| atime/noatime | 更新访问时间/不更新访问时间。访问分区文件时,是否更新文件的访问时间,默认为更新 |
| async/sync | 异步/同步,默认异步 |
| defaults | 定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项 |
| exec/noexec | 执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec允许 |
| remount | 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限 |
| rw/ro | 读写/只读,文件系统挂载时,是否具有读写权限,默认是rw |
| suid/nosuid | 具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有 |
| user/nouser | 允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区 |
| usrquota | 写入代表文件系统支持用户磁盘配额,默认不支持 |
| grpquota | 写入代表文件系统支持组磁盘配额,默认不支持 |
挂载光盘和U盘
挂载光盘
# 创建挂载点(空目录)
mkdir /mnt/cdrom
# 挂载光盘
mount -t iso9660 /dev/cdrom/ /mnt/cdrom/
或mount /dev/sr0 /mnt/cdrom/
卸载命令
umount 设备文件名或挂载点
umount /mnt/cdrom
挂载U盘
# 查看U盘设备文件名(查看分区)
fdisk -l
mount -t vfat /dev/sdb1 /mnt/usb/
备注:Linux不支持NTFS文件系统
支持NTFS文件系统
下载NTFS-3G 安装
mount -t ntfs-3g /dev/sdb1 /mnt/usb/
fdisk分区
查看硬盘
fdisk -l
使用fdisk命令分区
fdisk /dev/sdb
重新读取分区表信息
partprobe
格式化分区(扩展分区不能格式化)
mkfs -t ext4 /dev/sdb1
建立挂载点并挂载
mkdir /disk1
mount /dev/sdb1/ /disk1/
自动挂载修改文件/etc/fstab
vi /etc/fstab
Shell基础
输出命令echo
# -e 使用转义符号
echo [选项] [输出内容]
echo 'hello world!'
第一个脚本
vi hello.sh
#!/bin/bash
echo "hello world"
# 修改可执行权限
chmod 755 ./hello.sh
# 执行
./hello.sh
或者直接使用bash ./hello.sh
Windows格式转换为Linux格式
dos2unix
历史命令和命令不全
# -c 清空历史命令
# -w 把缓存中的历史命令写入历史命令保存文件(默认1000条,可以在环境变量配置文件/etc/profile中修改)
history [选项] [历史命令保存文件]
历史命令调用
上下箭头
!n n为第n条历史命令
!! 执行上条命令
!字符串 执行最后一条以该字符串开头的命令
命令与文件补全
tab键补全
命令别名和快捷键
命令别名
# 设置别名
alias 别名='原命令'
# 查看命令别名
alias
命令执行顺序(临时生效)
1. 绝对路径或相对路径
2. 别名
3. 执行bash的内部命令
4. $PATH环境变量定义的目录查找顺序找到的第一个命令
让别名永久生效
vi /root/.bashrc
删除别名
unalias 别名
| bash快捷键 | 作用 |
|---|
| ctrl+A | 把光标移到开头 |
| ctrl+E | 把光标移到结尾 |
| ctrl+C | 强制终止当前命令 |
| ctrl+L | 清屏 |
| ctrl+U | 删除或剪切光标之前的内容 |
| ctrl+K | 删除或剪切光标之后的内容 |
| ctrl+Y | 粘贴剪切内容 |
| ctrl+R | 在历史命令中搜索 |
| ctrl+D | 退出当前终端 |
| ctrl+Z | 暂停,并放入后台 |
| ctrl+S | 暂停屏幕输出 |
| ctrl+Q | 恢复屏幕输出 |
输入输出重定向
标准输入输出
| 设备 | 设备文件名 | 文件描述 | 类型 |
|---|
| 键盘 | /dev/stdin | 0 | 标准输入 |
| 显示器 | /dev/stdout | 1 | 标准输出 |
| 显示器 | /dev/stderr | 2 | 标准错误输出 |
输出重定向
# 正确输出输出到指定文件
命令 > 文件 覆盖
命令 >> 文件 追加
# 错误输出输出到指定文件
错误命令 2> 文件 覆盖,
错误命令 2>> 文件 追加
# 错误或正确
命令 &> 文件 覆盖
命令 &>> 文件 追加
# 错误正确分开
命令 >> 正确文件1 2>> 错误文件2
备注:垃圾箱 /dev/null
输入重定向(把文件作为命令的输入)
# -c 统计字节数
# -w 统计单词书(英文空格)
# -l 统计行数
wc [选项] [文件名]
多命令顺序执行与管道符
多命令顺序执行
| 多命令 | 格式 | 作用 |
|---|
| ; | 命令1 ; 命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
| && | 命令1 && 命令2 | 逻辑与,当命令1正确执行完,执行命令2 |
| || | 命令1 || 命令2 | 逻辑或,当命令1执行不正确,执行命令2 |
管道符
# 命令1的正确输出作为命令2的操作对象
命令1 | 命令2
netstat -a | grep --color=auto 80
# -i 忽略大小写
# -n 输出行号
# -v 反向查找
# --color=auto 搜索出的关键字用颜色显示
grep [选项] 搜索内容 文件名
通配符和其他特殊符号
通配符
| 通配符 | 作用 |
|---|
| ? | 匹配一个任意字符 |
| * | 匹配0个或任意多个字符,也就是可以匹配任何内容 |
| [] | 匹配中括号中任意一个字符 |
| [-] | 匹配中括号中-左右范围内容 |
| [^] | 逻辑非,匹配不是中括号内的一个字符 |
bash 中其他特殊符号
| 符号 | 作用 |
|---|
| '' | 单引号,内容只为字符串 |
| "" | 双引号,内容可以有变量 |
| `` | 反引号,内容为系统命令 |
| $() | 同上 |
| # | #开头为注释 |
| $ | 调用变量的值 |
| \ | 转义符 |
bash变量
什么是变量
变量是计算机内存的单元,其中存放的值可以改变。
变量设置规则
1. 变量名有字母数字和下划线组成,不能以数字开头
2. 在bash中,变量默认类型是字符串类型,其他类型得指定
3. 变量是用等号连接,等号两侧不能有空格
4. 变量的值如果有空格,需要用引号扩起来
5. 变量的值中可以加转义符
6. 如果需要增加变量的值,那么可以进行变量值得叠加。
7. 可以将命令的结果作为变量值赋予变量,需要使用反引号或$()包含命令
8. 环境变量名建议大写,便于区分
变量的分类
1. 用户自定义变量
2. 环境变量,这种变量中主要保存的是和系统操作环境相关的数据
3. 位置参数变量,这种变量主要是用来向脚本中传递参数或数据的,变量名不能自定义,变量作用是固定的
4. 预定义变量,是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
本地变量(用户自定义变量)
# 变量定义
name='hello world'
变量名=值
# 变量叠加
aa=123
aa="$aa"456
aa=${aa}789
# 变量调用
echo $name
# 变量查看
set
# 变量删除
unset name
环境变量
环境变量是什么
用户自定义变量只在当前的shell中生效,而环境变量会在当前和这个shell的所有子shell当中生效。如果把环境变量写入相应的配置文件,
那么这个环境变量就会在所有的shell中生效
设置环境变量
# 申明变量
export 变量名=变量值
# 查询环境变量
env
# 删除环境变量
unset 变量名
备注:进程树 pstree
常见的系统环境变量
PATH: 系统查找命令的路径
# PATH 变量叠加
PATH: "$PATH":/roo/sh
PS1: 定义系统提示符的变量
| 变量 | 作用 |
|---|
| \d | 显示日期,格式为星期 月 日 |
| \h | 显示简写主机名 |
| \t | 显示24小时制,HH:MM:SS |
| \T | 显示12小时制,HH:MM:SS |
| \A | 显示24小时制,HH:MM |
| \u | 显示当前用户名 |
| \w | 显示当前所在目录的完整名称 |
| \W | 显示当前所在目录的最后一个目录 |
| # | 执行的第几个命令 |
| $ | 提示符,root为#,普通用户为$ |
位置参数变量
| 位置参数变量 | 作用 |
|---|
| $n | $0表示命令本身,$1-$9表示第一到第九个参数,10以上用${10} |
| $* | 所有参数为一个整体 |
| $@ | 所有参数分别对待 |
| $# | 所有参数个数 |
预定义变量
| 预定义变量 | 作用 |
|---|
| $? | 最后一次命令执行返回状态,为0正确,非0不正确 |
| $$ | 当前进程的进程号(PID) |
| $! | 后台运行的最后一个进程的进程号(PID) |
接收键盘输入
# -p "提示信息" => 等待输入时的提示信息
# -t 秒数 => 指定等待时间
# -n 字符数 => 指定接收字符数
# -s 隐藏输入的数据,如密码
read [选项] [变量名]
数值运算和运算符
declare声明变量类型
# - 给变量设定类型属性
# + 取消变量的类型属性
# -i 将变量声明为整数型(integer)
# -x 将变量声明为环境变量
# -p 显示指定变量的被声明的类型
declare [+/-] [选项] 变量名
# expr或let数值运算工具
# expr +号两侧必须有空格
dd=$(expr $aa + $bb)
# $((运算式)) 或 $[运算式]
运算符
| 优先级 | 运算符 | 说明 |
|---|
| 13 | - , + | 单目负,单目正 |
| 12 | ! , ~ | 逻辑非,按位取反或补码 |
| 11 | * , / , % | 乘,除,取模 |
| 10 | + , - | 加,减 |
| 9 | << , >> | 按位左移,按位右移 |
| 8 | < = , > = , < , > | 比较运算 |
| 7 | == , != | 等于,不等于 |
| 6 | & | 按位与 |
| 5 | ^ | 按位异或 |
| 4 | | | 按位或 |
| 3 | && | 逻辑与 |
| 2 | || | 逻辑或 |
| 1 | = , += , -= , *= , /= , %= , &= , ^= , |= , <<= , >>= | 赋值,运算赋值 |
变量测试与内容替换
| 变量置换方式 | 变量y没有设置 | 变量y为空值 | 变量y设置值 |
|---|
| x=${y-新值} | x=新值 | x为空 | x=$y |
| x=${y:-新值} | x=新值 | x=新值 | x=$y |
| x=${y+新值} | x为空 | x=新值 | x=新值 |
| x=${y:+新值} | x为空 | x为空 | x=新值 |
| x=${y=新值} | x=新值,y=新值 | x为空 | x=$y,y值不变 |
| x=${y:=新值} | x=新值,y=新值 | x=新值,y=新值 | x=$y,y值不变 |
| x=${y?新值} | 新值输出到标准错误输出 | x为空 | x=$y |
| x=${y:?新值} | 新值输出到标准错误输出 | 新值输出到标准错误输出 | x=$y |
环境变量配置文件简介
source命令/.命令
source 配置文件或 . 配置文件
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境,比如PATH, HISTSIZE, PS1, HOSTNAME等默认环境
环境变量配置文件
#USER变量,LOGNAME变量,MALL变量,PATH变量,HOSTNAME变量,HISTSIZE变量,调用/etc/profile.d/*.sh
/etc/profile
/etc/profile.d/*.sh
# 调用~/.bashrc,在PATH后面加入 ":$HOME/bin"
~/.bash_profile
# 别名文件,调用/etc/bashrc
~/.bashrc
# nologin shell 定义PATH,umask,PS1变量
/etc/bashrc
# 注销时生效的环境变量配置文件
~/.bash_logout
# 历史命令配置文件
~/.bash_history
shell登录信息
# 本地登录
/etc/issue
# 远程登录
# 配置/etc/ssh/ssh_config #Banner /etc/issue.net,重启ssh
/etc/issue.net
# 登录后都生效
/etc/motd
(/etc/issue适用)
| 转义符 | 作用 |
|---|
| \d | 显示当前系统日期 |
| \s | 显示操作系统名称 |
| \l | 显示登录的终端号 |
| \m | 显示硬件体系结构 |
| \n | 显示主机名 |
| \o | 显示域名 |
| \r | 显示内核版本 |
| \t | 显示当前系统时间 |
| \u | 当前登录用户的序列号 |
shell编程
正则表达式
字符截取命令
cut 命令
# -f 列号 提取第几列
# -d 分隔符 按照指定分隔符分割列
# 分隔符多空格不适用
cut [选项] 文件名
printf 命令
# 格式化输出命令
# 输出类型
1. %ns 输出字符串,n为个数
2. %ni 输出整数,n为个数
3. %m.nf 输出浮点数,m为整数个数,n为小数个数
# 输出格式
1. \a 输出警告音
2. \b 输出退格键
3. \f 清除屏幕
4. \n 换行
5. \r 回车
6. \t 水平输出退格键
7. \v 垂直输出退格键
printf "输出类型输出格式" 输出内容
awk 命令
# 条件 关系表达式 BEGIN END
# 动作 格式化输出,流程控制语句
awk '条件1{动作1} 条件2{动作2} ...' 文件名
sed 命令
# -n 只把sed处理过的命令输出屏幕
# -e 允许对输入数据应用多条sed命令编辑
# -i 用sed修改结果直接修改读取数据的文件,不输出屏幕
## 动作
# a \ 追加一行或多行,\表示数据未完结
# c \ 行替换,用后面的字符串替换原始数据
# i \ 插入,行前插入一行或多行
# d 删除
# p 打印
# s 字符串替换
sed [选项] '[动作]' 文件名
字符处理命令
sort
# -b:忽略每行前面开始出的空格字符
# -c:检查文件是否已经按照顺序排序;
# -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
# -f:排序时,将小写字母视为大写字母;
# -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
# -m:将几个排序号的文件进行合并;
# -M:将前面3个字母依照月份的缩写进行排序;
# -n:依照数值的大小排序;
# -o:将排序后的结果存入制定的文件;
# -r:以相反的顺序来排序;
# -t:指定排序时所用的栏位分隔字符;
sort [选项] 文件
wc
# -c或--bytes或——chars:只显示Bytes数;
# -l或——lines:只显示列数;
# -w或——words:只显示字数。
wc [选项] 文件
条件判断
按照文件类型进行判断
| 测试选项 | 作用(判断该文件是否存在) |
|---|
| -b 文件 | 是否为块设备文件 |
| -c 文件 | 是否为字符设备文件 |
| -d 文件 | 是否为目录文件 |
| -e 文件 | 是否存在 |
| -f 文件 | 是否为普通文件 |
| -L 文件 | 是否为符号链接文件 |
| -p 文件 | 是否为管道文件 |
| -s 文件 | 是否为非空 |
| -S 文件 | 是否为套接字文件 |
按照文件权限进行判断
| 测试选项 | 作用(判断该文件是否存在) |
|---|
| -r 文件 | 是否拥有读权限 |
| -w 文件 | 是否拥有写权限 |
| -x 文件 | 是否拥有执行权限 |
| -u 文件 | 是否拥有SUID权限 |
| -g 文件 | 是否拥有SGID权限 |
| -k 文件 | 是否拥有SBit权限 |
两个文件之间进行比较
| 测试选项 | 作用 |
|---|
| 文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2的新 |
| 文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧 |
| 文件1 -ef 文件2 | 判断文件1和文件2的INode号一致,即同一文件,用于判断硬链接 |
两个整数之间比较
| 测试选项 | 作用 |
|---|
| 整数1 -eq 整数2 | 判断整数1是否和整数2相等 |
| 整数1 -ne 整数2 | 判断整数1是否和整数2不相等 |
| 整数1 -gt 整数2 | 判断整数1是否大于整数2 |
| 整数1 -lt 整数2 | 判断整数1是否小于整数2 |
| 整数1 -ge 整数2 | 判断整数1是否大于等于整数2相等 |
| 整数1 -le 整数2 | 判断整数1是否小于等于整数2相等 |
字符串的判断
| 测试选项 | 作用 |
|---|
| -z 字符串 | 判断字符串是否空 |
| -n 字符串 | 判断字符串是否非空 |
| 字符串1 == 字符串2 | 判断字符串1和字符串2是否相等 |
| 字符串1 != 字符串2 | 判断字符串1和字符串2是否不相等 |
多重条件判断
| 测试选项 | 作用 |
|---|
| 判断1 -a 判断2 | 逻辑与,判断1和判断2都成立,为真 |
| 判断1 -o 判断2 | 逻辑或,判断1和判断2有一个成立,为真 |
| ! 判断 | 逻辑非,原始判断取反 |
test -e 文件名 / [ -e 文件名 ]
# 判断上条命令正确执行与否
echo $?
流程控制
if语句
单分支if条件语句
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
双分支if条件语句
if [ 条件判断式 ]
then
条件成立执行
else
条件不成立执行
fi
多分支if条件语句
if [ 条件判断式1 ]
then
条件1成立执行
elif [ 条件判断式2 ]
条件2不成立执行
else
其他条件不成立执行
fi
case语句
case $变量名 in
"值1")
变量的值等于值1执行
;;
"值2")
变量的值等于值2执行
;;
*)
其他条件执行
;;
esac
for循环
for 变量 in 值1 值2 值3 ...
do
程序
done
# 语法二
for ((初始值;循环控制条件;变量变化))
do
程序
done
while循环与until循环
while [ 条件判断式 ]
do
程序
done
until [ 条件判断式 ]
do
程序
done
linux 服务管理
RPM包默认安装服务
# 查看RPM包服务自启动状态
chkconfig --list
独立的服务
| 文件目录 | 作用 |
|---|
| /etc/init.d/ | 启动脚本位置 |
| /etc/sysconfig/ | 初始化环境配置文件位置 |
| /etc/ | 配置文件位置 |
| /etc/xinetd.conf/ | xinetd配置文件 |
| /etc/xinet.d/ | 基于xinetd服务的启动脚本 |
| /var/lib/ | 服务产生的数据放在这里 |
| /var/log/ | 日志 |
独立服务的启动
/etc/init.d/独立服务名 start|stop|status|restart
service 独立服务名 start|stop|status|restart
独立服务的自启动
chkconfig [--level 运行级别][独立服务名][on|off]
修改/etc/rc.d/rc.local文件
使用ntsysv命令管理自启动
基于xinetd服务(extended internet daemon)
基于xinetd服务管理
安装xinetd与telnet(了解)
yum -y install xinetd
yum -y install telnet-server
netstat -tlun # 查看端口
源码包安装的服务
# 查看源码包服务自启动状态
安装绝对路径 start
# 查看服务安装位置,一般为/usr/local/
systemctl命令
| 任务 | 旧指令 | 新指令 |
|---|
| 使某服务自动启动 | chkconfig --level 3 httpd on | systemctl enable httpd.service |
| 使某服务不自动启动 | chkconfig --level 3 httpd off | systemctl disable httpd.service |
| 检查服务状态 | service httpd status | systemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active) |
| 显示所有已启动的服务 | chkconfig --list | systemctl list-units --type=service |
| 启动某服务 | service httpd start | systemctl start httpd.service |
| 停止某服务 | service httpd stop | systemctl stop httpd.service |
| 重启某服务 | service httpd restart | systemctl restart httpd.service |
Linux系统管理
进程管理
进程查看
进程是正在执行的一个程序或命令,
每个进程都是一个运行的实体,
都有自己的的地址空间,并占有一定的资源。
进程先停止,停不了再杀。
查看系统中所有进程
# 查看系统中所有进程,使用BSD操作系统格式
ps aux
# 查看系统所有进程,使用Linux标准命令格式
ps -le
| 标题 | 说明 |
|---|
| USER | 该进程的产生者 |
| PID | 进程的ID号 |
| %CPU | 进程占用CPU的资源比 |
| %MEM | 进程占用物理内存的百分比 |
| VSZ | 进程占用虚拟内存的大小 |
| RSS | 进程占用实际物理内存大小 |
| TTY | 进程运行的的终端,TTY[1-7]本地控制台终端,TTY[1-6]本地字符界面终端,TTY7本地图形界面终端。pts/0-256虚拟终端 |
| STAT | 进程状态,R:运行,S:睡眠,T:停止,s:包含子进程,+:位于后台 |
| START | 进程启动时间 |
| TIME | 进程占用CPU的运算时间 |
| COMMAND | 产生进程的命令名 |
查看系统健康状态
# -d 秒数 => 指定top更新秒数,默认3s
# ?或h => 显示交互模式的帮助
# P => 以CPU使用率排序,默认
# M => 以内存使用率排序
# N => 以PID排序
# q => 退出top
top [选项]
第一行信息为任务队列信息
| 内容 | 说明 |
|---|
| hh:mm:ss | 系统当前时间 |
| up X day, hh:mm | 系统的运行时间,本机已经运行时间 |
| X users | 当前等用户数 |
| load average | 系统在之前1分钟,5分钟,15分钟的平均负载。1 >,负载小,1 |
第二行为进程信息
| 内容 | 说明 |
|---|
| Tasks: X total | 系统中总进程数 |
| X running | 正在运行的进程数 |
| X sleeping | 睡眠的进程 |
| X stopped | 正在停止的进程 |
| X zombie | 僵尸进程,不为0,检查僵尸进程 |
第三行为CPU信息
| 内容 | 说明 |
|---|
| Cpu(s): %us | 用户模式占用CPU百分比 |
| %sy | 系统模式占用CPU百分比 |
| %ni | 改变过优先级的用户进程占用CPU百分比 |
| %id | 空闲CPU的CPU百分比 |
| %wa | 等待I/O进程的占用CPU百分比 |
| %hi | 硬中断请求服务占用的CPU百分比 |
| %si | 软中断请求服务占用的CPU百分比 |
| %st | st(steal time) 虚拟时间百分比。虚拟CPU等待实际CPU的时间百分比 |
第四行为物理内存信息
| 内容 | 说明 |
|---|
| Mem: Xk total | 物理内存的总量,单位KB |
| Xk used | 已经使用的物理内存数量 |
| Xk free | 空闲的物理内存数量 |
| Xk buffers | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息
| 内容 | 说明 |
|---|
| Swap: Xk total | 交换分区(虚拟内存)的总大小 |
| 0k used | 已经使用的交换分区的大小 |
| Xk free | 空闲的交换分区的大小 |
| Xk cached | 作为缓存的交换分区大小 |
查看进程树
# -p 显示进程的PID
# -u 显示进程的所属用户
pstree [选项]
终止进程
# 查看可用的进程信号
kill -l
kill -1 pid 重启进程
kill -9 pid 强制终止进程
kill -15 pid 正常结束进程,默认
# -i 交互式,询问是否杀死某个进程
# -I 忽略进程名的大小写
killall [选项][信号] 进程名
# -t 终端号 按照终端号踢出用户
pkill [选项][信号] 进程名
# 查询本机已登录用户
w
工作管理
进程放入后台
# 后台运行
命令 /etc &
# 后台暂停,挂起
top -> ctrl+z
查看后台的工作
# -l 显示工作的PID
# +,最近放入后台的工作;-,倒数第二放入后台的工作
jobs [-l]
恢复暂停的工作到前台
# %工作号 %可省略
fg %工作号
恢复暂停的工作到后台
# %工作号 %可省略
bg %工作号
系统资源查看
vmstat命令监控系统资源
vmstat [刷新延时 刷新次数]
dmesg开机时内核检测信息
dmesg
free命令查看内存使用状态
# -b 以字节单位显示
# -k 以KB为单位显示,默认
# -m 以MB为单位显示
# -g 以GB为单位显示
free [选项]
查看CPU信息
cat /proc/cpuinfo
uptime命令
# 显示系统启动时间和平均负载
uptime
查看系统与内核相关信息
# -a 查看系统所有相关信息
# -r 查看内核版本
# -s 查看内核名称
uname [选项]
判断当前系统的位数
file /bin/ls
查询当前Linux系统的发行版本
lsb_release -a
列出进程打开或使用的文件信息
# -c 字符串 => 列出字符串开头的进程打开的文件
# -u 用户名 => 列出某个用户进程打开的文件
# -p pid => 列出某个PID进程打开的文件
lsof [选项]
系统定时任务
crond服务管理与访问控制
# 重启crond服务
service crond restart
# 设置crond服务自启
chkconfig crond on
用户的crond设置
# -e 编辑crontab 定时任务
# -l 查询crontab任务
# -r 删除当前用户所有的crontab任务
crontab [选项]
# minute hour day Month week
* * * * * 执行的任务
| 特殊符号 | 含义 |
|---|
| * | 任何时间 |
| , | 不连续的时间 |
| - | 连续时间 |
| */n | 每隔n执行一次 |
日志管理
rsyslogd日志服务
# 确定服务是否启动
ps aux | grep rsyslogd
# 查看服务是否自启
chkconfig --list | grep rsyslogd
# 查看登录错误日志
lastb
日志等级
| 等级名称 | 说明 |
|---|
| debug | 一般的调试信息说明 |
| info | 基本信息的通知 |
| notice | 普通信息 |
| warning | 警告信息 |
| err | 错误信息,影响服务或系统运行 |
| crit | 临界状况信息 |
| alert | 警告状态信息,必须立即采取行动 |
| emerg | 疼痛等级信息,系统已经无法使用 |
日志轮替
logrotate配置文件
| 参数 | 说明 |
|---|
| daily | 日志轮替的周期为每天 |
| weekly | 日志轮替的周期为每周 |
| monthly | 日志轮替的周期为每月 |
| rotate 数字 | 保留日志文件的个数 |
| compress | 压缩旧日志 |
| create mode owner group | 建立新日志 |
| mail address | 将日志发邮件到指定地址 |
| missingok | 该日志不存在,忽略警告信息 |
| notifempty | 空日志不轮替 |
| minsize 大小 | 日志轮替最小值 |
| size 大小 | 只有大于指定大小才轮替 |
| dateext | 使用日期做日志轮替后缀 |
logrotate命令
# -v 显示日志轮替过程
# -f 强制进行日志轮替
logrotate [选项] 配置文件名
启动管理
运行级别
| 运行级别 | 含义 |
|---|
| 0 | 关机 |
| 1 | 单用户模式,用于系统修复 |
| 2 | 不含NFS服务,命令行模式 |
| 3 | 标准字符界面 |
| 4 | 系统保留 |
| 5 | 图形界面 |
| 6 | 重启 |
运行级别命令
# 查看运行级别
runlevel
# 改变运行级别
init 运行级别
系统默认运行级别
# 系统开机后直接进入运行级别
vim /etc/inittab
id:3:initdefault:
启动引导程序
grub中分区表示
| 硬盘 | 分区 | Linux中设备文件名 | Grub中设备文件名 |
|---|
| 第一块SCSI硬盘 | 第一个主分区 | /dev/sda1 | hd(0,0) |
| * | 第二个主分区 | /dev/sda2 | hd(0,1) |
| * | 扩展分区 | /dev/sda3 | hd(0,2) |
| * | 第一个逻辑分区 | /dev/sda5 | hd(0,4) |
| 第二块SCSI硬盘 | 第一个主分区 | /dev/sdb1 | hd(1,0) |
| * | 第二个主分区 | /dev/sdb2 | hd(1,1) |
| * | 扩展分区 | /dev/sdb3 | hd(1,2) |
| * | 第一个逻辑分区 | /dev/sdb5 | hd(1,4) |
备份与恢复
dump [选项] 备份后文件名 要备份文件名
# -level 0-9十个备份级别
# -f 文件名 指定备份完的文件名
# -u 备份成功时间记录文件/etc/dumpdates
# -v 显示备份过程输出信息
# -j 调用bzlib库压缩备份文件成.bz2文件
# -W 显示允许被dump的分区备份等级及备份时间
# 恢复
restore [模式选项] [选项]
# -C 比较备份与实际的变化
# -i 进入交互模式
# -t 查看模式
# -r 还原模式
# -f 指定备份文件名
restore -r -f 已备份文件名