常用linux命令
系统管理
重启机器
sudo reboot
显示用户
whoami
显示主机名
hostname
查看内存使用情况
free -h
查看硬盘使用情况
df -h
查看系统时间
date
查看命令所在路径
which <program>
whereis <program>
设置和取消环境变量
# 设置SKIP_BFS环境变量为1
export SKIP_BFS=1
# 取消SKIP_BFS环境变量
unset SKIP_BFS
查看DNS
cat /etc/resolv.conf
# 或者
nslookup qq.com | grep Server
进程管理
查看当前运行的进程
top # 实时显示进程
ps -aux # 以BSD风格打印进程快照
ps -ef # 以System V风格打印进程快照
后台运行进程,当前shell断开时不结束
nohup <program> &
注意,如果想要后台运行进程的同时统计运行时间,不能直接使用nohup time <program> &
,会报错nohup: failed to run command 'time': No such file or directory
,这是因为time其实是一个shell关键字,另外有一个外部程序也叫time,只是系统中并没有安装,想要使用shell关键字time应该如下操作:
nohup bash -c 'time <program>' &
根据进程名杀死进程
kill -9 $(pidof <proc-name>)
注意,因为用到了pidof
命令,这里的进程名必须精确,可以通过top
或者ps
来查找精确的进程名。
模糊匹配可用pgrep
命令,参见按照名字杀死进程的四种方法。
文件管理
文件按文件名查找
find <root-dir> -name <正则匹配文件名>
查找文件时,过滤"Permission denied"等错误信息,有两种方法,一种是使用2 > /dev/null
直接清除所有错误输出,另一种是使用字符串过滤反选grep -v "Permission denied"
显示文件类型
file <filename>
计算文件的MD5值
md5sum <filename>
树形打印当前文件夹下的文件以及子文件夹
tree
查看文件、文件夹大小
du -hs <file/dir>
# s是summary求和,h是以适合阅读的方式展示(如 1k,2M,3G)
修改文件或目录权限
# 如添加可执行权限
chmod +x <filename>
远程文件传输
# 参照复制文件的 cp 命令
scp <from-file> <to-remote-dest> # 传输文件
scp -r <from-dir> <to-remote-dest> # 传输文件夹
返回跳转前的目录。适用于编程过程中需要写测试文件,跳转到/tmp再跳转回去之类的情况。
cd -
创建和删除软链接
# s 是 symbolic 的意思,也就是符号链接
ln -s <original-dir> <symbolic-dir> # 为原始文件夹创建软链接
rm -f <symbolic-dir> # 删除软链接
文本文件操作
文件拼接
cat infile1 infile2 infileN > outfile
程序同时输出到控制台和文件
./<program> 2>&1 | tee <logfile>
文本文件内容查找
ag <text-to-find>
显示文件内容
cat <filename> # 打印整个文件
head -n 20 <filename> # 打印文件前20行
tail -n 20 <filename> # 打印文件后20行
less <filename> # 交互式(分页)查看文件
统计文件行数
wc -l <filename>
# Hadoop 的入门 Hello Word 就是 Word Count!
递归统计文件夹下指定文件的文件行数
# 统计*.h头文件代码行数
wc -l $(find . -name *.h)
对比文件不同
diff <file1> <file2>
常用命令升级版
普通命令 | 升级版 | 新特性 |
---|---|---|
top | htop | 彩色、鼠标交互 |
cat | nl | 带行号 |
vim操作
进入粘贴模式
:set paste
跳到文件头部
gg
跳到文件末尾
G
跳转到指定行号处
:<行号>
文本查找。敲n
查找下一处。
/<文本>
剪切
dd
粘贴
p
开发环境
查看g++默认C++版本
g++ -x c++ -E -dM -< /dev/null | grep __cplusplus
实际上就是查看__cplusplus
这个宏的值。也可以编写一个简单的程序来查看:
#include <iostream>
int main() {
std::cout << __cplusplus << std::endl;
return 0;
}
git操作
清理垃圾回收空间
git gc --prune=now
清除git历史记录中的大文件
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <path-of-remove-file>' --prune-empty --tag-name-filter cat -- --all
更多可参见 Git常用操作。