linux 命令
1. 切换root用户
sudo -i
2. tree命令展示目录结构
基本命令:
tree <path> -<options>
<path>
可以省略,省略时表示当前目录。
常用的<options>
有:
-d 只列目录
-a 列所有文件(包括隐藏文件)
-h 展示文件或文件夹大小
-C 打开颜色渲染
-L level 目录深度等级,level是一个数字(比如命令:tree -L 2)
3. 查看进程
显示所有进程
ps -ax
显示当前用户的所有进程
ps -u <user_name>
通过端口查找进程
netstat -nlp | grep <port>
查看进程状态
ps afx | grep <pid>
查看进程启动时间
ps -p <pid> -o lstart
4. kill进程
kill <PID>
5. 获得本机内网ip
ifconfig | grep 'inet '
返回结果中第二行就是。
如果要查询本机外网ip,
curl ifconfig.me
6. 压缩解压
#压缩
tar -czvf ***.tar.gz <your_folder>
tar -cjvf ***.tar.bz2 <your_folder>
#解压缩
tar -xzvf ***.tar.gz <des_folder>
tar -xjvf ***.tar.bz2 <des_folder>
7. 远程同步rsync
在执行命令时确保远程机器和本地机器都已安装rsync。
rsync -avzP --delete --exclude '<dir_name>' -e 'ssh -p <remote_ssh_port>' <local_dir> <remote_user>@<remote_ip>:<remote_dir>
我们看一个例子:
rsync -avzP --delete --exclude '.*' -e 'ssh -p 27400' /Users/brown/Documents/Note root@172.93.39.11:~
-P
选项是--progress
和--partial
选项的组合,表示展示进度、若传输中断继续;-a
选项表示archive,表示递归同步、保留链接文件、同步设备文件、同步修改时间、同步group owner信息、同步权限等;-z
选项表示传输过程使用压缩,来降低网络负载;--delete
表示删除的文件也被同步删除;--exclude '.*'
表示不同步以.
开头的文件或文件夹;如果有多个文件或文件夹需要忽略,请声明多次--exclude
选项。-e 'ssh -p 27400'
声明了ssh端口为27400
,没有此选项时使用默认的22
端口。
8. top命令
top命令能够实时显示系统中各个进程的资源占用状况。
首先输入
top
然后进入top界面,上面一部分是total信息,下面一部分就是进程信息。重要字段意义:
字段 | 含义 |
---|---|
RES | 进程使用的物理内存(不包括SWAP内存)(单位是KB) |
VIRT | 进程使用的所有内存(RES+SWAP) |
S | 进程状态,R=运行;S=睡眠;D=不可中断的睡眠状态;T=跟踪/停止;Z=僵尸进程 |
然后你可以:
- 输入
u
,然后输入<user>
进行用户进程筛选; - 输入
M
,表示按照内存使用状况对进程排序; - 输入
P
,表示按照CPU使用状况对进程排序; - 输入
c
,显示完整的命令。
9. nohup
启动后台进程
nohup <your_command> &
比如
nohup python fuck.py &
这样你的进程就不会因为ssh掉线或者shell关闭而挂掉了。
10. crontab
输入下面命令,进入编辑模式:
crontab -e
文件格式:
<分> <时> <日> <月> <星期> <命令>
分 | 时 | 日 | 月 | 星期 |
---|---|---|---|---|
0~59 | 0~23 | 1~31 | 1~12 | 0~7(0、7表示星期天) |
简单例子:
0 0 * * * python fuck.py 1>> fuck.log 2>> fuck.err
表示每天晚上00:00
执行python fuck.py
命令,并将标准输出定向到fuck.log
;将错误输出定向到fuck.err
注意:
- 当你的脚本单独执行时ok,但是放到crontab下执行异常时,很可能是环境变量的问题:即你执行脚本的用户和crontab的用户不是同一个,用户变量不同。此时可以在crontab文件下首先执行命令
source /etc/profile
更多例子:crontab使用例子
11. type
显示你的alias
值
type <alias_key>
12. date
显示当前日期
date +"%Y-%m-%d %H:%M:%S"
%H:%M:%S
格式等价于%T
,即
date +"%Y-%m-%d %T"
13. cut
cut命令对字符进行切分、提取。
echo brown_wong | cut -d _ -f 2
此命令会输出wong
。
-d
选项声明分隔符-f
选项声明第几个字段
你也可以使用awk来操作。
14. sed
sed命令是stream editor工具的缩写,主要进行一些文本操作。
查看文件的5~10行:
sed -n '5,10p' myfile.txt
查看整个文件,除了20~35行:
sed '20,35d' myfile.txt
查看文件的57行,1013行:
sed -n -e '5,7p' -e '10,13p' myfile.txt
替换原文本中子串abc为def(直接复写原文件):
sed -i "s/abc/def/g" myfile.txt
如果是mac,必须前面加个空字符串,即sed -i "" "s/abc/def/g" myfile.txt
它也能做一些文本正则搜索、替换等操作,因为我们在vim里面同样可以做到,故不赘述。
15. 查看操作系统类型
cat /etc/issue
16. 创建软链接
ln -s <src> <link_name>
17. telnet查看ip端口通不通
telnet <ip> <port>
18. xargs
xargs将标准输入作为命令参数。linux的一些工具,比如grep
是可以接受标准输入作为命令参数,但是很多工具,比如echo
、rm
、mkdir
都不能。此时,xargs就派上用场了。
下面命令
echo "haha" | mkdir
想创建一个目录haha
,但是会执行失败,因为mkdir
不能直接把管道传过来的标准输入作为命令参数。但下面命令就会成功:
echo "haha" | xargs mkdir
-I
指定替换字符串
echo "9100" | xargs -I {port} python server.py 0.0.0.0 {port}
19. 查看文件大小
du -sh <file_or_dir_name>
-s
,--summarize
,如果是一个目录,只显示total大小。-h
,--human-readable
,以人可读方式打印。
20. 查看磁盘剩余空间
df -h <dir_name>
21. 查找文件夹或目录
find <dir_name> -type <d|f> -name '<name>'
Ref
https://www.cyberciti.biz/faq/linux-show-directory-structure-command-line/
https://www.tecmint.com/linux-sed-command-tips-tricks/