Linux系统管理常用命令
Linux系统管理常用命令
1 文件管理
识别文件类型 ls
- 文件类开:d:目录文件,l: 链接文件, b: 块设备文件, -: 普通文件
- -l 列表显示
- ls -lt/-lrt # 按时间排序或倒序
- ll | grep ^d 显示所有文件夹
- -a 显示包含隐藏
列出目录结构 tree
目录结构
- Linux树状目录结构,最上层目录为根目录 /
- 一切皆文件
vi 和 vim区别
- vi 是内置的 , vim 算是增强版
- i I , a A , o O , r R
- :set nu
- 输入行数,shift+g
- gg, GG
- 3yy, 3dd, u, x
pwd
ls
- -a 显示包含隐藏
- -l 列表显示
cd
- cd ~/ cd ; —–切到当前用户目录
- 使用绝对或相对路径
- cd .. 上一级
mkdir
- 默认只能创建一级
- -p 一次性创建多级
文件权限修改 chmod
- rwx 421
- chmod +x *.sh
- chmod -R 777 /tmp/test/ 注:-R参数递归所有子目录,给所有文件加了 777权限
修改文件或目录的归属信息 chown
- chown zhangsan 123.txt # 把123.txt归属到zhangsan名下
- chown zhangsan:group_name 123.txt # 把123.txt归属到zhangsan名下
查看文件状态 stat
- stat 123.txt
设置默认文件、目录权限 umask
- 文件 666-umask
- 目录 777-umask
打开文件的几种方式
cat 从首至尾的顺序打印, 只能看不能改
- -n 显示行号
- -A 显示尾部隐藏符号,经常windows上的文件在linux环境无法使用问题查看
- cat 有连接功能,可以一次打开多个文件,比如cat 1.txt 2.txt
- | more 分页显示, 按空格翻到下一页
tac 反序打印出来
more 以全屏按页显示文件打
- b, f 上下翻屏
- 空格 翻页, 回车,换行,
- ctrl+b, ctrl+f 上一屏,下一屏,
- q 离开
less 按页显示,一页页加载,对于查看大文件,效率高
- pageUp, pageDown翻页
head 显示文件前面的内容,默认前 10 行
- 默认打印前十行
- 可以和其他命令组合,比如: netstat -tunp | head
tail
- **tail -f 实时查看文件的更新, 很有用, 比如日志追踪 **
tail 显示文件最后面的内容,默认最后 10 行
- 默认打印最后十行
- tail -100 a.txt
- ** tail -f 实时查看文件的更新, 很有用, 比如日志追踪 **
> 重定向, >> 追加
- ‘>’ 重定向,会覆盖原有文件 ,不存在则创建
- ‘>>’ 追加, 不会覆盖原有文件 ,
- echo “afsafasf” >> file
echo 输出内容到控制台
- 输出环境变量
- 输出简单文件
head 显示文件前面的内容,默认前 10 行
- head -n 5 显示前5行
paste 两个文件按列合并
ln 符号链接
- ln -s [source] [dest]
rmdir 删除空目录
rm -rf 目录下有文件一起删除
touch ab.txt 创建一个空文件
- 可以一次性创建多个空文件, touch a.txt b.txt
cp 拷贝文件
- cp [option] source dest
- cp -r 递归目录下所有文件
- **\cp 强制覆盖 **
rm
- -r 递归
- -f 强制
mv 移动文件或目录,或重命名
- mv source target
文件搜索
find
- find [搜索范围] [选项]
- find -name , find /home -name hello.txt
- find -user , find / -user nobody
- find -size, find /home -size +20M, 在home目录下,查找超过 20m 的文件, k小写
locate 快速定位文件路径 ,通过查库,所以快
- 第一次使用,需要 updatedb 创建locate数据库
grep 和 |
- grep 过滤
- | 管道符,将前一命令的结果交给下一命令执行
- grep [option] 查找内容 源文件 -n显示出行号, -i 不管大小写
- cat abc.txt | grep -i yes
压缩和解压缩
gzip, gunzip
- gzip 压缩后不会保留原来的文件
zip, unzip
- zip [option] xxx.zip [source], -r 递归目录 , zip -r dog.zip dog/
- unzip [option] xx.zip, -d 指定解压后的存方目录 , unzip -d dog1/ dog.zip
tar 打包指令
- x.tar.gz
- c, v, f, z, x
- tar -zcfv abcd.tar.gz ab.txt cd.txt 打包
- tar -zcfv abcd.tar.gz /home
- tar -zxvf abcd.tar.gz 解压到当前目录
- tar -zxvf abcd.tar.gz -C /myhome/ 指定解压到某一目录,这个目录必须存在
2 用户管理
用户
- Id 加用户名,查看用户信息
- 切换用户 su 用户名
- useradd username -g 指定组
- Passwd username
用户组
- Whoami
- Groupadd groupdel
修改用户组
- usermod -g
用户信息相关的文件
- Etc/group
- etc/shadow
用户切换及信息查看
- su - zhangsan 切换用户
- sudo su 切换到root
- cat /etc/passwd | grep zhangsan 查看当前系统下某用用户信息
- id zhangsan 查看账户信息
- whoami 查看当前用户
新增用户 useradd
- d 指定用户目录, useradd -d /data/123 zhangsan,
- g 指定所属主组,
- u 指定uid, 场景:通过uid筛选用户
删除用户 userdel
- r 删除用户及其家目录, userdel -rf zhangsan
- f 强制删除用户,即使该用户下存在运行中的进程
- logout 退出当前用户
更改密码 passwd
- /etc/passwd 查看当前系统下怕有用户
- passwd zhangsan # 这是在root下修改任一用户密码,root下可能修改任何用户密码 , 且不需要验证原密码,也没有密码复杂度的要求
- passwd 直接修改当前用户密码
更改用户信息 usermod
- usermod -g 修改组
shadow 文件
- cat /etc/shadow # 只有root有权查看,存放有加密后的密码
- chage -l zhangsan 查看用户密码修改信息
3 网络管理
查看本地ip信息 ifconfig 或 ip address
查看本地路由信息 route -n
- flag: UG才能访问外网
- traceroute www.baidu.com 查看网络访问跳转过程
cat /etc/resolv.conf 查看DNS
ethtool eth1 查看网卡信息
网络诊断 ping, traceroute
- ping dest-ip
- traceroute dest-ip
查看网络连接状态 netstat
- netstat (-tunlp or -tunp)
查看本机端口占用情况 netstat -ano
- netstat -ano | grep 800
查看文件被占用的情况 lsof
- lsof -c mysql 查看以关键字开头的进程占用的文件信息
- lsof -i tcp 列出所有tcp 网络连接信息
- lsof -i :3306 列出谁在使用某个端口
- lsof -a -u test -i 列出某个用户的所有活跃的网络端口
抓包 tcpdump
- tcpdump -nn -i eth0 dst 61.135.169.121 and port 8080
linux防火墙 iptables
- iptables -nvl
dig 查看域名的DNS
- dig baidu.com
网络问题排查
- 系统环境: uname -a, free -m , top 查系统版本,内存、cpu使用情况
- 系统log:dmesg; /var/log/messages, 有没有error, failed,bug 日志
- netstate 统计,tcpdump抓包, 是否有丢包,重传
- 网卡信息:lspci | grep Eth; ethtool 确定网卡类型
4 磁盘管理
查看磁盘分区 lsblk or df
- lsblk 包括未挂载,未格式化,未分区的磁盘也能显示出来,包括插入的u盘等
- df 只显示所有已经分区的磁盘
硬盘分区 fdisk
- fdisk dev/vdb
挂载 mount
- mount /dev/vdc1 /mountpointA
- 持久化挂载:在/etc/rc.local 中加入上述命令
找出哪些文件占空间多 du
- du -xks * | sort -rn | head -20
- du -sh xxxxx 显示某个文件或目录的大小
5 系统运行情况
查看Linux内核版本
- cat /proc/version
- uname -a
CPU
- lscpu
- /proc/cpuinfo
- top
- sar -u -P ALL 1 # 查询CPU历史情况
内存
- free
- /proc/meminfo
- sar -r 1 # 监控每一秒的内存情况
硬盘
- iostat -xm -1 # 看io繁忙情况
- iotop # 查看哪些进程产生大IO
- du # 查看有哪些目录
- sar -d 1
网络
- sar -n DEV 1 # 监控每秒网络流量
安全
- cat /var/log/secure # 看看谁登录过这台机器
- w # 看当前被谁登录
- last # 看所有登录信息, su zhangsan, cat ~/.bash_history 看最近执行的命令
- last rebot / uptime # 查看机器启动时间
- ps xf
- ps -eo pid,lstart | grep xxpid # 查看某进程的启动时间
- lsof | grep xxx # 哪个文件被打开了
- ll /proc/xxpid 查看进程的启动命令, 目录, 可执行文件位置等
6 正则表达式与文本处理
正则表达式
文本处理 sed (按行处理器)
- 打印指定范围的行 sed -n ‘10, 20 p’ test.txt
- 打印包括指定关键字(范围)的行: sed -n ‘/2014/, /2018/ p’ test.txt
- 匹配到关键字的行并做整行替换:sed ‘/running/ c\ ‘stop’’ test.txt
- 删除包含指定关键字的行 sed ‘/running/ d’ test.txt
- 删除指定范围的行 sed ‘1, 100 d’ test.txt , 注:加上-i参数后才会真正修改这个文件,否则只是在内存中修改
在文件中查找 grep
- grep keyword test.txt | tail/head/…
- grep -B/A/C 10 keyword test.txt # 查看关键字上/下/上下 10行的信息
- grep -nr keword xxx.log | wc -l 统计某关键字在某类文件里出现的次数
拆字段 awk
- cat /etc/passwd | awk -F: ‘{print $1, $3, $5, $NF}’ 按冒号分割每一行,并打印出分割后的第 1,3, 5和最后一列
- cat /etc/passwd | awk -F: ‘$3>100 {print $1, $3}’ # 加条件,第三列大于100
- $0 所有列
- NF 最后一列索引
- $NF 最后一列值
7 VIM
vim 有四个模式
- 正常模式 (Normal-mode), 默认模式, 进入按esc, 如果在命令模式下需要按两次
- 插入模式 (Insert-mode), 在正常模式中按下个别字母键(后面会详细介绍),会进入插入,比如i
- 命令模式 (Command-mode), 在正常模式中,按下:(冒号)键或者/ (撇号),会进入命令模式。在命令模式中可以执行一些输入并执行一些 VIM 或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能等等
- 可视模式 (Visual-mode), 在正常模式下,进入用v/V/Ctrl+v, 可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择的即视感,有时候会很方便
vim一次打开多个文件
- vim a.txt b.txt 按下键盘上的冒号 :这时会在显示屏底部出现冒号 :(进入了 VIM 的命令模式),然后在输入 ls 屏幕上会出现打开的所有文件的序号和文件名,我们继续输入冒号 : ,然后输入 bn (这里的 n需要做一个解释并不是键盘上的 n ,而是文件序号的代指,如 b1 代表显示屏上切换到第一个文件,b2 代表显示屏上切换到第二个文件
- vim -On file1 file2 … filen 左右分屏
- vim -on file1 file2 … filen 上下分屏
vim 退出
- :w 保存当前对文件的修改,但是不退出文件。
- :w! 强制保存但是不退出文件。
- :w file 保存当前的文件修改到 file 文件当中。
- :q! 退出文件,对文件的修改不做保存。
- :qa! 退出所有的文件,对所有的文件修改都不做保存
- :wq 退出文件并保存对文件的修改
- :x 退出文件并保存对文件的修改
- :e 打开另一个文件
- :e! 放弃对文件的所有修改,恢复文件到上次保存的位置。
- :saveas file 另存为 file
- :bn 和 :bp 当打开多个文件的时候可以输入 :bn 和 :bp 进行上一个文件或者下一个文件的切换。
vim编辑模式
- i是在光标所在的字符之前插入需要录入的文本。
- I 是在光标所在行的行首插入需要录入的文本。
- a 是在光标所在的字符之后插入需要录入的文本。
- A 是在光标所在行的行尾插入需要录入的文本。
- o 是光标所在行的下一行行首插入需要录入的文本。
- O 是光标所在行的上一行行首插入需要录入的文本。
- s 删除光标所在处的字符然后插入需要录入的文本。
- S 删除光标所在行,在当前行的行首开始插入需要录入的文本。
- cw ,删除从光标处开始到该单词结束的所有字符,然后插入需要录入的文本(这个命令是两个字符的合体 cw )。
vim命令模式
- :set nu 该命令会显示行号。
- :set nonu 该命令会取消行号。
- :n 定位到 n 行。
- /{目标字符串} 查找文本中匹配的目标字符串,查到以后,输入键盘上的 n 会去寻找下一个匹配,N 会去寻找上一个匹配。
- :set ic 编辑器将不会区分大小写,如果你进行该设置之后,进行关键字查询如 /zempty 如果文本中有 Zempty ,zEmpty,….,只要是字符相同不会区分大小写都会进行匹配。
- :set noic 区分大小写的查询
- :n1,n2d 删除多行文本,n1 和 n2 指的是起始行号和结束行号,d 是删除关键字
- :s/old/new/g 将会把当前光标所在行的 old 替换成 new
- :%s/zempty/handsome/gi 将会把全文中的 old 替换成 new
- :n1,n2s/zempty/handsome/gIc 这里的 n1 和 n2 值得是行号,将会替换掉 n1 到 n2 的所有old 替换为 new. 注:最后的g代表global即全局替换,如果去掉则只替换掉第一次出现的。i/I分别代表大小写不敏感和大小写敏感。c代表是否需要确认 。
- :!command VIM 执行 Linux 命令, : 后面紧跟着 ! ,! 后面紧跟着 linux 命令( command 指操作 Linux 系统的一系列命令,如创建文件,新建文件夹,查询文件的属性的等), 如:!date
- :r !command VIM 执行命令,并且添加结果至操作文本光标处
VIM 的正常模式(Normal-model)
- 快速移动光标:请记住这几个快捷键 h,j,k,l 这几个按键主要是用来快速移动光标的,h 是向左移动光标,l 是向右移动光标,j 是向下移动光标,k 是向上移动光标,h , j , k ,l 在主键盘区完全可以取代键盘上的 ↑ ,↓ ,← , → 的功能。
- 0 移动到行头
- ^ 移动到本行的第一个不是 blank 字符
- $ 移动到行尾
- fa 移动到本行下一个为 a 的字符处,fb 移动到下一个为 b 的字符处
- Fa 同 fa 一样,光标移动方向同 fa 相反
- w 光标移动到下一个单词的开头
- e 光标移动到下一个单词的结尾
- ; 和, 当使用 f, F, t ,T, 关键字指定字符跳转的时候,使用 ;可以快速跳转到写一个指定的字符,, 是跳到前一个指定的字符
- nG 光标定位到第 n 行的行首
- gg 光标定位到第一行的行首
- G 光标定位到最后一行的行首
- H 光标定位到当前屏幕的第一行行首
- M ML光标移动到当前屏幕的中间
- L 光标移动到当前屏幕的尾部
- ctrl+f 查看下一页内容
- ctrl+b 查看上一页内容
VIM 的复制,黏贴 ,删除
** d 是删除的意思,通常搭配一个字符 ( 删除范围 ) 实现删除功能,常用的如下:**
- dw 删除一个单词
- dnw 删除 n 个单词,
- dfa 删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 )
- dnfa 删除光标处到第 n 个 a 的字符处
- dd 删除一整行
- x 删除一个字符
- ndd 删除光标处开始的 n 行 – dG一直删除到文件末尾,gg,dG删除整个文件内容
- d$ 删除光标到本行的结尾
- dH 删除屏幕显示的第一行文本到光标所在的行
- dG 删除光标所在行到文本的结束
** y 是复制的意思,通常搭配一个字符(复制范围)实现复制的功能,常用的如下:** - yw 复制一个单词,还有 ynw
- yfa 复制光标到下一个 a 的字符处,还有ynfa
- yy 复制一行,还有 nyy
- y$ 复制光标到本号的结尾
- yH 复制屏幕显示的第一行文本到光标所在的行
- yG 复制光标所在行到文本的结束
** p, P是黏贴的意思,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来** - p 在光标后开始粘贴
- P 大写的 P 光标前开始粘贴
撤销操作和恢复
- u 撤销刚才的操作
- ctrl + r 恢复撤销操作
删除字符操作和替换
- x 删除光标当前所在的字符
- r 替换掉光标当前所在的字符
- R 替换掉从光标开始以后的所有字符,除非
退出
大小写转换
- ~ 将光标下的字母改变大小写
- 3~ 将光标位置开始的3个字母改变其大小写
- g~~ 改变当前行字母的大小写
- gUU 将当前行的字母改成大写
- guu 将当前行的字母全改成小写
VIM 的重复命令
- . 该命令是重复上一个操作的命令
- n
重复某个命令 n 次, - 如 10p复制 10 次,10dd 删除十次。
VIM可视化
- v 字符可视化
- V 行可视化
- Ctrl+v 块状可视化
可视化模式下操作文本
可视化模式下选择操作区域以后:
- 按下 d会删除选择的区域,
- 按下 y 会复制选择的区域,
- 按下 p 会黏贴选择的区域
VIM 的代码提示功能
- 在编辑模式下 ,快捷键 Ctrl+n 或者 Ctrl+p 会有代码提示功能,我们可以实现快速录入的效果。
8 搭配管道使用的工具
最通俗常用的grep 可搭配正则
- cat test.txt | grep keyword
wc 统计文本行数
- cat test.txt | wc -l # 查看行数
- wc -l test.txgt
cut 类似awk的拆分功能
sort 排序
- netstat -tunp | sort -rn -k3 # 按第三列倒序排
uniq 去重
- cat test | sort | uniq
tee 既输入到屏幕又保存到文件
- ls -al /home | tee result
tr 替换
- cat a.log | tr -s ‘c’ ‘C’ # 把小c换成大C
- cat a.log | tr -s ‘\n’ ‘ ‘ # 去掉换行变空格
- tr -d ‘abc’ a.log # 删除abc
xargs
- cat a.log | xargs # 竖的变横的
9 安装包管理
RPM redhat package manager
- rpm -qa | grep firefox 查询是否安装了某个包
- rpm -qi python 查询安装的某个饭的信息
- rpm -ql python 查看安装包安装了哪些文件
- rpm -qf /etc/passwd 查询某个文件属于哪个安装包
- rpm -e firefox 删除 rpm包, –nodeps 强制删除
- rpm -i firefox的安装路径, 安装某个安装包 -h 进度条, -v 提示 , rpm -ivh 安装包路径
Yum 是一个shell 前端包管理器
- 基于rpm,能够从指定的服务器自动下载 rpm 安装包 , 可以自动处理依赖关系
- 一次安装所有依赖的软件包
Yum 的基本指令
- yum list | grep firefox 查询服务器上是否有需要的安装包
- yum install firefox 安装某个指定的包 , 默认会安装最新版本
10 其他运维命令
显示历史执行过的命令 history
- c 清除历史命令
- 显示最近的 10 个 history 10
- ! num, 执行编号为 num的指令
压缩与解压缩 tar
- 压缩: tar czf test.tar.gz /data/test
- 解压:tar xf test.tar.gz
- 查看但不解压: tar tvf test.tar.gz
脚本执行
- 用expect 编写自动化脚本以提高效率,典型的场景比如登录,
- 用alias 给常用的执行命令加上别名,方便快捷
- Shell提供了一些用于调试脚本的选项:
- -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。bash/sh -n xxx.sh # 检测脚本语法错误
- -v,一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。
- -x,提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。
用curl下载ftp文件
- curl ftp://a.b.c.d/test.zip -u name:passwd -O # -O保留原来的文件名,-o:自定义文件名
列出本机监控端口及服务, 包括正在listen的, netstat -tunlp
- netstat -tunlp
列出本机所有连接,不包括本地监听端口 netstat -tunp
- netstat -tunp
命令置于后台 nohup &
- nohup /bin/bash /data/test.sh &
- screen
生成一个指定大小的文件 dd
- dd if=/dev/zero of=/data/matt/2G bs=1M count=2048 # if指定生成器,of指定文件名
time 统计命令执行花费的时间
- time netstat -tunp
获取本机ip
- ifconfig | grep inet[^6] | grep -v 127.0.0.1 | awk ‘{print $2}’ | cut -d’:’ -f2
移动行光标, 特别在敲长命令时 ctrl a/e
- 首:Ctrl+a
- 末:Ctrl+e
历史命令快速查找 Ctrl r
- Ctrl + r 输入关键字后开始查找,按ctrl+r继续向前查找,如果找到,按下箭头确认
!在shell中的应用
- !^ 表示上一个成功执行的命令的第一个参数
- !$ 表示上一个成功执行的命令的最后一个参数
- !* 表示上一个成功执行的命令的所有参数, 用空格隔开
- eg: mkdir -p a/b/c/d, cd !$
find的应用
- find /data/logs/ -mtime +7 -name ‘.log’ -type f | xargs rm # 删除这目录下 7天之前修改过的.log文件
- find /abc -user zhangsan -perm -szie +50G
- find /data/logs -name abc.log
- find / -mtime -7 全盘找最近7天改过的文件
- find / -mmin -10 全盘找最近10分钟内改过的文件
时间日期类
date 显示当前时间
- date “+%Y %m %d “
- date -s “2019-10-01 21:23:13” 设置日期
cal
- cal 2020 显示某一年的
- mysql -uroot -p’w14i#t1NPW’ -h100.121.190.3 -P3477 CCDB_239
man
- man ls
help
- shell 内置命令帮助
- help cd