原文地址
前言
过于简单的命令就一笔带过了,一年也用不到一次的,比如挂载这种内容也不会记录,这里就回忆一下常用的命令结构
基本命令
命令符号
& 后台执行,&& 前一条执行成功,执行下一条,| 管道符,|| 前一条执行失败,执行下一条,> 标准输出重定向复写,>> 标准输出重定向追加,2> 错误输出重定向复写,2>> 错误输出重定向追加,&> 标准/错误输出重定向复写,&>> 标准/错误输出重定向追加
命令正则
linux 命令中大部分正则参数默认不支持 + 和 ? 以及 {}
通配符
* 任意数量字符,? 任意一个字符,[] 单字符匹配
rm log.03*; rm log.032?; rm log.032[0-3]; rm log.032[^4-9];
cd
cd; cd -; cd ~; cd ../dir; cd /home/website;
pwd
pwd; whoami;
ls
默认文件名排序 -t 时间倒序 -S 文件大小倒序
ll -ha; ll -tr; ll -Sr; ll /home/website;
mkdir
-p 递归创建 -m 自定义权限
mkdir -p /home/website/tmp; mkdir -m 711 test;
rmdir
-p 递归删除,需要保证递归类中只有递归项一个文件,否则上层递归项因非空不能删除,总之比较鸡肋的命令
rmdir -p test1/test2; rmdir test1/test2;
touch
touch跟参数可以修改文件访问时间、状态修改时间,默认为当前时间,详细
touch /root; touch tmp.txt;
ln
参数一为源文件,参数二位目标文件,-s 软连接,-f 强制,默认硬连接
软连接指向文件,硬链接指向实际的inode,inode存数据基本信息实际信息存在指向的block块中,硬链接不会建立新的 inode 信息,硬链接不能跨文件系统,硬链接只能指向文件
ln result/1.txt 1h.txt; ln -s result/1.txt 1s.txt
cp
参数一为源文件,参数二位目标文件,-a 保留源文件属性(-p)、递归(-r)、源文件软链接则目标文件软链接,否则复制源文件(-p),-i 覆盖询问
当目标文件/结尾时候不改名,当文件名结尾时候改名,类似命令同理
cp 1.txt ./tmp/1rename.txt; cp 1.txt ./tmp/; cp -a result resultcopy
rm
-f 强制删除,不询问 -r 删除包含所有的文件/文件夹
rm -rf /root/tmpneeddelte;
mv
-f 强制覆盖,-i 询问,自动递归不需要命令
mv resultcopy/ resultcc
env
环境变量
env; echo $HOME;
which
获取命令所在的绝对路径,如果在 PATH 包含的目录中,有多个目录都包含某命令的可执行文件,那么会执行先搜索到的可执行文件。
which rm;
添加PATH
echo $PATH; PATH=$PATH:/root/tmp;
vim /etc/environment
#PATH="/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin:/root:tmp"
ssh
这里介绍下windows上传文件到linux的命令
#passwd
scp -P 22 ./your_file.txt user@192.168.1.1:/home/dir
#ssh
scp -i your_ssh_path -P 22 ./your_file.txt user@192.168.1.1:/home/dir
打包压缩
tar包
-c 打包,-f 指定包名,-v 显示过程,-x 解包,-t 看包,-C 解包位置
#打包
tar -cvf test.tar ./resultcc/
#看包
tar -tf test.tar
#解包
tar -xvf test.tar
tar -xvf test.tar -C /tmp
zip包
zip压缩,-r 压缩目录,-v 显示过程,-u 添加压缩文件,-d 删除部分压缩文件
#压缩
zip -r test.zip ./resultcc/
#增压
zip -u test.zip ./3.txt
#减压
zip -d test.zip resultcc/1.txt
unzip解压,-t 测试解压,-d 指定目录
#测试解压
unzip -t test.zip
#解压部分
unzip test.zip 3.txt
unzip -d ./tmp test.zip
gz包
#压缩获得test.tar.gz
gzip test.tar
#打包压缩
tar -zcvf test.tar.gz ./resultcc/
#解压缩拆包
tar -zxvf test.tar.gz -C /tmp
bz2包
#打包压缩
tar -jcvf test.tar.bz2 ./resultcc/
#解压缩拆包
tar -jxvf test.tar.bz2 -C /tmp
文本编辑器
多窗口
vim -O 1.txt 2.txt
ctrl + ww 切换窗口
:vs2.txt、:vs/home/website/test/2.txt vim内添加多窗口
命令模式
i 光标前输入,I 光标行首输入,o 光标下行输入,O 光标上行输入,a 光标后输入,A 光标处行尾输入
/[正则表达式] 光标向前检索,?[正则表达式] 光标向后检索,n 检索框后跳,N 检索框前跳
x 删除光标字符 dd 删除光标行到剪贴板 ndd 删除光标n行到剪贴板 dw 删除光标单词到剪贴板
yy 复制光标行到剪贴板 nyy 复制光标n行到剪贴板 dw 复制光标单词到剪贴板
p 行,粘贴到光标下行 词,粘贴到光标后 P 行,粘贴到光标上行,词,粘贴到光标前
^ 光标到达行首,$ 光标到大行尾,gg 光标到开头,G光标到文尾,nG 到达第n行
u 撤销 ctrl + r 反撤销
ZZ 保存退出
编辑模式
:wq、:wq!、:q、:q!、:w、:w!
:![linux命令] vim内执行命令,:r!命令 将执行命令的结果写入vim
:n 到达第n行,:set nu 显示行号,:set nonu 取消行号
:n1,n2s/a1/a2/g n1行到n2行所有a1用a2替换,:%s/a1/a2/g 全文替换,:n1,n2d 删除n1到n2的内容
:1,5s/^/#/g 井号注释,:1,5/^#//g 取消井号注释,:1,5s/^g 添加双斜杠注释
文本处理
正则
#IP地址正则
^(2(5[0-5]|[0-4]\d)|\d|[1-9]\d|1\d{2})(\.(2(5[0-5]|5[0-4]\d)|\d|[1-9]\d|1\d{2})){3}$
#匹配包含换行符的所有字符
[\s\S]
[\w\W]
#使用[.\n]的方式是不行的在[]中.默认就是普通的.不再是匹配任意除了换行符的字符,所以如果是匹配Java中所有注释可以使用
/\*\*[\s\S]*\*/
重定向
输入重定向
< 后跟文件,将指定文件作为命令的输入设备,<< 后跟分界符,从标准输入设备(键盘)中读入,直到遇到分界符才停止
echo << 0
> aa
> bb
> 0
aa
bb
输出重定向
> 后跟文件,标准输出复写到文件,>> 后跟文件,标准输出追加到文件
2> 后跟文件,错误输出复写到文件,2>> 后跟文件,错误输出追加到文件
&> 后跟文件,标准/错误输出复写到文件,&>> 后跟文件,标准/错误输出追加到文件
> [文件] 2>&1 标准/错误输出复写到文件,>> [文件] 2>&1 标准/错误输出追加到文件
#标准输出
ls 1.txt > stdout.txt
#错误输出
ls notexist.txt 2> error.txt
#标准/错误输出
ls 1.txt &>> all.txt
ls notexist.txt &>> all.txt
ls 1.txt >> all.txt 2>&1
ls notexist.txt >> all.txt 2>&1
#分开输出
ls 1.txt > stdout.txt 2> error.txt
ls notexist.txt > stdout.txt 2> error.txt
cat
打印文件全部内容,或者将两个文件连接,cat 1.txt,cat 1.txt >> 2.txt,cat 1.txt > 2.txt
more
分页显示文本文件的内容,-n n=单次显示的行数,+n n=开始行数
#从第10行开始每页显示5行
more +10 -5 1.txt
交互模式:q/Q 退出,v 进入编辑模式,enter 下一行,space 下一页,= 显示当前行
less
分页显示文本文件的内容,比起more,less还可以向前看,默认情况下到达文尾不会退出,less和vim一样的交互包括滚动,退出,跳文首尾,检索
-N 显示/不显示每行行数,+n n=开始行数
less +50 -N 1.txt
交互模式:q/Q 退出,v 进入编辑模式,enter 下一行,space 下一页,-N 显示/不显示每行行数,大部分交互和vim一样
head
显示指定文件前若干行的文件内容,-n 显示前n行
#两种命令效果一样
head -n 5 1.txt; head -5 1.txt
tail
查看文件末尾的数据,-n 显示后n行,-f follow文件新增
#两种命令效果一样
tail -n 5 1.txt; tail -5 1.txt
tail -f 1.txt;
grep
从文件中找到包含指定信息的那些行,-c 仅列出满足条件的行数,-l 仅列出匹配的文件名,-i 忽略大小写,-n 列出行号,-r 递归目录检索
grep -n ^bb 3.txt
grep -n bb *
grep -nr /root/test
sed
根据脚本命令来处理文本文件中的数据,每次仅读取一行内容,根据规则匹配并修改数据存到缓冲区,输出结果,-i 同时修改源文件,-f 文件格式脚本命令
匹配替换脚本命令
sed '1,5s/aa/zz/g' 3.txt; echo "abcdefg" | sed 's/ab/zz/g'
echo "1,5s/aa/zz/g" >> command.txt && sed -f command.txt 3.txt
删除脚本命令
sed '2,3d' 3.txt; sed '3,$d' 3.txt;
插入脚本命令
#第一行下行写入zzzz,每一行下行写入zzzz,最后一行下行写入zzzzz
sed '1azzzz' 3.txt; sed 'azzzz' 3.txt; sed '$zzzz' 3.txt
#第一行上行写入zzzz,每一行上行写入zzzz
sed '1izzzz' 3.txt; sed 'izzzz' 3.txt
直接替换脚本命令
sed '3clalalalaa' 3.txt
复合命令
#用分号聚合是有坑的,如果写成1iqqqqq;3d的话,会被认为是在第一行前插入“qqqqq;3d”,使用管道符会比较稳
sed '1,5s/aa/zz/g;3d;1iqqqqq' 3.txt
sed '1,5s/aa/zz/g' 3.txt | sed '1iqqqqqq' | sed '3d'
awk
根据匹配处理文件内容并且输出,读入行,如果行满足单引号//中的正则表达,则执行后面的{}内的命令
-F 指定分隔符,默认空格,-f 文件格式脚本命令, 0 行数据, 0 行数据, 0行数据,n 行分隔符分割后的第n个变量,所有行开始前命令BEGIN,所有行结束后命令END
#空白行输出black line
awk '/^$/ {print "blank line"}' 3.txt
#输出每行第一个分割量
awk '{print $1}' 4.txt
#复合命令 每行后面加110输出
awk '{$3=$3+"110"; print $0}' 3.txt
echo '{$3=$3" 110"; print $0}' > command.txt && awk -F : -f command.txt 4.txt
#开始和结束
awk 'BEGIN {print "awk start"} {$3=$3+"110"; print $0} END{print "awk end"}' 4.txt
find
find /root/ -name "*.txt"
sort
默认分隔符为空格
ps aux | sort -rk 4
#冒号为分隔符倒序排列第三列
sort -r -t : -k 3 4.txt
软件包
yum
#未安装
yum list; yum list nginx; yum search nginx; yum info nginx
#安装
yum -y install; yum -y update; yum -y update nginx; yum remove nginx
用户
#用户
useradd zhangsan; passwd zhangsan; userdel zhangsan
#组
groupadd group1; groupdel group1
#切换权限
su -root; su root; sudo systemctl restart nginx
权限
#文件/文件夹权限
chgrp group1 test.log; chown -R zhangsan /home/gono/; chown zhangsan test.log; chown 755 test.log
#获取默认权限
umask
系统
ps
查看系统中所有运行进程的详细信息,u 显示归属用户和内存占用,-e 显示所有,a 显示终端所有进程,x 显示没有控制端的进程,-l 长格式显示,-f 拓展显示输出
#查看系统中所有进程,按照内存占用逆序
ps aux; ps aux | sort -rk 3
#查看系统所有进程,并且看到父进程和pid以及优先级
ps -ef
top
动态地持续监听进程地运行状态,-d 指定更新秒数默认3秒
交互模式:? 交互帮助,P cpu使用率排序,M 内存占有率排序
load average:1min,5min,15min内的平均负载,一般不能超过核心数量
id:空闲cpu占比,wa/hi/si/st:各种状态cpu占比
mem:内存总容量kb
lsof
#端口号/程序名/PID互查
lsof -i | grep 10032
lsof -i:1264
kill
kill -s TERM 18627
kill -9 18627
原文地址
原文链接