Linux 常用工具
- enca: http://dl.cihar.com/enca/ 文件名编码转换
- iconv: 文件编码转换
- convmv: 文件名编码转换
- ldd: 查看可执行文件或动态链接库的依赖库
- getconf: 查看配置信息(如getconf LONG_BIT可知当前系统是32位还是64位版本)
- tcpdump: 监视网络服务
- sync: 将缓冲区内容写入磁盘
echo 3 > /proc/sys/vm/drop_caches
: 手动释放缓存- nm: 查看符号表
- readelf: 查看ELF信息(Executable and Linkable Format)
- man: 文档
- top/htop: 查看最高占用
- perf: 性能数据采集
- sar: 系统信息采集
- uptime: 系统1分钟、5分钟和15分钟的系统平均负载
- free: 内存使用情况
- iostat: 磁盘IO使用情况
- pidstat: 查看进程状态
- ipcs: 查看共享内存、消息、信号量信息,如:ipcs -m 共享内存
- objdump –CS –l [bin文件]: 不反人类的反编译
- strace: 系统调用跟踪
- pstack: 查看当前调用栈
- lsof: 查看打开的文件
- ip addr: 查看ip地址
man [章节号] 手册名称:
- Standard commands (标准命令)
- System calls (系统调用)
- Library functions (库函数)
- Special devices (设备说明)
- File formats (文件格式)
- Games and toys (游戏和娱乐)
- Miscellaneous (杂项)
- Administrative Commands (管理员命令)
export $ENV_VAR:/usr/bin
(环境变量)
PATH (可执行文件目录) LD_LIBRARY_PATH (C/C++库文件目录) /etc/ld.so.conf (C/C++ 库文件目录表)
常用命令及快捷键
# 设置环境变量
export 环境变量名=值
ps -aux: 查看进程信息 ps -o majflt minflt -C [command name] 来查看进程的majflt, minflt的值(压力测试时使用) netstat -tuanp: 查看进程占用端口, netstat -aep: 查看所有占用的网络端口信息 Ctrl+r : 最近历史命令 ! 匹配最近历史 cd - :上一次访问的目录 Ctrl + u 和 Ctrl + y: 删除当前行,恢复删除的行 Ctrl + c : 换行重新输入命令 Ctrl + d : 某些程序的中断命令 lsof: 查看被打开的文件(该指令可用于查找标记删除但未被真正删除的文件[会被标记为 deleted ], 详见 http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html )
常用环境变量
echo PATH (可执行文件目录) LD_LIBRARY_PATH (C/C++库文件目录) /etc/ld.so.conf (C/C++ 库文件目录表)
Bash字符串操作
#
, 删除左边第一个匹配串,保留右边字符串##
, 删除左边最后一个匹配串,保留右边字符串%
, 删除右边第一个匹配串,保留左边字符串 4.%
, 删除右边最后一个匹配串,保留左边字符串:0:N
, 保留左边第一个字符起的N个字符:X
保留左边第X个字符起的N个字符:0-X:N
, 保留右边第X个字符起的N个字符:0-X
, 保留左边第一个字符起的N个字符/a/b
用b替换第一个出现的a//a/b
用b替换所有出现的a/#a/b
用b替换前缀a/%a/b
用b替换后缀a
var="http://www.owent.net"
echo ${var#*/} # 删除var左边第一个*/后的内容 (/www.owent/net)
echo ${var##*/} # 删除var左边最后一个*/后的内容 (www.woent.net)
echo ${var%/*} # 删除var右边第一个/*后的内容 (http:/)
echo ${var%%/*} # 删除var右边最后一个/*后的内容 (http:)
echo ${var:0:5} # 保留var左边第一个字符起的5个字符 (http:)
echo ${var:7} # 截取var第7到结尾的字符串 (www.owent.net)
echo ${var:0-5:3} # 保留var右边第5个字符起的3个字符 (t.n)
echo ${var:0-5} # 截取var最后5个字符 (t.net)
echo ${var/www/api} # 把第一个www替换为api (http://api.owent.net)
echo ${var//e/f} # 把所有www替换为api (http://www.owfnt.nft)
echo ${var/#http/https} # 把http前缀替换为https (https://www.owent.net)
echo ${var/%net/com} # 把net后缀替换为com (http://www.owent.com)
系统信息(IP等)
MAC地址: /sbin/ifconfig eth1 2> /dev/null | grep 'HWaddr' | awk '{print $5}'
IP地址:/sbin/ifconfig eth1 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2
子网掩码:/sbin/ifconfig eth1 2> /dev/null | grep 'Mask' | cut -d: -f4
/tmp/resolv.conf.auto 2> /dev/null | grep 'nameserver' | awk '{print $2}'#
系统运行时间:/bin/cat /proc/uptime 2> /dev/null | awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'
共发出数据包:/sbin/ifconfig eth0 2> /dev/null | grep 'TX packets' | awk '{print $2}'|cut -d: -f2
共接受数据包:/sbin/ifconfig eth0 2> /dev/null | grep 'RX packets' | awk '{print $2}'|cut -d: -f2
使Linux脚本或者命令输出的结果不换行(在网页中应用较多)
echo -e "`ifconfig eth0 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2`\c"
用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart)
dmesg (查看所有启动时检测到的硬件信息)
lspci (显示外设信息, 如usb,网卡等信息)
cat /etc/sysconfig/hwconf
mpstat
查看PCI设备:lspci
查看USB设备:lsusb -v
查看网卡状态:sudo ethtool eth0
查看CPU信息:cat /proc/cpuinfo 或 lscpu
显示当前硬件信息:sudo lshw
全面的显示bios、cpu、内存等硬件信息:dmidecode
特殊文件
网络名称: /etc/sysconfig/network 网卡: /etc/sysconfig/network-scripts/* 网卡信息缓存: /etc/udev/rules.d/70-persistent-net.rules
KVM和网络配置
virsh:虚拟机管理 virt-install:虚拟机安装
建议还是搞个GUI工具,然后可以连接上只有命令行的宿主机管理,会方便的多。比如虚拟机里搞个GUI版本的Linux,远程连接到宿主机上。
- CentOS的网络管理是NetworkManager和原来的network.service并存,并且NetworkManager先启动。
- brctl:网桥管理nmcli:NetworkManager的命令行工具
- nmtui:NetworkManager的TUI工具(和GUI比较像了)
Linux的KVM虚拟机默认是NAT网络,如果需要使用网桥可以先用brctl或者nmcli或者nmtui把virbr0网桥删了 然后再用nmcli或者nmtui添加网桥,最后把原来的网络连接桥接上来即可。 其他的网络防火墙方面的记在《关于firewalld和systemd的一些命令速记》
Bash
umask: 默认创建文件的权限(取反)
export: 申明为环境变量
/etc/hosts: hosts文件
/etc/profile : 登入后执行脚本
~/.bash_login : 同上,限定用户
~/.bash_profile : 同上
~/.profile : 同上
~用户名 : 用户Home目录
~/.bash_history: 命令历史记录
Vim
命令行模式
/ 向下搜索
? 向上搜索
v 进入可视化模式 V 可视化模式中进入行
i 光标处插入 I 行首插入 o 换行插入 O 前行插入
a 光标后插入 A 行尾插入
s 替换 S 替换行
w 下一个单词头 e 下一个单词尾
b 前一个单词
d 剪切 D 剪切到行尾
dd 剪切行 dw剪切单词
yy 复制一行
p 粘贴
c 删除并转到编辑模式 C 删到行尾并转为编辑模式
x 向后删除 X 向前删除
n 下一个搜索项 N 上一个搜索项
u 取消修改 U 取消当前行的修改
文本替换
:[搜索规则][分隔符][原匹配式][分隔符][替换目标][分隔符][替换规则]
分隔符可以是/,+和#
搜索规则
:n,$s/从第n行到结尾,类似正则表达式
:%s/ 全文搜索
替换规则
/g 全行替换
如:
:s/src/dst/ 文本替换(当前行第一个src替换为dst)
:s/src/dst/g 文本替换(当前行所有src替换为dst)
:%s/src/dst/g 文本替换(所有行第一个src替换为dst)
:%s/src/dst/g 文本替换(所有行所有src替换为dst)
分屏
:He 上分屏浏览 :He! 下分屏浏览
:Ve 左分屏浏览 :Ve! 右分屏浏览
Ctrl+w 分屏切换
:set scb 分屏同步移动 :set scb! 解除分屏同步移动
:E 目录导航
:split/vsplit 分屏/垂直分屏打开
ctrl-w 上/下/左/右 切换到上/下/左/右窗口
ctrl-w ctrl-w 切换到下一个窗口
ctrl-w_ 最大化当前窗口
ctrl-w= 所有窗口设为相同大小
:hide 隐藏当前窗口
:nly 关闭当前窗口外的所有窗口
:b N 打开窗口N
关键字导航
Ctrl+N 向下查找关键字关键字[插入模式下], Ctrl+P 向上查找关键字[插入模式下]
Ctrl + X 和 Ctrl + D 宏定义补齐
Ctrl + X 和 Ctrl + ] 是 Tag 补齐
Ctrl + X 和 Ctrl + F 是文件名补齐
Ctrl + X 和 Ctrl + I 也是关键词补齐,但是关键后会有个文件名,告诉你这个关键词在哪个文件中
Ctrl + X 和 Ctrl +V 是表达式补齐
Ctrl + X 和 Ctrl +L 对整行补齐。
字符相关
【guu 】 – 把一行的文字变成全小写。或是【Vu】
【gUU】 – 把一行的文件变成全大写。或是【VU】
按【v】键进入选择模式,然后移动光标选择你要的文本,按【u】转小写,按【U】转大写
【ga】 – 查看光标处字符的 ascii 码
【g8】 – 查看光标处字符的 utf-8 编码
【gf】 - 打开光标处所指的文件 (这个命令在打到#include 头文件时挺好用的,当然,仅限于有路径的)
【*】或【#】在当前文件中搜索当前光标的单词
缩进相关
【>> 】向右给它进当前行 【<< 】向左缩进当前行
【=】 - 缩进当前行 (和上面不一样的是,它会对齐缩进)
【=%】 – 把光标位置移到语句块的括号上,然后按=%,缩进整个语句块(%是括号匹配)
【G=gg】 或是 【gg=G】 - 缩进整个文件(G是到文件结尾,gg 是到文件开头)
:set autoindent/noautoindent 自动缩进
:set smartindent/nosmartindent 智能缩进
:set tabstop=4 制表符长度为4
:set shiftwidth=4 缩进符为长度为4的空格
ctrl-t, ctrl-d 插入模式的缩进和取消缩进
【>>】 缩进
【<<】取消缩进
文件系统
:e . 打开文件目录
:Sex 分割窗口并开启文件目录
:ls List buffers
:cd ..
:args 查看文件列表
:args * 批量打开文件
:grep
gf 打开光标指向的文件
```vim
## PowerShell:
```powershell
Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy RemoteSigned
编译器命令
gcc -dM -E - < /dev/null # GCC查看 预定义宏
cpp -dM < /dev/null # GCC查看 预定义宏
cc -v fred.c # HP-UX ansi C compiler 查看 预定义宏
cc -## fred.c # SCO OpenServer C compiler 和 Sun Studio C/C++ compiler 查看 预定义宏
cc -qshowmacros -E fred.c # IBM AIX XL C/C++ compiler 查看 预定义宏
clang -dM -E - < /dev/null # Clang 查看 预定义宏
# VC 查看 预定义宏,查文档吧 http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.110).aspx
Linux查看系统信息命令
工具查询地址: http://bhami.com/rosetta.html
最后记录一下我常用的软件包
Posix环境
tar zip unzip gzip lzip zlib binutils gcc gdb cmake subversion git make colorgcc colordiff diffutils automake texinfo curl wget ncurses libncurses bison rsync uuid-devel valgrind telnet cppcheck openssl-devel
开发工具&库
openssl-devel readline-devel ncurses-devel libunwind-devel python php-cli java-1.8.0-openjdk
Linux专用
yum-remove-with-leaves yum-download bleachbit yum-plugin-fastestmirror dstat sar ipcalc iotop htop atop iptraf rtorrent aria2 p7zip
Linux - LLVM - Clang 套件
llvm clang dragonegg lldb
Linux桌面
cinnamon gnome-tweak-tool numix-gtk-theme imsettings-cinnamon : 用于切换系统输入法
小工具
figlet
编辑工具
pandoc ctex/miktex
图像处理
gimg darktable GraphicsMagick