Referance
基础操作
1. 学会使用命令帮助
-k xxx // 忘记具体命令
man // 查看具体信息,info也可
whatis xxx -w "ca*" // 正则表达式查找
whatis // 同whatis
info xxx // 查看具体参数 man xxx
Linux分
(1)、用户可以操作的命令或者是可执行文件
(2)、系统核心可调用的函数与工具等
(3)、一些常用的函数与数据库
(4)、设备文件的说明
(5)、设置文件或者某些文件的格式
(6)、游戏
(7)、惯例与协议等。例如Linux标准文件系统、网络协议、ASCⅡ,码等说明内容
(8)、系统管理员可用的管理条令
(9)、与内核有关的文件
查找程序的bin文件夹所在位置
which xxxx
查看程序的搜索路径(查看执行的是哪一个程序)
whereis xxx
2. 文件及目录管理
文件,文件夹基本操作
// 列出当前目录下的所有文件
ls .x // 创建一个文件
touch xx// 创建一个文件夹
mkdir xxx FILE PATH // 移动文件到指定位置
mv // 复制文件到那个文件(可以写路径)
cp SRC DESC -r ./aaa ./bbb // 复制文件夹
cp -rf // 删除(加单粗暴的删除) rm
查看文件个数
./ |wc -l // 官方写法,个人觉得不太方便记忆
find | cat -n // 文件前面加序号 ls
目录切换
// 进入到xx目录
cd xxx - // 进入到场次的路径
cd ~ // 进入到家目录
cd / // 记入到根目录
cd // 显示当前路径 pwd
列出文件
// 列出所有文件
ls // 列出详细信息
ll -lrt // 时间排序 ls
别名修改
修改家目录下的bachrc
文件设置命令别名,想当于快捷方式
='ls -lrt' // 修改别名为lt alias lt
文件查找
./ -name "xxx" // 在当前目录查找xxx, xxx可以是正则表达式 find
文件内容查看
cat
vim
head-10 xxx // 看前10行
head -10 xxx // 看倒数10行
tail -f xxx // 动态显示文本最新信息
tail -1 xx-2 // 文件对比 diff xx
查找文件内容
'str' file // 查找文件内容
egrep 'str' file > outFile // 将查找到的内容输出到outFile egrep
权限修改
// 修改文件拥有者
chown user file +x file // 所用用户添加可执行权限a(all) u(user) g(group) o(other) chmod a
文件创建别名(快捷方式)
-1 file-2 // 硬连接, 相当于复制
ln file-s file1 file2 // 软连接, 相当于快捷方式 ln
管道和重定向
批处理命令连接执行,使用 | 串联: 使用分号 ; 前面成功,则执行后面一条,否则,不执行:&& 前面失败,则后一条执行: ||
./ && echo ok || echo failed
ls
if ls ./;then echo ok; else echo failed;fi // 和上面等同
:> a.txt // 清空文件
.text >> a.out // 重定向, 就是将原本输出到控制台的信息, 重新输出到别的地方 ls a
环境变量设置
bashrc: 系统启动时执行的文件 profile: 用户登陆后执行的文件
~/.bashrc
vim /etc/profile
vim
//修改其中的PATH变量
=$APPDIR:/opt/app/soft/bin:$PATH:/usr/local/bin:$TUXDIR/bin:$ORACLE_HOME/bin;export PATH PATH
bash快捷键
-U 删除光标到行首的所有字符,在某些设置下,删除全行
Ctl-K 删除光标到行尾的所有字符
Ctl-W 删除当前光标到前边的最近一个空格之间的字符
Ctl-H backspace,删除光标前边的字符
Ctl
-R 匹配最相近的一个执行过的命令,然后输出
Ctl-J 回车
Ctl-B 左移一个字符
Ctl-B 左移一个单词(ubuntu失败)
alt-F 右移一个字符
Ctl-F 右移一个单词(ubuntu失败)
alt-A 移动到最前面
Ctl-E 移动到最后面
Ctl-P 上一条指令
Ctl-N 下一条指令(执行过的指令中上翻下翻,==>上/下 键: 终于不用按上下了, 太爽了!!!)
Ctl-L 清屏(不用clear了, 解决痛点+1,爽+1) Ctl
综合应用
查找record.log中包含AAA,但不包含BBB的记录的总数:
-v record.log | grep AAA | grep -v BBB | wc -l // cat -v 显示文件原本在中的数据, 对中文字符有影响 直接翻译成acsii字符 cat
3. 文本处理
文件查找
./ -name "*.txt" // 文件名查找
find ./ -regex ".*?.txt" // 正则表达式查找
find ./ ! -name "*.txt" // 文件名反向查找
find . -maxdepth 1 -type f // 指定深度查找, 深度为1 find
文件操作时间查询
-atime 访问时间 (单位是天,分钟单位则是-amin,以下类似) -mtime 修改时间 (内容被修改) -ctime 变化时间 (元数据或权限变化)
./ -atime 7 -type f // 查找最近第7天修改的文件 f(file)
find ./ -atime -7 -type f // 最近7天内
find ./ -atime +7 -type f // 最近7天前 find
按照大小查询文件
./ -type f -size +2 // 查找大于2k的文件
find ./ -type f -size -2 // 查找小于2k的文件 find
按照文件创建用户查找
./ -type f -user root // root用户创建的文件 find
删除指定条件的文件
./ -type f -name "*.txt" -delete // 删除当前目录下的xxx.txt文件 find
动作执行
exec后面可以跟执行的命令, {}代表符合条件的所有文件
./ -type f -name "*.txt" -exec cp {} ./OtherDir \ ; // 将当前文件夹中的所有txt文件复制到当前目录下的OtherDir中 find
结合多个命令
如果需要后续执行多个命令,可以将多个命令写成一个脚本。然后 -exec 调用时执行脚本即可:
-exec ./commands.sh {} \;
-print的定界符
默认使用’’作为文件的定界符; -print0 使用’\0’作为文件的定界符,这样就可以搜索包含空格的文件;
grep文本搜索
-o 只输出匹配的文本行 -v 只输出没有匹配的文本行 -c 统计文件中包含文本的次数 grep -c “text” filename -n 打印匹配的行号 -i 搜索时忽略大小写 -l 只打印文件名
-i -n 'hello' a.txt // 查找文本中hello的位置, 忽略大小写 grep
在多级目录中对文本递归搜索(程序员搜代码的最爱):
"class" . -R -n grep
xargs命令行参数转换
-d 定义定界符 (默认为空格 多行的定界符为 n) -n 指定输出为多行 -I {} 指定替换字符串,这个字符串在xargs扩展时会被替换掉,用于待执行的命令需要多个参数时 -0:指定0为输入定界
.txt | xargs -n 3 // 将内容三行在一行显示
cat xxx.txt | xargs -i echo -{} // 将xx.txt中的数据按行读取,通过echo输出,并在前加 - cat xxx
sort
排序 -n 按数字进行排序 VS -d 按字典序进行排序 -r 逆序排序 -k N 指定按第N列排序
-n xxx.txt // 默认n排序
sort -r xxx.txt // 逆序
sort -d xxx.txt // 字典排序
sort
.txt | uniq // 去重
sort xxx.txt | uniq -c // 每行出现次数
sort xxx.txt | uniq -d sort xxx
文本拼接
// F1和F2进行拼接, 是对应行进行拼接,不知直接拼到下面, 默认分割是以tab进行分割的
paste F1 F2 -d "," // 使用","进行分割 past F1 F2
字数统计
-l xxxx // 统计行数
wc -w xxxx // 统计单词数
wc -c xxxx // 统计字符数
wc // 返回[行数, 单词数, 字符数] wc xxx
文本替换 - sed
's/xxx/***/' FILE // 替换每行第一个匹配的字符[将FILE中的xxx替换为***]
sed 's/xxx/***/g' FILE // 替换匹配到的所有的字符
sed -i 's/xxx/***/' FILE // 直接修改原文[上面的写法需要将修改后的内容重定位输出到新的文件才可以保存]
sed -i '/^$/d' FILE // 直接将文件中的空白行删除[文本末尾的空白行没有删除]
sed
= 9999
str "s/xx/$str/" FILE // 双引号会替换变量的值, 单引号不会, 会将str替换为9999 sed
awk数据流处理
awk脚本结构
' BEGIN{ statements } statements2 END{ statements } ' awk
- 工作方式 1.执行begin中语句块; 2.从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕; 3.执行end语句块;
123 | awk 'BEGIN {print "Start"}{ print } END{print "END"}' // 格式很关键,标点,大小写 echo
print 以逗号分割时,参数以空格定界;
|awk '{a=1;b=2;c="dasdsa";print a,b,c;}' echo
print字符串拼接
|awk '{a=1;b=2;c="dasdsa";print a" ----***" b"----** " c;}'
echo
// 输出
1 ----***2----** dasdsa
awk - 特殊变量: NR NF $0 $1 $2
NR:表示记录数量,在执行过程中对应当前行号;
.txt | awk '{print NR}' // 输出执行到的行数
cat xxx.txt | awk '{print NF}' // 输出执行的当前行的单词数
cat xxx.txt | awk '{print $2}' // 输出当前行的第2个单词 cat xxx
NF:表示字段数量,在执行过程总对应当前行的字段数;
$0:这个变量包含执行过程中当前行的文本内容;
$1:第一个字段的文本内容;
$2:第二个字段的文本内容;
// 每行求和 -e是将转移字符输出出来
-e "1\n 2\n 3\n 4\n" |awk 'BEGIN{sum=0;}{sum+=$1;}END{print sum}' // 输出10 echo
awk - 传递外部变量
= 9999
var | awk vara=$var '{print vara}' // 传递外部变量, 变量放前后都行,但是不能加括号, 默认来自输入
echo | awk vara=$var '{print vara}' FILE // 个人使用失败,可能是语法哪里写错了 echo
用样式对awk处理的行进行过滤
'NR < 5' #行号小于5
awk 'NR==1,NR==4 {print}' file #行号等于1和4的打印出来
awk '/linux/' #包含linux文本的行(可以用正则表达式来指定,超级强大)
awk '!/linux/' #不包含linux文本的行 awk
使用-F来设置定界符(默认为空格)
-F: '{print $NF}' /etc/passwd awk
4. 磁盘管理
查看磁盘大小以及使用情况
-h: human缩写,以易读的方式显示结果(即带单位:比如M/G,如果不加这个参数,显示的数字以B为单位
-h // 查看磁盘信息 df
当前目录所占大小
-h 人性化显示 -s 递归整个目录的大小
-sh // 当前文件夹占用磁盘大小 du
查看当前目录下所有子文件夹排序后的大小:
-sh `ls`| sort // 当前文件夹中的文件按照大小排序 du
打包,压缩,解压缩
tar -cvf example.tar example ->将example文件夹归档变成了example.tar - c: create创建档案 - v: verbose显示详情 - f: file表示文件
-cvf example.tar example // 只打包不压缩
tar .tar // 压缩后生成-> xxx.tar.gz
gzip xxx.tar.gz // 解压后-> xxx.tar
gunzip xxx-xvf xxx.tar.gz // 解压后-> xxx tar
tar 解压参数
-z 解压gz文件 -j 解压bz2文件 -J 解压xz文件
5. 进程管理工具
查询正在运行的进程
-ef // 查询所有进程
ps -ef|prep root // 查询root用户的进程
ps
-l ba // 查询含有ba关键字的进程->查询进程ID(适合只记得部分进程字段)
pgrep
-ajx // 查看所有信息的完整信息
ps
// 实时查看进程信息 实时更新 top
查看端口占用情况
-i:3306 // 查看3306的端口占用情况 lsof
查看用户username的进程所打开的文件
lsof -u username
利用进程名 查看进程使用的文件
-c mysql // 查看mysql进程占用的文件 lsof
利用pid 查看进程使用的文件
-i 22 // 查询占用22号端口的进程
ls -p 774 // 根据进程pid号774查询 文件使用情况 lsof
查询制定文件夹内文件夹的使用进程
+d ./ // 查询当前文件夹内的文件使用情况(进程信息) lsof
结束进程
-c NAME // 查询进程的pid
lsof // 结束PID进程 kill PID
- CTRL+Z挂起进程并放入后台
- jobs 显示当前暂停的进程
- bg %N 使第N个任务在后台运行(%前有空格)
- fg %N 使第N个任务在前台运行 默认bg,fg不带%N时表示对最后一个进程操作!
动态查看-top
P:根据CPU使用百分比大小进行排序。 M:根据驻留内存大小进行排序。 i:使top不显示任何闲置或者僵死进程。
// top之后按下p/m/i top
6. 性能监控
监控cpu
-u 1 2 // 查看cpu使用情况, 一秒钟采样两次, ubuntu没有sar需要安装
sat 1 2 // 和上面等效 vmstart
查看内存
// 硬盘使用情况
free -m // 内存使用情况 free
7. 网络工具
查询网络服务和端口
-a // 查看所有端口
netstat -at // 列出所有tcp端口
netstat -au // 列出所有udp端口 netstat
列出所有监听的服务 - netstat -x
[ netstat ] -a 显示所有连接和侦听端口,默认不显示LISTEN相关 -b 显示在创建每个连接或侦听端口时涉及的可执行程序。在某些情况下,已知可执行程序承载多个独立的组件,这些情况下,显示创建连接或侦听端口时涉及的组件序列。在此情况下,可执行程序的名称位于底部 [] 中,它调用的组件位于顶部,直至达到 TCP/IP。注意,此选项可能很耗时,并且在你没有足够权限时可能失败。 -e 显示以太网统计信息。此选项可以与 -s 选项结合使用。
-i 显示网络接口列表 -n 以数字形式显示地址和端口号。 -o 显示拥有的与每个连接关联的进程 ID。 -p proto 显示 proto 指定的协议的连接;proto可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。 -q 显示所有连接、侦听端口和绑定的非侦听 TCP 端口。绑定的非侦听端口不一定与活动连接相关联。 -r 显示路由表。 -s 显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;-p 选项可用于指定默认的子网。 interval 重新显示选定的统计信息,各个显示间暂停的间隔秒数。按 CTRL+C 停止重新显示统计信息。如果省略,则 netstat 将打印当前的配置信息一次。 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -c 每隔一个固定时间,执行该netstat命令,netstat 将每隔一秒输出网络信息。
-l // 列出所有监听的服务 netstat
8. 用户管理工具
添加用户
-m xxx // 添加xxx用户, 单独的添加,没有任何权限 以及密码 useradd
用户切换
// 切换xxx用户
su xxx // 切换root用户 su root
删除用户
-r xxx // 删除用户xxx
userdel -u xxx // 查询xxx用户PID
lsof -9 PID // 用户无法删除,显示进程占用, 先结束进程, 然后重新删除用户 kill
权限管理
使用chmod命令更改文件的读写权限,更改读写权限有两种方法,一种是字母方式,一种是数字方式
分组 - u:用户 - g:组 - o:其它用户 - a:所有用户
权限 - r:读 - w:写 - x:执行 数字方式:
数字方式直接设置所有权限,相比字母方式,更加简洁方便;
使用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。
+x FILE // 对FILE文件的所用户添加可执行程序
chmod a+x FILE // 对组用户添加可执行权限
chmod g777 FILE // 所有权限打开 chmod
修改拥有者
// 修改拥有者
chown USER File -R USER FILE // 递归所有文件夹修改拥有者 chown
环境变量
bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。
全局 | 用户 |
---|---|
bashrc(不登录) / profile(登录) | bashrc (不登录) / profile (登录) |
/etc/profile,/etc/bashrc 是系统全局环境变量设定 ~/.profile ~/.bashrc用户目录下的私有环境变量设定
全局 | 用户 |
---|---|
/etc/profile,/etc/bashrc | ~/.profile ~/.bashrc |
当登入系统获得一个shell进程时,其读取环境设置脚本分为三步:
首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d和/etc/inputrc 读取当前登录用户Home目录下的文件/.bash_profile,其次读取/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系 读取~/.bashrc /.profile与/.bashrc的区别:
这两者都具有个性化定制功能 ~/.profile可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次 ~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次
9. 系统管理及IPC资源管理
查看cpu信息
/etc/cpuinfo // 查看cpu信息 cat
查看内存信息
/etc/meminfo // 查看内存信息 cat
查看cpu架构
// 查案CPU架构 arch
ipcs资源查询
ipcs
参考: https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/03_text_processing.html