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 [章节号] 手册名称:

  1. Standard commands (标准命令)
  2. System calls (系统调用)
  3. Library functions (库函数)
  4. Special devices (设备说明)
  5. File formats (文件格式)
  6. Games and toys (游戏和娱乐)
  7. Miscellaneous (杂项)
  8. 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字符串操作

  1. #, 删除左边第一个匹配串,保留右边字符串
  2. ##, 删除左边最后一个匹配串,保留右边字符串
  3. %, 删除右边第一个匹配串,保留左边字符串 4. %, 删除右边最后一个匹配串,保留左边字符串
  4. :0:N, 保留左边第一个字符起的N个字符
  5. :X 保留左边第X个字符起的N个字符
  6. :0-X:N, 保留右边第X个字符起的N个字符
  7. :0-X, 保留左边第一个字符起的N个字符
  8. /a/b 用b替换第一个出现的a
  9. //a/b 用b替换所有出现的a
  10. /#a/b 用b替换前缀a
  11. /%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