Linux 常用命令列表
常用命令列表
基本文件操作类
cd:进入目录,cd -上一个目录ls:目录列表,-rt安时间倒序,-l详情cp:复制文件,-r复制文件夹,-u以更新的方式复制mv:移动文件/文件夹rm:删除文件,-r删除文件夹,-f强制方式mkdir:创建文件夹-p,连父目录一起创建pwd:输出当前目录位置
权限操作类
su:chmod:修改文件/目录权限chown:修改文件/目录拥有者chgrp:修改文件/目录所归属组usermod:修改用户帐号的各项设定
用户与组
groups: 查看组
查看文件与编辑文件类
cat:用于连接文件并打印到标准输出设备上。合并多个文件cat *.sql >xxx.sqltail:命令可用于查看文件的内容history:显示历史执行命令grep:用于查找文件里符合条件的字符串。也可以提取指字符,如按正则表达式提取mac地址grep -E -o '(\w{2}:){5}\w{2}'tar:-cvf/xvf建立,还原备份文件的工具gzip:文件经它压缩过后,其名称后面会多出”.gz”的扩展名,-d解压find:指定目录下查找文件vim:编辑器sed:自动编辑一个或多个文件;简化对文件的反复操作awk:文本分析工具,详情wc:统计字数sort: 排序,-u去重,-n以数值方式比较,-t指定分隔符,-k指定第几列uniq: 去重,连续重复行去重,可以先 sort再uniq,实现去重xargs: 给其他命令传递参数的一个过滤器。拷贝文件ls *.jpg | xargs -n1 -I cp {} /data/images,删除文件sudo xargs rm -rf <filelist.txttee: 把一个标准输入,变成标准输出及一个或者多个文件输出。tr: 将字符进行替换压缩和删除。如删除数字echo "hello 123 world 456" | tr -d '0-9',大小转化echo "HELLO WORLD" | tr 'A-Z' 'a-z'
查看系统状态和系统操作
ps:显示当前进程的状态,-aux显示所有包含其他使用者的行程kill:于删除执行中的程序或工作,kill -0 xxx彻底杀死进程top:实时显示进程和线程的动态df:显示目前在Linux系统上的文件系统的磁盘使用情况统计uname:显示电脑以及操作系统的相关信息,-a,-m,-n,-s,-vifconfig:于显示或设置网络设备,主要用于看本机ipnetstat:用于显示网络状态service:服务管理,--status-all列出所有服务crontab:定时任务nohup:后台命令tmux: 新开命令行窗口w: 列当前用户last: 当前用户最近的登录记录lastlog: 所有用户的最近一次登录记录lsof: 查看当前系统文件的工具,lsof -i:22查看端口占用gpasswdsudo gpasswd -a ${USER} docker把当前用户添加到docker组中
多台之间机器
scp:scp root@192.168.2.3:/home/root/others/music /home/space/music/1.mp3
复杂的重点描述
sed
sed 功能强大,这里只写几个常用
sed -i 's/xxx/yyy/g' file: 把文件file内容中的所有xxx替换为yyysed -i 's/^db.host.*/db.host=1.1.1.1/g' testtxt.txt: 正则表达式,把以db.host开头的,进行替换。如果是动态内容,需要'"$XX"'这样写sed -i '1czzz' file: 把文件file中的第一行替换成zzzsed -i '$a end of file' file: 在文件file最后一行新增end of filesed -i ""s/\r//"" test.file: 去掉文件中的\r
动作说明
a:新增,a 的后面可以接字串,而这些字串会在新建在下一行c:取代,c 的后面可以接字串,这些字串可以取代指定位置的行d:删除i:插入,i 的后面可以接字串,而这些字串会在上一行出现p:打印,亦即将某个选择的数据印出s:搜寻并替换
awk
从输出列及筛选列的角度,功能可类简化版excelnet.txt 为处理样例,由netstat产生
- 输出对应列:
awk '{print $x}',$1..$n表示第几列。$0表示整个行。 - 格式化输出:
awk '{printf "%s %s\n",$4,$5}' - 过滤记录:
awk '$3==0 && $6=="LISTEN" ' net.txt。其他比较运算符:!=,>,<,>=,<= - 内建变量:
awk '$3==0 && $6=="LISTEN" || NR==1 ' net.txt输出表头 - 指定分格符:
awk 'BEGIN{FS=":"} {print $1,$3,$6}' /etc/passwd - 字符串匹配:
awk '$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" net.txt - 折分文件:
awk 'NR!=1{print > $6}' net.txt这里>是重定向的符号,按第6列的类型分类生成多个文件 - 统计:
ls -l *.cpp *.c *.h | awk '{sum+=$5} END {print sum}',计算所有的C文件,CPP文件和H文件的文件大小总和. -F: 定界符length: 文本长度
内建变量 列表
|–|–|
|$0|当前记录(这个变量中存放着整个行的内容)|
|$1~$n|当前记录的第n个字段,字段间由FS分隔|
|FS|输入字段分隔符 默认是空格或Tab|
|NF|当前记录中的字段个数,就是有多少列|
|NR|已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。|
|FNR|当前记录数,与NR不同的是,这个值会是各个文件自己的行号|
|RS|输入的记录分隔符, 默认为换行符|
|OFS|输出字段分隔符, 默认也是空格|
|ORS|输出的记录分隔符,默认为换行符|
|FILENAME|当前输入文件的名字|
grep
常见选项:
-v: 反转查找,选那些没匹配上的。-A,-B,-C,-NUM: 上下文打印多少行-E:用正则表达式去匹配-i: 忽略字符大小写的差别-c: 计算匹配的列数-n: 显示行号-r: 递归搜索-o: 显示匹配上的
find
常见选项:
-perm: 按权限查找,有mode精确匹配,/mode存在性匹配,-mode完整性匹配,三种方式-size: 按大小查找,-group: 按文件归属组-user: 按文件归属者
xargs
xargs命令的作用,是将标准输入转为命令行参数。
1 | |
-d: 分隔符 默认情况下,xargs将换行符和空格作为分隔符,把标准输入分解成一个个命令行参数。可用-d指定分隔符。-l,-L,-n: 指定转化为命令行的方式。-L按行执行,-n按个数指定。-p,-t: 打印出具体的命令。-p需要确认,-t 不需要。-I:-I指定每一项命令行参数的替代字符串。如cat test.txt | xargs -t -I str sh -c 'echo str; echo str'-P: 指定进程数。默认是1。
netstat
主要选项列表
-n,--numeric直接使用IP地址,而不通过域名服务器,端口上也显示数字。-i,--interfaces显示网络接口信息-l,--listening显示所有在监听状态的相端口信息-p,--programs显示正在使用Socket的程序识别码和程序名称-A<网络类型>或--<网络类型>列出该网络类型连线中的相关地址。网络类型有--inet|-4,--inet6|-6,--unix|-x,--ipx,--ax25,--netrom,--ddp,--bluetooth,大多数关注是inet-4下的网络情况-t或--tcp显示TCP传输协议的连线状况。-u或--udp显示UDP传输协议的连线状况。-s显示网络统计信息
socat
socat [options] <address> <address>
address就类似于一个文件描述符,socat所做的工作就是在2个address指定的描述符间建立一个pipe用于发送和接收数据。
- -,STDIN,STDOUT :表示标准输入输出,可以就用一个横杠代替
- /var/log/log.txt : 也可以是任意路径
- TCP:: : 建立一个TCP连接作为数据流
- TCP-LISTEN: : 建立TCP监听端口
- EXEC: : 执行一个程序作为数据流
在这些描述后可以附加一些选项,用逗号隔开,如fork,reuseaddr,stdin,stdout,ctty等。
可以将一个使用标准输入输出的单进程程序变为一个使用fork方法的多进程服务,非常方便。socat TCP-LISTEN:1234,reuseaddr,fork EXEC:./helloworldnohup socat tcp-l:8888,fork exec:"python3 /root/server.py",reuseaddr &
crontab
crontab -e来编辑定时任务列表* * * * * cmd这样的格式- 命令要写绝对路径
- 重启时要执行的命令用
@reboot后面写。(reboot后面挂载samba,失败了)
默认Ubuntu是没有打开crontab的日志的。
要去打开,才方便排错。
打开方法:
修改rsyslog文件,将/etc/rsyslog.d/50-default.conf 文件中的
#cron.*前的#删掉;
重启rsyslog服务service rsyslog restart;
重启cron服务service cron restart;
tail -f /var/log/cron.log;
vim
- 如何在VIM中保存编辑的只读文件
:w !sudo tee %
nohup
nohup cmd >xx.log 2>&1 &以这样的方式运行后台程序。
nohup -> 不挂起的含义
systemctl
systemctl -t service列出服务systemctl start httpd打开服务systemctl stop httpd停止服务systemctl status httpd查看服务状态systemctl show httpd查看服务配置systemctl list-unit-files --type=service查看各服务开机自启情况systemctl list-dependencies httpd.service获取服务的依赖项列表
update-rc.d
update-rc.d ssh enable 开机启动
没归类的
编辑
.bashrc,定义好快捷键别名,source .bashrc生效编辑
/etc/sudoers文件,在后面加上xxx ALL=NOPASSWD: ALL,xxx为用户,可以sudo时不用输入密码(仅偷懒使用)。date "+%Y_%m_%d_%H_%M_%S"日期格式化timedatectl list-timezones列出时区,sudo timedatectl set-timezone Asia/Shanghai设置时区生成随机密码命令:
strings /dev/urandom |tr -dc A-Za-z0-9 | head -c20; echo
How to Set the Proxy for APT on Ubuntu 18.04
sudo vim /etc/apt/apt.conf.d/proxy.conf
1 | |
bash 快捷键
ctrl + l清屏ctrl + r查之前的命令ctrl + a到最前ctrl + e到最后ctrl + u清一行ctrl + b前移一个字符(backward)ctrl + f后移一个字符(forwar)ctrl + w当前光标到临近左边单词结束ctrl + u删除光标左边所有ctrl + k删除光标右边所有ctrl + n下一条命令ctrl + p上一条命令
(因为alt被我绑定做别的快捷键,这里就没写与alt相关的)