参考
杂项
- ssh免密登录
ssh-copy-id remote-machine
比如 ssh-copy-id pengdl@localhost -p 8765
这个命令把当前用户的公钥串写入到远程主机的~/.ssh/authorized_keys内,这样下次使用ssh登录的时候,远程主机就直接根据这串密钥完成身份校验,不再询问密码了。前提是你当前用户有生成了公钥,默认是没有的,先执行ssh-keygen试试吧!
也可以手动完成:
your-machine$ scp ~/.ssh/identity.pub remote-machine: your-machine$ ssh remote-machine remote-machine$ cat identity.pub >> ~/.ssh/authorized_keys
如果你想删掉远程主机上的密钥,直接打开authorized_keys,搜索你的用户名,删除那行,即可.
- 清空文件
> file
- 以HTTP方式共享当前文件夹的文件
python -m SimpleHTTPServer 8080
这命令启动了Python的SimpleHTTPServer模块,考虑到Python在绝大多数的Linux发行版当中都默认安装,所以这个命令很可能是最简单的跨平台传文件的方法。
命令执行后将在本机8000端口开放HTTP服务,在其他能访问本机的机器的浏览器打开ttp://ip:8000即打开一个目录列表,点击即可下载。
python3的话
python3 -m http.server 8080
- 以sudo运行上条命令
sudo !!
- 显示当前目录中所有子目录的大小
du -h --max-depth=1
- 在以普通用户打开的vim当中保存一个root用户文件
:w !sudo tee %
这题目读起来纠结,其实是很常见的,常常忘记了sudo就直接用vim编辑/etc内的文件,(不过也不一定,vim发现保存的文件无法保存时候会提示)等编辑好了,保存时候才发现没权限。曲线方法是先保存个临时文件,退出后再sudo cp回去。不过实际上在vim里面可以直接完成这个过程的,命令就是如此。
查阅vim的文档(输入:help :w),会提到命令:w!{cmd},让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin传入。tee是一个把stdin保存到文件的小工具。而%,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。
所以执行这个命令,就相当于从vim外部修改了当前编辑的文件,好完工。
- 快速备份一个文件
$ cp filename{,.bak}
这道命令把filename文件拷贝成filename.bak,大家应该在一些比较复杂的安装教程里面见过这样的用法。其原理就在于bash对大括号的展开操作,filename{,.bak}这一段会被展开成filename filename.bak再传给cp,于是就有了备份的命令了。
- 想知道一台服务器什么时候重启完
ping -a IP
系统管理员最常做的事情是重启系统。但是服务器的重启过程往往得花上好几分钟,什么你的服务器4个scsi卡?16个硬盘?系统是Redhat?还完全安装所有组件?好吧,它重启的时间都够你吃顿饭了,所以我很想知道它什么时候回来。ping命令有个audible ping参数,-a,当它终于ping通你的服务器时会让小喇叭叫起来。
进程
- 查看进程树
pstree -ansp [pid]
ps af
pstree -Aaps
- 查看R和D状态的进程
ps r -A
- 查看线程信息
ps -T
top -H
pidstat -t
pstree -t
- 查看进程所属的cgroup
ps -eo pid,ppid,cmd,cgname
- 收集R状态的线程
top -H -c -b -n 1 | grep " R "
- 收集D状态进程的调用栈
- 方法一
echo d > /proc/sysrq-trigger
- 方法二
ps -e -o pid,state,cmd | grep " D " | awk '{printf "echo \"%s\";cat /proc/%s/stack;\n",$0,$1}' | bash
- atop 获取进程退出信息
https://bean-li.github.io/atop-exit-code/ - strace万能命令
strace -T -f -tt -e trace=all -p pid -o xxxx.txt
- 启动时间
uptime
who -b
- 将秒转换为时间(自1970年开始的秒数)
date -d @12345678
- Linux “魔力” 系统请求组合键 SysRq
- What are the ‘command’ keys?
echo <magic> > /proc/sysrq-trigger
字符 | 用途 |
b |
立刻重启系统,不会同步文件系统和umount磁盘 |
c |
触发系统crash,如果配置了kdump,那么会生成crashdump文件 |
f |
手动触发一次oom killer |
l |
输出系统中所有active cpu的当前调用栈 |
t |
输出系统中所有线程的调用栈,以及工作队列的调用栈 |
d |
输出所有D状态的线程调用栈 |
每个字符对应的回调函数可以参考drivers\tty\sysrq.c中的sysrq_key_table。
- 使用top的批处理模式获取R状态进程
top -d 1 -b | grep -e "^top" -e "^Tasks:" -e " R "
- 如果想获取线程的话,使用:
top -d 1 -b -H | grep -e "^top" -e "^Tasks:" -e " R "
内存
磁盘
- 查看所有块设备的IO调度器
cd /sys/block ls -l | awk '{printf("echo %s;cat $s/queue/scheduler;", $9, $9);}'
- 查看块设备名字跟具体设备的对应
ls -l /sys/block
ls -l /sys/class/block
- 查看磁盘是固态还是机械
- linux固态硬盘和机械盘,判断linux磁盘是固态硬盘还是机械硬盘的方法
- smartctl -i /dev/xxx
文件系统
- 批量更新文件时间戳
find -type f -exec touch {} \;
CPU
- 使用atop排查 谁引起了CPU小尖峰
https://bean-li.github.io/CPU-sharp-pulse/ - 使用perf 分析ceph CPU usage High
https://bean-li.github.io/perf-check-ceph-osd-cpu-high/
网络
- 查看中断发生情况
- 中断性能监控工具irqtop和lsirq
irqtop
lsirq
- 查看PCI网卡
lspci | grep Eth
- 查看网卡名字对应的设备
ls /sys/class/net -l
- 网络状态的统计
ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}'
- 网络错误
sar -n ETCP 1 或者 sar -n EDEV 1
- 查看系统中占用端口的进程
netstat -tulnp
杂项
- 查看文件内容
more /proc/sys/kernel/sched*
这个命令比cat命令的好处在于可以显示查看的文件的文件名。 - 模块加载
# 加载模块时开启dynamic debug,参考Documentation\admin-guide modprobe acpi_cpufreq dyndbg="func acpi_cpufreq_init line 955 +p"