Linux Tips

Linux Tips

记录使用 Linux 过程中的一些技巧。

GUI 工具

wsl

在资源管理器中输入下面的路径,访问 wsl 所在目录

\\wsl$

wsl 在 windows 文件系统上的路径:

C:\Users\user_name\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\

okular

# 非 KDE 桌面不建议安装
sudo apt-get install okular # 安装
sudo apt-get install kde-l10n-zhcn # 汉化

gedit

sudo apt-get install gedit-plugins # plugin

使用 ALT+CTRL+N 快捷键可在 gedit 实现如下图的分栏效果:

img

ubuntu update snap-store

killall snap-store
sudo snap refresh snap-store

flameshot 截图软件

sudo apt-get install flameshot

img

设置截图快捷键,这里设置为 F1。

安装 albert

git clone --recursive https://github.com/albertlauncher/albert.git
mkdir albert-build
cd albert-build
cmake ../albert -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
make
sudo make install

zeal

Zeal 国外一款面向开发者的离线文档查看工具

img

shell 脚本技巧

脚本开头加/bin/sh -x 或者 /bin/bash -x 脚本中每条命令的执行情况打印出来

使用 shellcheck 工具进行 shell 脚本的语法检查

shell 中别名的含义

— $0 - Name of the script  
— $1 to $9 - Arguments to the script. $1 is the first argument and so on. 
— $@ - All the arguments  
— $# - Number of arguments  
— $? - Return code of the previous command  
— $$ - Process Identification number for the current script  
— !! - Entire last command, including arguments. A common pattern is to execute a command only for it to fail due to missing permissions,then you can quickly execute it with sudo by doing sudo !!
— $_ - Last argument from the last command. If you are in an interactive shell, you can also quickly get this value by typing Esc followed by .

命令行工具

命令行光标移动快捷键

img

git

ssh -T -p 443 git@ssh.github.com # test 443 port
ssh -T git@github.com # test github connection

rlwrap

rlwrap 是一个在 Linux/Unix 系统上使用 readline 库包装 (wrap) 的实用工具,它可以为其他命令提供命令行编辑和历史记录功能。通过 rlwrap,你可以在使用像 telnet、ftp、sqlplus 或其他不支持命令行编辑和历史记录的命令行工具时,获得类似于 Bash 或其他支持 readline 的终端的功能。

rlwrap telnet example.com 80

这样,你就可以在 telnet 连接时使用箭头键进行命令行编辑、使用 Ctrl+R 进行历史搜索等功能。

更换默认的 sh

chsh -s /usr/bin/fish
chsh -s /bin/bash

update gcc

sudo apt-get update
sudo apt-get install gcc-10
sudo apt-get install g++-10
cd /usr/bin
sudo rm gcc g++
sudo ln -s gcc-10 gcc
sudo ln -s g++-10 g++

定位头文件

locate resource.h # 定位头文件在系统中的位置

解压 gz 文件

gzip -dk file.gz

sysstat 软件包

  • iostat 监控磁盘状态 -x 参数监控 io 输入是否过大。

  • vmstat 虚存数据

  • mpstat cpu监控

  • sar 监控网络,磁盘,内存等,配置(man sadc)可以读取系统的历史数据,对于分析系统的状态非常有帮助

  • watch -d free 观察内存各项数据的变化情况

  • cat /etc/os-release 查看发行版

《性能之巅》笔记

  • dmesg -T | tail 包括 OOM 事件的内核错误
  • vmstat -SM 1 系统级统计:运行队列长度、交换、CPU 总体使用情况
  • mpstat -P ALL 1 CPU 平衡情况:单个 CPU 很繁忙,意味着线程扩展性糟糕
  • pidstat 1 每个进程的CPU使用情况:识别意外的 CPU消费者,以及每个进程的用户/系统 CPU 时间
  • iostat -sxz 1 磁盘 I/O 统计:OPS 和吞吐量、平均等待时间、忙碌百分比
  • sar -n DEV 1 网络设备 I/O:数据包和吞吐量
  • sar -n TCP, ETCP 1 TCP 统计:连接率、重传

其他命令行工具

ifstat 网络接口流量监控

dstat 整合 vmstat, iostat和ifstat, 界面显示更友好, 更能更强大

