linux常用命令
# Linux基础及文件
- Linux是一套免费使用和自由传播的类Unix操作系统
- 在服务器端领域和嵌入式领域有非常广泛的应用
# 2.版本
分为内核版本和发型版本
- kernel
- 各个厂商会制作自己的发行版本
- redhat
- CentOS
- ubuntu
- fedora
# 3. Linux与Windows的不同
- Linux严格区分大小写
- Linux中所有的内容以文件形式保存,包括硬件、用户和文件。
- Linux不靠扩展名区分文件类型,是靠权限来区分,但是有一些约定的扩展名,是给管理员看的
- 压缩包 .gz .bz2 .tar.bz2 .tgz
- 二进制文件 .rpm
- 网页文件 .html .php
- 脚本文件 .sh
- 配置文件 .conf
- Windows下的程序不能直接在Linux中安装和运行
- Linux更多使用字符界面
- 占用的系统资源更少
- 减少了出错和被攻击的可能性,会让系统更稳定
如何购买服务器
- 阿里云 ECS
- 亚马逊 AWS
- 百度云
# 4. 连接服务器
- git bash
- mac shell
- xshell4
- xftp4
# 5. 分区
磁盘分区是使用分区编辑器在磁盘上划分几个逻辑部分
磁盘一旦划分成多个分区,不同类的目录与文件可以存储进不同的分区内
# 6. 挂载点
- 为了让Linux系统中可以访问这些分区,需要把这些分区挂载到对应的目录上
- 在Linux中是把目录称为挂载点
- 把目录和分区链接在一起的过程成为挂载
- /为根目录,必须挂载到一个分区上,默认所有子目录都会写入这个分区
- 同一级目录下面的所有子目录可以有自己的独立存储空间
- 必须有的分区
- / 根分区
- swap分区(交换分区,虚拟内存,一般为内存的2倍,不要超过2G)
- 推荐分区
- /boot (启动分区,200M) 单独分区,避免分区写满造成系统无法启动
# linux常用命令
# 1. 目录
目录 | 用途 |
---|---|
/ | 根目录 |
/boot | 启动目录,启动相关文件 |
/dev | 设备文件 |
/etc | 配置文件 |
/home | 普通用户的家目录,可以操作 |
/lib | 系统库保存目录 |
/mnt | 移动设备挂载目录 |
/media | 光盘挂载目录 |
/misc | 磁带机挂载目录 |
/root | 超级用户的家目录,可以操作 |
/tmp | 临时目录,可以操作 |
/proc | 正在运行的内核信息映射, 主要输出进程信息、内存资源信息和磁盘分区信息等等 |
/sys | 硬件设备的驱动程序信息 |
/var | 变量 |
/bin | 普通的基本命令,如ls,chmod等,一般的用户也都可以使用 |
/sbin | 基本的系统命令,如shutdown,reboot,用于启动系统,修复系统,只有管理员才可以运行 |
/usr/bin | 是你在后期安装的一些软件的运行脚本 |
/usr/sbin | 放置一些用户安装的系统管理的必备程序 |
# 1.2 命令基本格式
# 1.2.1 命令提示符
[root@localhost ~]#
- root 当前登录用户
- localhost 主机名
- ~ 当前工作目录,默认是当前用户的家目录,root就是/root,普通用户是 /home/用户名
- 提示符 超级用户是 #,普通用户是$
# 1.2.2 命令格式
- 命令 [选项] [参数]
- 当有多个选项时,可以写在一起
- 一般参数有简化和完整写法两种 -a 与 --all等效
# 1.2.3 ls
- 查询目录中的内容
- ls [选项] [文件或者目录]
- 选项
- -a 显示所有文件,包括隐藏文件
- -l 显示详细信息
- -d 查看目录本身的属性而非子文件 ls /etc/
- -h 人性化的方式显示文件大小
- -i 显示inode,也就是i节点,每个节点都有ID号
- 默认当前目录下的文件列表
# 1.2.3.1 -l
显示详细信息
drwxr-xr-x . 1 root root 800 Sep 16 00:19 logs
drwxr-xr-x | . | 1 | root | root | 800 | Sep 16 00:19 | logs |
---|---|---|---|---|---|---|---|
文件类型和权限 | ACL权限 | 硬链接引用计数 | 所有者 | 所属组 | 文件大小 | 最后修改时间 | 文件名 |
# 1.2.3.2 文件类型和权限
-rw-r--r--
- 文件类型 - 文件、d 目录、l 软链接文件
- u(所有者)、g(所属组)、o(其他人)
- r(read) 读取、w(write) 写入、x(execute) 执行
# 1.3 文件处理命令
# 1.3.1 mkdir
- 建立目录 make directory
- mkdir -p [目录名]
- -p 递归创建
# 1.3.2 cd
- 切换所在目录 change directory
- cd [目录]
- ~ 家目录
- 家目录
- 上次目录
- . 当前目录
- .. 上级目录
- 相对路径是参照当前所在目录
- 绝对路径是从根目录开始
- 按TAB键可以补全命令和目录
# 1.3.3 pwd
- 显示当前目录 pwd
# 1.3.4 rmdir
- 删除目录 remove empty directory
- rmdir [目录名]
# 1.3.5 rm
- 删除文件或者目录 remove
- rm [文件或者目录]
- -r 删除目录
- -f 强制删除
- rm -rf 文件或者目录] 递归强制删除所有目录
# 1.3.6 cp
- copy 复制命令
- copy [源文件或者目录] [目标文件]
- -r 复制目录,默认是复制文件
- -p 连带文件属性复制
- -d 若源文件是链接文件,则复制连接属性
- -a 相当于 -rpd
# 1.3.7 mv
- 移动文件或者改名 move
- mv [源文件或者目录] [目标文件]
当第二个参数类型是文件时,mv命令完成文件重命名,它将所给的源文件或目录重命名为给定的目标文件名。
当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
# 将webdata 移动到/bin/usr/中
mv webdata /bin/usr/
# 将 /usr/lib/下所有的东西移到/zone/中。
mv /usr/lib/* /zone
# 是将lib下以txt结尾的所有文件移到/zone中。
mv /usr/lib/*.txt /zone
# 将文件temp.txt 修改名字为tempTest.txt
mv temp.txt tempTest.txt
2
3
4
5
6
7
8
9
10
11
12
13
[options]
主要参数(几个重要的参数)
-i
:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答”y”或”n”,这样可以避免误覆盖文件。
-f
:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。 - r
指示mv将参数中列出的全部目录和子目录均递归地移动。
# 1.3.8 ln
- 链接命令,生成链接文件 link
# 1.3.8.1 硬链接特征
- 拥有相同的i节点和存储block块,可以看作是同一个文件
- 可以通过i节点访问
- 不能跨分区
- 不能针对目录使用
- 一般不使用
# 1.3.8.2 软链接特征
- ln -s [源文件] [目标文件]
- -s 创建软链接
- 类似Windows快捷方式
- 软链接拥有自己的i节点和Block块,但是数据块中只保存源文件的文件名和i节点号,并没有实际的文件数据
- lrwxrwxrwx l 软链接 软链接的文件权限都是 777
- 修改任意一个文件,另一个都会改变
- 删除源文件,软链接不能使用
- 软链接源文件必须写绝对路径
# 1.4 文件搜索命令
# 1.4.1 locate
- 在后台数据库中按文件名搜索,速度比较快
- 数据保存在/var/lib/mlocate后台数据库,每天更新一次
- 可以updatedb命令立刻更新数据库
- 只能搜索文件名
- /etc/updatedb.conf 建立索引的配置文件
- PRUNE_BIND_MOUNTS = "yes" 全部生效,开启搜索限制
- PRUNEFS 不搜索的文件系统
- PRUNENAMES 忽略的文件类型
- PRUNEPATHS 忽略的路径 /tmp
# 1.4.2 whereis
- 搜索命令所在路径以及帮助文档所在位置
- whereis 命令名 whereis ls
- -b 只查找可执行文件
- -m 只查找帮助文件
# 1.4.3 which
可以看到别名 which ls 能看到的都是外部安装的命令 无法查看Shell自带的命令,如 which cd
# 1.4.4 环境变量
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
- 定义的是系统搜索命令的路径
- echo $PATH
# 1.4.5 find
- 文件搜索命令
- find [搜索范围] [搜索条件]
# 1.4.5.1 按名称搜索
- 避免大范围的搜索,会非常消耗系统资源
find / -name aaa.log
# 1.4.5.2 通配符
- find是在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配
- 通配符
*
匹配任意内容?
匹配任意一个字符[]
匹配任意一个中括号内的字符
find . -name "ab[cdef]"
# 1.4.5.3 -i
不区分大小写
find / -iname A.log
# 1.4.5.4 -user
按所有者进行搜索
find /root -user root
find /root -nouser
2
# 1.4.5.5 按时间搜索
find /nginx/access.log -mtime +5
参数 | 含义 |
---|---|
atime | 文件访问时间 |
ctime | 改变文件属性 |
mtime | 修改文件内容 |
参数 | 含义 |
---|---|
-5 | 5天内修改的文件 |
5 | 5天前当前修改的文件 |
+5 | 5天前修改的文件 |
# 1.4.5.6 按大小搜索
- k小写,M大写
find . -size 100k
参数 | 含义 |
---|---|
-8k | 小于8K |
8k | 等于8K |
+8k | 大于8K |
+8M | 小于8M |
# 1.4.5.7 按i节点搜索
find . -inum 123456
# 1.4.5.8 综合应用
find /tmp -size +10k -a -size -20k
- 查找/etc目录下,大于10KB并且小于20KB的文件
- -a and 逻辑与,两个条件都满足
- -o or 逻辑或,两个条件满足一个就可以
find /tmp -size +10k -a -size -20k -exec ls -lh {} \;
2
- exec 对上个命令的结果进行操作
# 1.4.5.9 grep
- 在文件当中匹配符合条件的字符串
- grep "10" access.log
- -i 忽略大小写
- -v 排除指定字符串
- find命令,在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配
- grep命令 在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配
# 1.5 帮助命令
# 1.5.1 基本用法
- man 命令 获取指定命令的帮助
- man ls 查看ls的帮助
# 1.5.2 man的级别
- 1 查看命令的帮助
- 2 查看可被内核调用的函数的帮助
- 3 查看函数和函数库的帮助
- 4 查看特殊文件的帮助
- 5 查看配置文件的帮助
- 6 查看游戏的帮助
- 7 查看其它的帮助
- 8 查看系统管理员可用命令的帮助
- 9 查看和内核相关文件的帮助
# 1.5.3 查看命令级别
- 查看命令级别
- 1p: POSIX utilities
- POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准.
man -f ls
whatis ls
man 1 ls
man 1p ls
2
3
4
# 1.5.4 关键字搜索
- man -k passwd
# 1.5.5 shell 内部帮助
- whereis找到就是外部,找不到就是内部
help cd
# 1.6 压缩与解压缩命令
后缀 .zip
.gz
.bz2
.tar.gz
.tar.bz2
# 1.6.1 zip格式
- 压缩文件 zip 压缩文件名 源文件
- 压缩目录 zip -r 压缩文件名 源目录
- 解压 unzip 压缩文件名
mkdir book
touch book/1.txt
touch book/2.txt
zip -r book.zip book
unzip book.zip
2
3
4
5
# 1.6.2 gzip
命令 | 示例 | 含义 |
---|---|---|
gzip 源文件 | gzip a.txt | 压缩为.gz格式的压缩文件,源文件会消失 |
gzip c 源文件 > 压缩文件 | gzip -c yum.txt > yum.txt.gz | 压缩为.gz格式的压缩文件,源文件不会消失 |
gzip -r 目录 | gzip -r xx | 压缩目录下的所有子文件,但是不压缩目录 |
gzip -d 压缩文件名 | gzip -d yum.txt.gz | 解压缩文件,不保留压缩包 |
gunzip 压缩文件 | gunzip yum.txt.gz | 解压缩文件,不保留压缩包 |
- 压缩是压缩目录下的文件
# 1.6.3 .bz2格式压缩
命令 | 示例 | 含义 |
---|---|---|
bzip2 源文件 | bzip2 1.txt | 压缩为.bz2格式的文件,不保留源文件 |
bzip2 -k 源文件 | zip2 -k 1.txt | 压缩为.bz2格式的文件,保留源文件 |
bzip2 -d 压缩文件名 | bzip2 -d 1.txt.bz2 | 解压压缩包 |
bunzip2 压缩文件名 | bunzip2 1.txt.bz2 | 解压压缩包 |
- bzip2 不能压缩目录
# 1.6.4 tar
- 打包命令
- tar -cvf 打包文件名 源文件
- -c 打包
- -v 显示过程
- -f 指定打包后的文件名
tar -cvf book.tar book
gzip book.tar
bzip2 book.tar
2
3
- x 解打包
tar -xvf book.tar
# 1.6.5 tar.gz压缩格式
- 可以先打包为
.tar
格式,再压缩为.gz
格式-z
压缩为.tar.gz
格式-x
解压缩.tar.gz
格式 。
命令 | 示例 | 含义 |
---|---|---|
tar -zcvf 压缩包名 .tar.gz 源文件 | tar -zcvf book.gar.gz book | 可以先打包为.tar 格式,再压缩为.gz 格式 |
tar -zxvf 压缩包名.tar.gz | tar -zxvf book.tar.gz | 解压tar.gz 压缩包 |
tar -jcvf 压缩包名 .tar.bz2 源文件 | tar -zcvf .tar.bz2 book | 可以先打包为.tar 格式,再压缩为.bz2 格式 |
tar -jxvf 压缩包名.tar.bz2 | tar -zxvf book.tar.bz2 | 解压tar.bz2 压缩包 |
# 1.7 关机和重启命令
# 1.7.1 shutdown
shutdown 关机命令
- -c 取消前一个关机命令
- -h 关机
- -r 重启
shutdown -r 06:00
shutdown -c
2
# 1.7.2 init
关机
init 0
重启
init 6
系统的运行级别
- 0 关机
- 1 但用户
- 2 不 完全多用户,不包含NFS服务
- 3 完全多用户
- 4 未分配
- 5 图形界面
- 6 重启
# 1.7.3 logout
退出登录
logout
# 1.8 挂载
# 1.8.1 挂载命令
- mount 查看系统中已经挂载的设备
mount
mount -a
2
# 1.8.2 挂载命令格式
- mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
- 选项
- -t 文件系统 ext4 iso9660
- -o 特殊选项
# 1.8.3 挂载光驱
mkdir /mnt/cd
mount -t iso9660 /dev/sr0 /mnt/cdrom
2
# 1.8.4 卸载光驱
umount /dev/sr0
umount /mnt/cdrom
2
# 1.8.4 挂载U盘
fdisk -l
mount -t vfat /dev/sdb1 /mnt/usb
2
- linux默认不支持NTFS格式
# 1.9 查看登录用户信息
# 1.9.1 w
查看登录用户信息
- USER 登录的用户名
- TTY 登录的终端 tty1 本地终端 pts/0远程终端
- FROM 登录的IP
- LOGIN 登录时间
- IDLE 用户闲置时间
- JCPU 该终端所有进程占用的时间
- PCPU 当前进程所占用的时间
- WHAT 正在执行的命令
# 1.9.2 who
查看登录用户信息
- USER 登录的用户名
- TTY 登录的终端 tty1 本地终端 pts/0远程终端
- LOGIN 登录时间(登录的IP)
# 1.9.3 last
查看当前登录和过去登录的用户信息 默认读取 /var/log/wtmp 文件
- 用户名
- 登录终端
- 登录IP
- 登录时间
- 退出时间(在线时间)
# 1.9.4 lastlog
查看所有用户的最后一次登录时间
- 用户名
- 登录终端
- 登录IP
- 最后一次登录时间
# 2. shell
- shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序
- 用户可以用Shell来启动、挂起、停止或者编写一些程序
- Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。
- Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
# 2.1 查看支持的shell
- /etc/shells
# 2.2 echo
- 输出命令
- --e 支持反斜线控制的字符转换
控制字符 | 作用 |
---|---|
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\onnn | 按照八进制ASCII码表输出字符,其中0为数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ASCII码表输出字符,其中hh是两位十六进制数 |
- 30m-47m
- echo -e "\e[1;31m warning \e[0m"
符号 | 颜色 |
---|---|
#30m | 黑色 |
#31 | 红色 |
#32 | 绿色 |
#33 | 黄色 |
##34 | 蓝色 |
##35 | 洋红 |
##36 | 青涩 |
##37 | 白色 |
# 2.3 编写执行shell
#!/bin/bash
echo -e "\e[1;34m hello world \e[0m"
2
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
2
通过Bash调用执行脚本
bash hello.sh
# 2.4 别名
- 命令别名 == 小名
- 临时生效
- alias
- alias rm="rm -i"
- 写入环境变量配置文件 vi ~/.bashrc
- source ~/.bashrc
- unalias 别名 删除别名
# 2.5 命令的生效顺序
- 绝对路径或者相对路径
- 别名
- bash内部命令
- 按照$PATH环境变量定义的目录查找顺序找到的第一个命令
# 2.6 命令快捷键
命令 | 含义 |
---|---|
ctrl+c | 强制终止当前命令 |
ctrl+l | 清屏 |
ctrl+a | 光标移动到命令行首 |
ctrl+e | 光标移动到命令行尾 |
ctrl+u | 从光标所在的位置删除到行首 |
ctrl+z | 把命令放入后台 |
ctrl+r | 在历史命令中搜索 |
# 2.7 历史命令
- history [选项] [历史命令保存文件]
- 选项
- -c 清空历史命令
- -w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
- 默认保存1000条 /etc/profile HISSIZE=10000
# 2.8 调用
- 使用上下箭头调用以前的历史命令
- 使用 !n 重复执行第n条历史命令
- 使用 !! 重复执行上一条命令
- 使用 !字符 重复执行最后一条以该字符串开头的命令
# 2.9 输出重定向
# 2.9.1 标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
类型 | 符号 | 作用 |
---|---|---|
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中 |
标准输出重定向 | 命令 >> 文件 | 以追加的方式,把命令的正确输出输出到指定的文件或设备当中 |
错误输出重定向 | 命令>文件 | 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中 |
错误输出重定向 | 命令>>文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 |
正确输出和错误输出同时保存 | 命令>文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令>文件 2>>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令&>文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令&>>文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令>>文件1 2>文件2 | 以覆盖的方式,正确的输出追加到文件1中,把错误输出追加到文件2中 |
# 2.9.2 输入重定向
命令 < 文件把文件做为命令的输入
命令 << 标识符 标识符把标识符之间内容作为命令的输入
wc < access.log
wc <>
# 2.10 管道符号
# 2.10.1 多命令顺序执行
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1 || 命令2 | 逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
- date;ls;date;ls
- ls && echo yes || echo no
# 2.10.2 管道符号
- 命令1的正确输出会作为命令2的操作对象
- 命令1|命令2
ls /etc/ | more
netstat -an | grep ESTABLISHED | wc -l
2
# 2.10.3 通配符
匹配文件名和目录名
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意字符,也就是可以匹配任意内容 |
[] | 匹配中括号中任意一个字符 |
[-] | 匹配中括号中任意一个字符,-代表范围 |
[^] | 匹配不是中括号中的一个字符 |
# 2.10.4 其它符号
符号 | 作用 |
---|---|
'' | 单引号。在单引号中所有的特殊符号,如$和`都没有特殊含义 |
"" | 双引号,在双引号里特殊符号都没有特殊含义,但是 $ ` \ 例外,拥有调用变量值,引用命令和转义的含义 |
`` | 反引号,扩起来的是系统命令 |
$() | 和反引号一样 |
# | 在shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值 |
\ | 转义符号 |
a=`ls`
b=$(ls)
2
# 3. vi编辑器
- VI visual interface
- 可视化接口
- 类似与windows中的记事本
- vim支持多级撤销
- 跨平台
- 语法高亮
- 支持图形界面
# 3.1 操作模式
模式名 | 含义 |
---|---|
Command Mode 命令模式 | 等待输入的模式 |
Insert Mode 输入模式 | 编辑模式,用于输入文本 |
Last Line Mode 底行模式(尾行、末行) | 可以输入指令,搜索,保存 |
- vim + abc
- vim +3 abc
- vim +5 abc
- vim +/xxx abc
- vim a b c :n
# 3.2 常用指令
# 3.2.1 底行模式
- :w 保存
- :q 退出
- :! 强制保存
- :ls 列出所有的文件
- :n 下一个
- :N 上一个
- :15 跳转到指定行
- /xxx 从光标位置开始向后搜索 xxx 字符串
- ?xxx 从光标位置开始向前搜索
# 3.2.2 命令模式
h 光标左移
j 光标下移
k 光标上移
l 光标右移
ctrl+f 向下翻页(front)
ctrl+b 向上翻页
ctrl+d 向下翻半页
ctrl+u 向上翻半页
dd 删除光标所在行
o 在光标所在行的下方插入一行并切换到输入模式
yy 复制光标所在的行
p 在光标所在行的下方粘贴
P 在光标所在行的上方粘贴
# 4. 用户和用户组
- 使用操作系统的人都是用户
- 用户组是具有相同系统权限的一组用户
# 4.1 用户组
# 4.1.1 /etc/group
/etc/group
存储当前系统中所有用户组信息group:x:123:abc,def
- 组名称:组密码占位符:组编号:组中用户名列表
- root 组编号为0
- 1-499系统预留的编号 预留给安装的软件和服务的
- 用户手动创建的用户组从500开始
- 组密码占位符都是x
# 4.1.2 /etc/gshadow
- 存放当前系统中用户组的密码信息
- 和group中的记录一一对应
Group: * : :abc
- 组名称 组密码 组管理者 组中用户名
# 4.1.3 /etc/passwd
- 存储当前系统中所有用户的信息
user:x:123:456:xxxxx:/home/user:/bin/bash
- 用户名:密码占位符:用户编号: 用户注释信息:用户主目录:shell类型
# 4.1.4 /etc/shadow
- 存放当前系统中所有用户的密码信息
user:xxx:::::::
- 用户名:密码:
# 4.2 用户操作
添加组
groupadd student
修改组名称
groupmod -n stu student
修改组编号
groupmod -g 111 stu
添加分组并指定编号
groupadd -g 222 teacher
删除分组
groupdel 222
添加分组
groupadd teacher
为用户指定所属组
useradd -g teacher zhangsan
为用户指定所属组
useradd -g teacher lisi
为用户指定工作目录
useradd -d /home/zhangsan zhangsan
指定注释
usermod -c iamateacher zhangsan
修改用户名
usermod -l zhangsan zhangsan2
指定文件夹
usermod -d /home/zhangsan2 zhangsan2
修改用户所属组
usermod -g stu zhangsan2
删除用户
userdel zhangsan2
删除所属文件夹
userdel -r lisi
# 5. 用户命令
显示登录的用户名
whoami
显示指定用户信息,包括用户编号,用户名 主要组的编号及名称,附属组列表
id zhangsan
显示zhangsan用户所在的所有组
groups zhangsan
显示用户详细资料
finger zhangsan
# 6. 附录
# 6.1 系统启动
# 6.1.1 BIOS
- 计算机通电后,第一件事就是读取刷入ROM芯片的开机程序,这个程序叫做(Basic Input/Output System)
# 6.1.2 硬件自检
- BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test)
- 如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。
# 6.1.3 启动顺序
- 硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。
- 这时,BIOS需要知道,"下一阶段的启动程序"具体存放在哪一个设备
- BIOS需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做"启动顺序"(Boot Sequence)
- BIOS按照"启动顺序",把控制权转交给排在第一位的储存设备。
- 这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备。
- 这最前面的512个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)
# 6.1.4 主引导记录的结构
- "主引导记录"只有512个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。
- (1) 第1-446字节:是用来记录系统的启动信息的,调用操作系统的机器码
- (2) 第447-510字节(64个字节):分区表(Partition table),分区表的作用,是将硬盘分成若干个区
- (3) 第511-512字节:主引导记录签名(0x55和0xAA)
# 6.1.5 分区表
- 磁盘分区是使用分区编辑器在磁盘上划分几个逻辑部分
- 磁盘一旦划分成多个分区,不同类的目录与文件可以存储进不同的分区内
- "主引导记录"因此必须知道将控制权转交给哪个区
- 分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做"主分区"
- (1) 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
- (2) 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
- (3) 第5个字节:主分区类型,比如FAT32、NTFS等。
- (4) 第6-8个字节:主分区最后一个扇区的物理位置。
- (5) 第9-12字节:该主分区第一个扇区的逻辑地址。
- (6) 第13-16字节:主分区的扇区总数。
# 6.1.6 硬盘启动
- 计算机的控制权就要转交给硬盘的某个分区了
- 四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做"卷引导记录"(Volume boot record,缩写为VBR)
# 6.1.7 操作系统
- 控制权转交给操作系统后,操作系统的内核首先被载入内存。
- 以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代
- 然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。
# 7 进程管理
# 7.1 进程
- 进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间并且用一定的系统资源
- 进程就是正在执行的某个程序
# 7.2 进程管理简介
- 判断服务器的状态
- 查看系统中的所有进程
- 杀死进程,只有无法关闭才要杀死进程
# 7.3 进程的查看命令(ps)
- ps aux 查看系统中所有进程,使用BSD操作系统格式
- ps -le 查看系统中所有进程,使用Linux标准格式
- TTY是TeleType的一个缩写,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西
pts(pseudo['su:doʊ]-terminal slave)
是所谓的伪终端或虚拟终端
# 7.3.1 选项
参数 | 含义 |
---|---|
-a | 显示一个终端的所有进程 |
-u | 显示进程的归属用户及内存的使用情况 |
-x | 显示没有控制终端的进程 |
-l | 长格式显示,显示更详细的信息 |
# 7.3.2 结果字段含义
数据 | 含义 |
---|---|
USER | 该进程是由哪个用户创建的 |
PID | 进程的ID号 |
%CPU | 该进程占用CPU资源的百分比,占用越高说明越消耗系统资源 |
%MEM | 该进程占用物理内存的百分比,占用越高说明越消耗系统资源 |
VSZ | 该进程占用虚拟内存的百分比,单位是KB |
RSS | 该进程占用实际物理内存大小,单位是KB |
TTY | 该进程在哪个终端中运行。tty1~tty7表示本地控制终端,tty1~tty6是字符终端,tty7是图形终端。pts/0~255代表虚拟终端,?表示此终端是系统启动的 |
STAT | 进程状态 |
START | 该进程的启动时间 |
TIME | 该进程占用CPU的运算时间,数值越高说明越消耗系统资源 |
COMMAND | 产生此进程的命令名 |
# 7.3.3 进程状态(STAT)
参数 | 含义 |
---|---|
R(Runing) | 运行 |
S(Sleep) | 休眠 |
T(Terminated) | 停止 |
S(Son) | 包含子进程 |
+ | 位于后台 |
# 7.4 pstree
pstree [选项]
- -p 显示进程PID
- -u 显示进程的所属用户
# 7.5 进程的查看(top)
- top
top -b -n 1 > top.txt
# 7.5.1 选项
选项 | 含义 |
---|---|
-b | 使用批处理模式输出,一般和-n配合使用 |
-n | 次数,指定top命令执行的次数。一般了-b选项配合使用 |
-d | 秒数,指定top命令每隔几秒更新。默认是3秒 |
# 7.5.2 交互模式的命令
选项 | 含义 |
---|---|
?或h | 显示交互模式的帮助 |
P | 按CPU使用率排序,默认就是此选项 |
M | 以内存的使用率排序 |
N | 以PID排序 |
q | 退出top |
# 7.5.3 状态栏
# 7.5.3.1 第一行为任务队列信息
内容 | 说明 |
---|---|
12:12:12 | 系统的当前时间 |
up 1 day 5:33 | 系统的运行时间,本机已经运行了1天5小时33分 |
2 users | 当前登录了二个客户端 |
load average 0 0 0 | 系统在之前1分钟、5分钟、15分钟的平均负载。一般认为小于1小时负载较小,大于1超过负载 |
# 7.5.3.2 第二行为进程信息
内容 | 说明 |
---|---|
Tasks: 100 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
94 sleeping | 睡眠的进程 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程。如果不是0的话要进行检查 |
# 7.5.3.3 第三行为CPU信息
内容 | 说明 |
---|---|
Cpu(s): 0.1%us | 用户模式占用的CPU百分比 |
0.1%sy | 系统模式占用的CPU百分比 |
0.0%ni | 改变过优先级的用户进程 占用的CPU百分比 |
99.7%id | 空闲CPU的CPU百分比 |
0.1%wa | 等待输入/输出的进程的占用CPU百分比 |
0.1%hi | 硬中断请求服务占用的CPU百分比 |
0.1%si | 软中断请求服务占用的CPU百分比 |
0.0%st | st(Steal time)虚拟时间百分比,就是当有 |
# 7.5.3.4 第四行为物理内存信息
内容 | 说明 |
---|---|
Mem: 1030720k total | 物理内存的问题,单位是KB |
551860k used | 已经使用的物理内存数量 |
478860k free | 空闲的物理内存数量,虚拟机分配了1024M内存,使用了538M,空闲467M |
43180k buffers | 作为缓冲的内存数量,可以存放需要写入硬盘的数据,用来加速数据的写入 |
# 7.5.3.5 第四行为交换分区信息
内容 | 说明 |
---|---|
Swap: 2047992k total | 总计的交换分区(虚拟内存)大小 |
536k used | 已经使用的交换分区大小 |
2047456k free | 空闲的交换分区大小 |
368164k cached | 把需要经常读取的数据从硬盘读到内存中,加速了数据的读取 |
# 7.6 杀死进程(kill)
# 7.6.1 进程信号
- kill -l 查看可用的进程信号 |信号 |代码 |信号名称 |说明 |示例| | -- | -- | -- | -- | -- | |1 |SIGHUP |该信号让进程立即关闭,然后重写读取配置文件后重启,平滑重启 |kill -1 -HUP 进程号| |2 |SIGINT |程序终止信号,用于关闭前台进程,相当于ctrl+c | |9 |SIGKILL |用来立刻结束程序的运行,本信号不能阻塞、处理和忽略,一般用于强制中止 | |15 |SIGTERM |正常结束进程的信号,kill命令的默认信号。如果不能正常中止,才会尝试SIGKILL信号|
# 7.6.2 杀死进程
sleep.sh
#!/bin/bash
i=0
while [ $i -le 1000 ]
do
echo $(date)
sleep 1s
done
2
3
4
5
6
7
sh sleep.sh &
ps -ef | grep sleep.sh
2
kill 进程号
# 8. 系统资源查看
# 8.1 vmstat
- 监控系统资源使用状态
vmstat [刷新延时 刷新次数]
vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 532 329932 99388 459768 0 0 16 81 59 50 3 1 96 0 0
2
3
4
# 8.1.1 (procs)进程信息字段
分类 | 参数 | 含义 |
---|---|---|
procs | r | 等待运行的进程数,数量越大,系统就越繁忙 |
procs | b | 不可被唤醒的进程数量,数量越大,系统越繁忙 |
# 8.1.2 memory(内存信息字段)
分类 | 参数 | 含义 |
---|---|---|
memory | swpd | 使用的Swap空间的大小,单位KB |
memory | free | 空闲的内存容量,单位KB |
memory | buff | 缓冲的内存容量,单位KB |
memory | cache | 缓存的内存容量,单位KB |
# 8.1.3 swap(交换分区信息)
- 如果说si和so数越大说明数据经常要在磁盘和内存之间数据交换,系统性能就会越差
分类 | 参数 | 含义 |
---|---|---|
swap | si(in) | 从磁盘中交换到内存中的数据的数量,单位KB |
swap | so(out) | 从内存中交换到硬盘中的数据的数量,单位KB |
# 8.1.4 io(磁盘读写)
- bi和bo数越大,说明磁盘的I/O越繁忙
分类 | 参数 | 含义 |
---|---|---|
io | bi(in) | 从块设备读入数据的问题,单位是块 |
io | bo(out) | 写到块设备的数据的总量,单位是块 |
# 8.1.5 system(系统信息字段)
- in和cs数越大,说明系统与接口设备的通信越繁忙
分类 | 参数 | 含义 |
---|---|---|
system | in(interrupt) | 每秒被中断的进程次数 |
system | cs(switch) | 每秒钟进行的事件切换次数 |
# 8.1.6 CPU(CPU信息字段)
分类 | 参数 | 含义 |
---|---|---|
CPU | us(user) | 非内核进程消耗CPU运算时间的百分比 |
CPU | sy(system) | 内核进程消耗CPU运算时间的百分比 |
CPU | id(idea) | 空闲CPU的百分比 |
CPU | wa(wait) | 等待I/O所消耗的CPU百分比 |
CPU | st(steal) | 被虚拟机偷走的CPU百分比 |
# 8.3 free
- 查看内存使用状态
free [-b|-k|-m|-g]
- 选项
- -b 以字节为单位
- -k 以KB字节为单位
- -m 以MB字节为单位
- -g 以GB字节为单位
# free -m
total used free shared buffers cached
Mem: 1006 687 319 0 98 449
-/+ buffers/cache: 139 866
Swap: 1999 0 1999
2
3
4
5
# 8.3.1 第一行
参数 | 含义 |
---|---|
total | 内存总数 |
used | 已经使用的内存数 |
free | 空闲的内存数 |
shared | 多个进程共享的内存数 |
buffers | 缓冲区内存数 |
cached | 缓存内存数 |
# 8.3.2 第二行
参数 | 算法 | 含义 |
---|---|---|
- buffers/cache | 第一行的used-buffers-cached | 已经使用的要减去缓存和缓冲的内存量 |
+ buffers/cache | 第一行的free+buffers+cached | 空闲的要加上缓存和缓冲的内存量 |
# 8.3.3 第三行
参数 | 含义 |
---|---|
total | swap总数,默认单位是K |
used | 已经使用的swap数,默认单位是K |
free | 空闲的swap数,默认单位是K |
# 8.6 查看内核相关信息
- uname
# uname -a
Linux localhost 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 2012 i686 i686 i386 GNU/Linux
# uname -s
Linux
# uname -r
8.6.32-279.el6.i686
2
3
4
5
6
# 8.7 查看操作系统位数
file /bin/ls
# 8.8 查看发行版本
lsb_release -a
# 8.9 查看发行版本
yum install redhat-lsb -y
lsb_release -v
2
# 9. 系统定时任务
- 有些任务比如备份数据库等操作需要在系统空闲的时候执行
# 9.2 crontab
- 可以循环定时执行定时任务
- cron (opens new window)
systemctl restart crond.service
# 9.2.3 crontab设置
- crontab [选项]
- 选项
- -e 编辑crontab定时任务
- -l 查询crontab任务
- -r 删除当前用户所有的crontab任务
* * * * * 执行的任务
# 9.2.3.1 语法
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
2
3
4
5
6
7
# 9.2.3.2 位置
项目 | 含义 | 范围 |
---|---|---|
第1个星 | 1个小时中的第几分钟 | 0~59 |
第2个星 | 1天当中的第几小时 | 0~23 |
第3个星 | 1月当中的第几天 | 1~31 |
第4个星 | 1年当中的第几月 | 1~12 |
第5个星 | 1周当中的星期几 | 0~6 |
# 9.2.3.3 特殊符号
符号 | 含义 | 例子 |
---|---|---|
* | 代表任意时间 | 比如第一个星就代表一个小时中每分钟都执行一次 |
, | 代表不连续的时间 | 比如"1,2,3 ",就代表每小时的1分、2分、3分执行命令 |
- | 代表连续的时间范围 | 比如 " 1-5 * ** ",代表每小时的第1分到第5分执行命令 |
*/n | 代表每隔多久执行一次 | 比如 "/10 " 就代表每隔10分钟就执行一次命令 |
0 0 1,10 * 1 | 每月1号和10号,每周1的0点0分都会执行 |
# 9.2.3.4 案例
符号 | 含义 |
---|---|
10 22 * | 在每天的22点10分执行 |
0 15 1 | 每周1的15点0分执行 |
0 5 5,10 | 每月5号和10号的凌晨5点整执行 |
10 5 1-5 | 每周一到周五的凌晨5点10分执行命令 |
/10 10 | 每天凌晨10点钟,每隔10分钟执行一次 |
# 9.2.3.5 注意事项
- 所有选项不能为空,必须填写
- crontab最小单位是分钟,最大单位是天
- 不管写命令还是脚本都要使用绝对路径
# 9.3 系统定时任务
crontab -e是用户执行的命令,不同的用户身份可以执行自己的定时任务 如果需要系统执行定时任务,可以编辑/etc/crontab文件 /etc/crontab可以指定shell、路径、邮件发送和家目录
# 9.3.1 /etc/crontab
- 修改/etc/crontab配置文件
5 5 * * * echo `date` >> /root/date.log
# 10. 实战任务
# 10.1 监控nginx
nginx.sh
#!/bin/bash
local nginx
nginx=`ps -ef |grep nginx|grep -v grep|wc -l`
if [ $nginx -gt 2 ];then
echo "your nginx is running"
exit 0
else
/bin/systemctl start nginx.service
exit 1
fi
2
3
4
5
6
7
8
9
10
# 10.2 监控mysql状态
mysql.sh
#!/bin/sh
PortNum=`netstat -lnt|grep 3306|wc -l`
if [ $PortNum -eq 1 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
2
3
4
5
6
7
8
# 10.3 mysql备份脚本
mysql_backup.sh
#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=127.0.0.1
DB=test
USER=root
PASS=abcd1#EFG
MAIL="xxxx@qq.com"
BACKUP_DIR=/data/db_backup
if [ ! -d "$BACKUP_DIR" ];then
mkdir -p $BACKUP_DIR
fi
SQL_FILE=${DB}_FULL_$DATE.sql
BAK_FILE=${DB}_FULL_$DATE.zip
cd $BACKUP_DIR
if mysqldump -h$HOST -u$USER -p$PASS -B $DB > $SQL_FILE; then
zip $BAK_FILE $SQL_FILE && rm -rf $SQL_FILE
if [ ! -s $BAK_FILE ]; then
echo "$DATE 备份失败" | mail -s "备份失败" $MAIL
fi
else
echo "$DATE 备份失败" | mail -s "备份失败" $MAIL
fi
find $BACKUP_DIR -name '*.zip' -ctime +14 -exec rm {} \;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 登陆授权
授权后下次登陆不用输密码
ssh-copy-id 47.104.220.xx
如果没有生成 /root/.ssh/id_rsa
可以通过下面命令生成密钥
ssh-keygen -t rsa
# 关闭防火墙
# 关闭 iptables
iptables命令是Linux上常用的防火墙软件
功能 | 命令 |
---|---|
停止防火墙 | systemctl stop firewalld.service |
永久关闭防火墙 | systemctl disable firewalld.service |
# 确认停用 selinux
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。 SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
功能 | 命令 |
---|---|
检查状态 | getenforce |
检查状态 | /usr/sbin/sestatus -v |
临时关闭 | setenforce 0 |
永久关闭 | /etc/selinux/config SELINUX=enforcing改为SELINUX=disabled |
# 安装依赖模块
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim
2