Linux 日常操作
背景
质量团队 Linux 日常操作培训,提升团队整体 Linux 水平。
注: 以下所有命令都是在 Centos
操作系统来进行演示。
帮助命令及工具
详见: Linux 帮助命令及工具(tldr,man,help,info)
用户和用户组
创建一个新用户或更新默认新用户信息
用户和组常用命令
# 创建组
$ groupadd daodaotest2
# 修改组名
$ groupmod -n daodaotest daodaotest2
# 创建用户
$ useradd daodaotest
# 指定参数创建用户,-u uid;-g 用户组名;-G 附加组;-d 主目录;-c 用户描述;-s shell
$ useradd -u 550 -g daodaotest -G root -d /home/daodaotest -c "test user" -s /bin/bash daodaotest
# 修改用户信息
$ usermod -c "update test user" daodaotest
# 查看用户和组信息
$ id daodaotest
uid=550(daodaotest) gid=1009(daodaotest) 组=1009(daodaotest),0(root)
# 设置用户密码
$ passwd daodaotest
# 查看用户密码
$ passwd -S daodaotest
或
$ chage -l daodaotest
# 仅切换用户
$ su daodaotest
# 切换用户,并同时切换环境变量
$ su - daodaotest
# 以 root 身份安装软件
$ sudo yum install jq -y
# 查看当前有效用户
$ whoami
# 查看当前实际用户
$ who am i
# 退出
$ exit
# 删除用户,强制删除并删除与用户的相关文件(home、邮件等)
$ userdel -rf daodaotest
# 删除组
$ groupdel daodaotest
用户和组相关文件
# Linux 用户文件:
$ cat /etc/passwd
# 用户名:口令:用户标识号:组标识号:注释性描述:主目录:默认 Shell
pe:x:1001:1001::/home/pe:/bin/bash
# Linux 用户影子文件
$ cat /etc/shadow
# 用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
pe:$6$rounds=656000$qX8tIa/2E34tao1V$6xKEJc9pGhY/lqLFKPuzqt0Kd8nROPy3RdGS4a7HyCN.upgPfYZ.eF453P6.Y4u0GifVui8KdMPW4NdjhW1cn0:18239:0:99999:7:::
# Linux 用户组文件
$ cat /etc/group
# 组名:口令:组标识号:组用户列表
pe:x:1001:peftp,ruiftp,hx
# Linux 组影子文件
$ cat /etc/gshadow
# 组名:加密密码:组管理员:组附加用户列表
pe:!::peftp,ruiftp,hx
文件和目录
文件类型
文件类型 |
说明 |
---|---|
b |
面向块的设备文件(block-oriented device file) |
c |
面向字符的设备文件(charcter-oriented device file) |
d |
目录(directroy) |
f |
文件(regular file) |
l |
符号链接文件(symbolic link) |
p |
管道文件(pipe)或命名管道文件(named pipe) |
命令列表
列目录内容
文件和目录常用命令
# 长数据格式列出所有目录,并按时间排序
$ ls -lat
# 长数据格式列出所有目录,并按时间反序排序
$ ls -lart
# 长数据格式列出所有目录,并按大小反序排序
$ ls -larS
# 进入 home 目录
$ cd ~
或
$ cd
# 进入上一次工作目录
$ cd -
# 进入上层目录
$ cd ..
# 显示当前目录
$ pwd
# 查看软链接的实际路径
$ pwd -P
# 递归创建目录
$ mkdir -p daodaotest/test
# 递归删除目录
$ rmdir -p daodaotest/test
# 创建文本
$ touch 1.txt
# 查看文件类型
$ file 1.txt
# 复制文件
$ cp 1.txt 2.txt
# 查看文件 md5
$ md5sum 1.txt 2.txt
# 比较文本
$ diff 1.txt 2.txt
# 递归复制目录
$ cp -r daodaotest daodaotest2
# 修改文件名称
$ mv daodaotest2 daodaotest22
# 移动文件或目录
$ mv 2.txt daodaotest22
# 删除文件
$ rm 2.txt
# 强制递归删除
$ rm -rf daodaotest
# 显示树状目录和文件
$ tree .
# 仅显示树状目录
$ tree -d .
# 显示指定层级目录和问题
$ tree -L 2 .
# 查看文本内容
$ cat /etc/passwd
$ more /etc/passwd
$ less /etc/passwd
$ nl /etc/passwd
# 与 cat 相反,从最后一行开始查看文本内容
$ tac /etc/passwd
# 统计行数
$ ls -l | wc -l
$ cat /etc/passwd | wc -l
# 查看前几行
$ head -5 /etc/passwd
# 动态查看文本内容
$ tail -f /var/log/messages
显示部分行内容
详见:[Linux 打印文本部分行内容(前几行,指定行,中间几行,跨行,奇偶行,后几行,最后一行,匹配行)]()
查找
在 PATH 路径中查找命令位置
查找常用命令
# 操作 grep 命令
$ which grep
alias grep='grep --color=auto'
/usr/bin/grep
$ whereis grep
grep: /usr/bin/grep /usr/share/man/man1/grep.1.gz /usr/share/man/man1p/grep.1p.gz
$ locate /bin/grep
/usr/bin/grep
# 查找所有 .sh 结尾的文件
$ find . -name "*.sh"
# 查找当前路径下的所有目录
$ find . -type d
# 查找当前路径下的所有文件
$ find . -type f
# 查找当前路径下的所有文件,并列出来
$ find . -type f -exec ls -l {}
# 查找7天前的以 .log 结果的文件,确认之后删除
$ find . -name "*.log" -mtime +7 -ok rm {} ;
# 查找关键字
$ grep root /etc/passwd
# 正则表达式查找
$ grep "/.*sh" /etc/passwd
# 递归(-r) 查找目录下的所有文件
$ grep -r LANG /etc
# 递归(-r) 查找目录下的所有文件,排除指定目录和文件
$ grep -r --exclude-dir={yum,ssh,profile.d,rc.d,ansible} --exclude=*.conf LANG /etc
# 查找关键字,并打印前(-B),后(-A),前后(-C)各多少行
$ grep root -C 1 /etc/passwd
# 不区分大小写(-i)查找关键字,并打印行号(-n)
$ grep -i ROOT -n /etc/passwd
# 反向选择,输出没有匹配的行
$ grep -v root /etc/passwd
权限
权限码
权限 |
二进制 |
八进制 |
描述 |
---|---|---|---|
--- |
000 |
0 |
无权限 |
--x |
001 |
1 |
只有执行权限 |
-w- |
010 |
2 |
只有写入权限 |
-wx |
011 |
3 |
写和执行权限 |
r-- |
100 |
4 |
读权限 |
r-x |
101 |
5 |
读取和执行的权限 |
rw- |
110 |
6 |
读取的写入的权限 |
rwx |
111 |
7 |
所有权限 |
常见权限表
权限 |
说明 |
---|---|
-rw------- (600) |
只有拥有者有读写权限 |
-rw-r--r-- (644) |
只有拥有者有读写权限;而属组用户和其他用户只有读权限 |
-rwx------ (700) |
只有拥有者有读、写、执行权限 |
-rwxr-xr-x (755) |
拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限 |
-rwx--x--x (711) |
拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限 |
-rw-rw-rw- (666) |
所有用户都有文件读、写权限 |
-rwxrwxrwx (777) |
所有用户都有读、写、执行权限 |
命令列表
修改文件权限
umask
权限常用命令
# 修改文件权限
$ chmod 755 test.txt
$ chmod +rw test.txt
# 修改文件权限,递归(-R)修改
$ chmod -R 755 /tmp/daodaotest
# 修改文件属主用户和属组
$ chown jlh.jlh test.txt
# 修改文件属组用户
$ chgrp jlh test.txt
进程
显示当前系统正在执行的进程的相关信息
# 显示当前进程情况,输入 h 查看帮助
$ top
# 查看 java 进程
$ ps -ef | grep java
# 强制 kill 掉进程
$ kill -9 <pid>
# kill 所有进程
$ killall -9 php-fpm
Linux 查询应用进程号、端口、文件(知道其中之一查询其他)
详见: Linux 查询应用进程号、端口、文件(知道其中之一查询其他)
压缩解压
Linux 常见的压缩包格式:tar、gz、tar.gz、bz2、tar.bz2、zip
压缩率一般来说:
tar.bz2 > tar.gz > zip > tar
tar、tar.gz 压缩解压
tar
tar 是最常用的解压缩命令。
参数说明:
-c 建立新的压缩文件
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-v 显示操作过程
-k 保留源文件不覆盖
-C 切换到指定目录
-f 指定压缩文件
--delete 删除包中文件
--strip-components 去除目录
--add-file 向包中添加文件
# 归档 tar 包,不压缩
$ tar -cvf test.tar test1.log test2.log
$ tar -
# 仅查看包中文件,不解压
$ tar -tvf test.tar
# 归档并压缩为 tar.gz、tar.bz2
$ tar -zcvf test.tar.gz test1.log test2.log
$ tar -jcvf test.tar.bz2 test1.log test2.log
# 解压
$ tar -xvf test.tar
$ tar -zxvf test.tar.gz
$ tar -jxvf test.tar.bz2
# 解压到指定目录
$ tar -xvf test.tar -C dir
zip & unzip
参数说明:
# zip
-d 从压缩文件内删除指定的文件。
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
-j 只保存文件名称及其内容,而不存放任何目录名称。
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-u 更换较新的文件到压缩文件内。
-v 显示指令执行过程或显示版本信息。
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
- <压缩效率> 压缩效率是一个介于1-9的数值。
# unzip
-l 显示压缩文件内所包含的文件
-j 只保存文件名称及其内容,而不存放任何目录名称。
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
-v 显示指令执行过程或显示版本信息。
-d 指定解压目录,目录不存在会创建
# 打包 test 目录下的文件
$ zip -r test.zip test/
# 打包 test 目录下文件,且压缩包不带 test 目录
$ zip -rj test.zip test/
# 指定压缩比率,数值(1-9)越大,压缩率越高,耗时越长
$ zip -r8 test.zip test/*
# 解压 zip 包
$ unzip test.zip -d dir
# 查看压缩包中的文件
$ unzip -l test.zip
# 查看更多信息,例如crc校验信息等
$ unzip -v test.zip
# 解压jar包
$ unzip -o java.jar -d dir
gzip & unzip
参数说明:
-k 保留源文件
-d 解开压缩文件
-r 递归处理,将指定目录下的所有文件及子目录一并处理
-v 显示指令执行过程
# 压缩
$ gzip test1.log
# 解压
$ gunzip test1.log
磁盘
报告文件系统磁盘空间的使用情况
磁盘常用命令
# 查看磁盘使用情况,易读方式
$ df -h
# 查看 inode 使用情况
$ df -i
# 查看磁盘占用空间,易读方式
$ du -h
# 查看本目录磁盘占用总大小
$ du -sh
# 查看指定层级目录的大小
$ du -h --max-depth=2 .
$ du -h -d 2 .
# 查看系统硬盘
$ fdisk -l
json 解析命令 jq
- 深入浅出 Retrofit,这么牛逼的框架你们还不来看看?
- nwui —— 又一个go语言图形界面解决方案
- Golang 通用连接池
- 解决JS操作Cookies出现的乱码问题,修复WordPress评论乱码
- 分享一个WordPress外链跳转教程,兼容知更鸟暗箱下载和文章索引
- 让WordPress RSS/Feed订阅数据延迟发布,附RSS技巧集锦
- Linux系统防CC攻击自动拉黑IP增强版Shell脚本
- 利用artDialog给网站添加一个能显示搜索来路和关键词的欢迎框
- 解决启用wp super cache缓存后,页面追加多个斜杠仍然可以访问的隐患
- WordPress集成底部滚动推荐条,让好文章不再被埋没
- go语言base64加密解密的方法
- WordPress酷炫CSS3读者墙,排名按年度、本月、本周划分的小方法
- WordPress给文章添加百度是否已收录查询和显示功能(自定义栏目优化版)
- PHP制作百度站内搜索绿色通道的网页列表数据文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 开篇讲--关于Kali的碎碎念
- Mysql服务器SQL模式 (官方精译)
- 如何用Prometheus和Grafana监控Kubernetes集群?
- linux实时文件事件监听--inotify
- MySQL事务原理&实战【官方精译】
- 俗话:MySQL索引
- 基于飞桨复现CVPR 2016 MCNN的过程解析:教你更精确估算人流密度
- mysql各种引擎对比、实战
- 接球小游戏玩腻了?换个姿势让PaddleX帮你吊打游戏系统
- mysql事务隔离级别详解和实战
- ELK+FileBeat+Kafka分布式系统搭建图文教程
- Flink CEP 原理和案例详解
- 实战开发,使用 Spring Session 与 Spring security 完成网站登录改造!!
- 分布式计算框架Gearman原理详解
- 【从0开始の全记录】Flume+Kafka+Spark+Spring Boot 统计网页访问量项目