top 查看系统当前资源

  • 1 查看 CPU 核心数量
  • shift + u 可查看指定用户的资源情况
  • shift + p CPU 消耗动态排序
  • shift + m 以内存使用多少来排序

atop 进程性能监控

iperf 网络测试工具, 可以测带宽 iperf 工具需要在客户端和服务端同时进行安装

smem 进程内存显示

iotop 类似于 top, 不过显示的是磁盘 io 性能, 对于查看主要是哪些进程在使用 io 很有帮助

glances与top和htop比较显示的信息更全,包括 io, network, ip, 公网ip等信息

pmap(process map) <进程号> 显示进程的映射情况

ps

  • ps axj 能够显示进程的会话状态

  • ps axf (pid tty stat time command)

  • ps axm(more)以详细信息展示

  • ps ax -L 以linux方式展示 多了一列LWP(轻量级线程号)

  • ps aux | grep -E [3]9788 打印给定进程,避免打印本命令

unlink 删除软链接

ln -s 源文件 快捷方式 创建软链接

ln -snf 更新软链接

find -exec (执行的命令) {}\ 对给定文件执行命令

tar cvf - file | ssh user@example.com "tar xv - c Document/" 对file中的内容进行归档,并将其输出到stdout 后 然后提取到远程系统中的document目录中

ldd 打印程序依赖的共享库

nmap -sT 判断对方打开的端口号

wget -c 断点续传 -b 后台传输 -P指定下载位置

tags ctags 对头文件目录进行索引

tail - f 可以实时查看文件输出

  • 但是如果这期间文件被移动或删除, 即使日志文件重新生成tail - f的输出不会恢复

  • 使用tail -F 则可以避免这个问题, 输出不会停止

  • 因为 -f 监测的是fd, 而 -F 监测的是文件名

img2pdf + ocrmypdf 命令行下处理 PDF 神奇组合,无损生成 PDF 文件, OCR 在扫描文件上加一层文本使其可搜索, 两者可管道组合很灵活

pdfunite 1.pdf 2.pdf 3.pdf result.pdf 合并多个pdf

nc -zv 192.168.0.1 10 80 22 21 检查远程主机192.168.0.1上是否打开了80 22和21端口

  • -z 设置nc只是扫描侦听守护进程,实际上不向他们发送任何数据

  • -v 启用详细模式

  • nc -zv 192.168.0.1 10-80可以指定端口范围10-80

ls | xargs -i echo {} 显示当前文件夹下的所有文件, xargs -i参数,会把ls结果的每一条结果逐个放到{}中

ss (Utility to investigate sockets)

  • -tna 显示所有的正在监听的 TCP 链接

  • -tlp 查看监听端口的名称

  • -h, --help 帮助

  • -V, --version 显示版本号

  • -t, --tcp 显示 TCP 协议的 sockets

  • -u, --udp 显示 UDP 协议的 sockets

  • -x, --unix 显示 unix domain sockets,与 -f 选项相同

  • -n, --numeric 不解析服务的名称,如 "22" 端口不会显示成 "ssh"

  • -l, --listening 只显示处于监听状态的端口

  • -p, --processes 显示监听端口的进程(Ubuntu 上需要 sudo)

  • -a, --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接

  • -r, --resolve 把 IP 解释为域名,把端口号解释为协议名称

ethtool eth0 查看给定网卡带宽

getfacl filename 查看文件的具体权限

关于 OOM

Linux 中 malloc 返回非空指针,并不一定意味着指向的内存就是可用的,Linux 下允许程序申请比系统可用内存更多的内存,这个特性叫 Overcommit 这样做是出于优化系统考虑,因为不是所有的程序申请了内存就立刻使用的,当你使用的时候说不定系统已经回收了一些资源了。不幸的是,当你用到这个Overcommit 给你的内存的时候,系统还没有资源的话,OOM killer就跳出来了。

# 使用 dmesg 命令
dmesg
#[817032.308828] Out of memory: Kill process xxxx (php-fpm) score xxxx or sacrifice child
#[817032.324742] Killed process xxx (php-fpm) total-vm:xxxxx kB, anon-rss:xxxxx kB, file-rss:xxxx kB, shmem-rss:xxxx kB

Linux 分层工具图

img

posted on 2021-12-19 22:08  LambdaQ  阅读(126)  评论(0编辑  收藏  举报