本文所列的 Linux 常用命令包含: 文件相关(目录操作, 内容查看, 查找与比较, 压缩与解压), 进程管理, 网络操作, 系统管理, 性能监测与优化, Java 常用工具多个方面概述.
文件目录基本操作
ls 命令用来显示目标列表, 在 Linux 中是使用率较高的命令. ls 命令的输出信息可以进行彩色加亮显示, 以分区不同类型的文件.
常用选项:
ls(选项)(参数)
-a 显示所有档案及目录(ls 默认不会列出隐藏文件);
-l 所有输出信息用单列格式输出, 不输出为多列;
--color[=WHEN]: 使用不同的颜色高亮显示不同类型的.
实际应用时, 经常会使用 ls -l --color=auto, 并给它指定一个别名 ll:
alias ll='ls -l --color=auto'
cd 用来切换工作目录至 dirname. 其中 dirname 表示法可为绝对路径或相对路径. 若目录名称省略, 则变换至使用者的 home directory.
常用选项:
cd 进入用户主目录
cd ~ 进入用户主目录
cd - 返回进入此目录之前所在的目录
cd .. 返回上级目录(若当前目录为 "/", 则执行完后还在 "/";".." 为上级目录的意思)
cd ../.. 返回上两级目录
cd !$ 把上个命令的参数作为 cd 参数使用
mkdir 创建目录. 该命令创建由 dirname 命名的目录. 如果在目录名的前面没有加任何路径名, 则在当前目录下创建由 dirname 指定的目录; 如果给出了一个已经存在的路径, 将会在该目录下创建一个指定的目录.
常用选项:
-p 若所要建立目录的上层目录目前尚未建立, 则会一并建立上层目录
rm 删除一个目录中的一个或多个文件或目录, 也可以将某个目录及其下属的所有文件及其子目录均删除掉. 对于链接文件, 只是删除整个链接文件, 而原有文件保持不变.
常用选项:
-f: 强制删除文件或目录
-i: 删除已有文件或目录之前先询问用户
-r 或 - R: 递归处理, 将指定目录下的所有文件与子目录一并处理
注意: 使用 rm 命令要格外小心. 因为一旦删除了一个文件, 就无法再恢复它.
cp 将一个或多个源文件或者目录复制到指定的目的文件或目录.
常用选项:
-f: 强行复制文件或目录, 不论目标文件或目录是否已存在
-i: 覆盖既有文件之前先询问用户
-R/r: 递归处理, 将指定目录下的所有文件与子目录一并处理
cp /home/sre/tom.log . 将文件 / home/sre/tom.log 复制到当前目录
cp -r katarina /home/sre/logs/ 将目录 katarina 复制到 / home/sre/logs / 目录下
mv 对文件或目录重新命名, 或者将文件从一个目录移到另一个目录中. source 表示源文件或目录, target 表示目标文件或目录. 如果将一个文件移到一个已经存在的目标文件中, 则目标文件的内容将被覆盖.
常用选项:
-f: 若目标文件或目录与现有的文件或目录重复, 则直接覆盖现有的文件或目录
-u: 当源文件比目标文件新或者目标文件不存在时, 才执行移动操作
pwd 以绝对路径的方式显示用户当前工作目录
tree 以树状图列出目录的内容
touch 两个功能: 一是创建新的空文件; 二是用于把已存在文件的时间标签更新为系统当前的时间(默认方式), 它们的数据将原封不动地保留下来.
示例:
touch /var/wd/logs/touch.txt 创建空文件 / var/wd/logs/touch.txt
chmod 变更文件或目录的权限. 在 UNIX 系统家族里, 文件或目录权限的控制分别以读取, 写入, 执行 3 种一般权限来区分, 另有 3 种特殊权限可供运用. 用户可以使用 chmod 指令去变更文件与目录的权限, 设置方式采用文字或数字代号皆可.
示例:
chmod +x what_cpu_do.sh 给脚本 what_cpu_do.sh 增加可执行权限
chmod u+x,g+w test // 为文件 test 设置自己可以执行, 组员可以写入的权限
file 探测给定文件的类型.
文件内容查看
cat 连接文件并打印到标准输出设备上, cat 经常用来显示文件的内容.
示例:
grep 是一种强大的文本搜索工具, 它能使用正则表达式搜索文本, 并把匹配的行打印出来.
常用选项:
-A < 显示列数> (After)除了显示符合范本样式的那一行之外, 并显示该行之后的内容
-B (Before)在显示符合范本样式的那一行之外, 并显示该行之前的内容
-C < 显示列数> 除了显示符合范本样式的那一列之外, 并显示该列之前后的内容
-i 忽略字符大小写.
tail 输出文件中的尾部内容, 默认在屏幕上显示指定文件的末尾 10 行.
常用选项:
-f: 显示文件最新追加的内容(查看服务器上动态刷新的日志时经常使用).
-n: 输出文件的尾部 N(N 位数字)行内容
head 显示文件的开头的内容. 在默认情况下, head 命令显示文件的头 10 行内容.
常用选项:
-n < 数字>: 指定显示头部内容的行数
-c < 字符数>: 指定显示头部内容的字符数
-v: 总是显示文件名的头信息
-q: 不显示文件名的头信息
more 一个基于 vi 编辑器文本过滤器, 它以全屏幕的方式按页显示文本文件的内容, 支持 vi 中的关键字定位操作. more 名单中内置了若干快捷键, 常用的有 H(获得帮助信息),Enter(向下翻滚一行), 空格(向下滚动一屏),Q(退出命令).
常用选项:
Space 键: 显示文本的下一屏内容
Enter 键: 只显示文本的下一行内容
斜线符 /: 接着输入一个模式, 可以在文本中寻找下一个相匹配的模式
h 键: 显示帮助屏, 该屏上有相关的帮助信息
b 键: 显示上一屏内容
q 键: 退出 rnore 命令
Less 与 more 十分相似, 都可以用来浏览文字档案的内容, 不同的是 Less 命令允许用户向前或向后浏览文件, 而 more 命令只能向前浏览. 用 Less 命令显示文件时, 用 PageUp 键向上翻页, 用 PageDown 键向下翻页. 要退出 Less 程序, 应按 q 键.
wc 用来计算数字. 利用 wc 指令我们可以计算文件的 Byte 数, 字数或是列数.
常用选项:
-c: 只显示 Bytes 数
-l: 只显示列数
-w: 只显示字数
tr 对来自标准输入的字符进行替换, 压缩和删除. 它可以将一组字符变成另一组字符, 经常用来编写优美的单行命令, 作用很强大.
常用选项:
-c: 取代所有不属于第一字符集的字符
-d: 删除所有属于第一字符集的字符
-s: 把连续重复的字符以单独一个字符表示
sort 将文件进行排序, 并将排序结果标准输出. 它可以从特定的文件, 也可以从 stdin 中获取输入.
常用选项:
-d: 排序时, 处理英文字母, 数字及空格字符外, 忽略其他的字符
-f: 排序时, 将小写字母视为大写字母
-k: 来指定列数
-r: 以相反的顺序来排序来自
文件查找与比较
find 在指定目录下查找文件. 任何位于参数之前的字符串都将被视为欲查找的目录名. 如果使用该命令时, 不设置任何参数, 则 find 命令将在当前目录下查找子目录与文件. 并且将查找到的子目录和文件全部进行显示.
示例:
find /home -name "*.txt" 在 / home 目录下查找以. txt 结尾的文件名
find /home -iname "*.txt" 同上, 但忽略大小写
find /home ! -name "*.txt" 找出 / home 下不是以. txt 结尾的文件
which 查找并显示给定命令的绝对路径, 环境变量 PATH 中保存了查找命令时需要遍历的目录. which 指令会在环境变量 $PATH 设置的目录里查找符合条件的文件. 也就是说, 使用 which 命令, 就可以看到某个系统命令是否存在, 以及执行的到底是哪一个位置的命令.
whereis 用来定位指令的二进制程序, 源代码文件和 man 手册页等相关文件的路径.
和 find 相比, whereis 查找的速度非常快, 这是因为 Linux 系统会将 系统内的所有文件都记录在一个数据库文件中, 当使用 whereis 和下面即将介绍的 locate 时, 会从数据库中查找数据, 而不是像 find 命令那样, 通 过遍历硬盘来查找, 效率自然会很高.
示例:
locate locate 命令其实是 find -name 的另一种写法, 但是要比后者快得多, 原因在于它不搜索具体目录, 而是搜索一个数据库 / var/lib/locatedb, 这个数据库中含有本地所有文件信息. Linux 系统自动创建这个数据库, 并且自动更新, 由于更新非实时, 所以使用 locate 命令查不到最新变动过的文件. 为了避免这种情况, 可以在使用 locate 之前, 先使用 updatedb 命令, 手动更新数据库.
示例:
locate /etc/sh 搜索 etc 目录下所有以 sh 开头的文件
locate -i ~/m 搜索用户主目录下, 所有以 m 开头的文件, 并且忽略大小写
文件压缩与解压
tar tar 命令可以为 Linux 的文件和目录创建档案.
常用选项:
-c: 建立新的备份文件
-z: 通过 gzip 指令处理备份文件
-v: 显示指令执行过程
-f: 指定备份文件
-x: 从备份文件中还原文件
zip 可以用来解压缩文件, 或者对文件进行打包操作.
unzip 加压缩. zip 包, 不在详述.
另外, 关于压缩, 解压缩命令还有 gzip,gunzip,bzip2,bunzip2 等, 读者如果感兴趣, 可自行搜索了解.
进程管理
ps 用于报告当前系统的进程状态, 是最基本同时也是非常强大的进程查看命令, 使用该命令可以确定有哪些进程正在运行和运行的状态, 进程是否结束, 进程有没有僵死, 哪些进程占用了过多的资源等等, 总之大部分信息都是可以通过执行该命令得到的.
由于 ps 命令能够支持的系统类型相当的多, 所以选项多的离谱! 我主要使用:
kill 命令用来删除执行中的程序或工作. kill 可将指定的信息送至程序. 预设的信息为 SIGTERM(15), 可将指定程序终止. 若仍无法终止该程序, 可使用 SIGKILL(9)信息尝试强制删除程序. 程序或工作的编号可利用 ps 指令或 job 指令查看.
常用选项:
kill -9 强制终止进程
kill -15 正常终止进程
具有相似功能的命令, 还有 killall,pkill 等.
watch 以周期性的方式执行给定的指令, 指令输出以全屏方式显示.
常用选项:
-n: 指定指令执行的间隔时间(秒)
-d: 高亮显示指令输出信息不同之处
-t: 不显示标题.
service service 命令是 RedHat Linux 兼容的发行版中用来控制系统服务的实用工具, 它以启动, 停止, 重新启动和关闭系统服务, 还可以显示所有系统服务的当前状态.
服务名: 自动要控制的服务名, 即 / etc/init.d 目录下的脚本文件名
示例:
网络操作
curl curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具. 它支持文件的上传和下载, 所以是综合传输工具, 但按传统, 习惯称 curl 为下载工具.
wget wget 命令用来从指定的 URL 下载文件.
ping 用来测试主机之间网络的连通性.
telnet 用于登录远程主机, 对远程主机进行管理. 我常用它来检测端口.
nslookup 常用域名查询工具, 就是查 DNS 信息用的命令.
ss 用来显示处于活动状态的套接字信息. ss 命令可以用来获取 socket 统计信息, 它可以显示和 netstat 类似的内容. 但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息, 而且比 netstat 更快速更高效.
常用选项:
-n: 不解析服务名称, 以数字方式显示
-a: 显示所有的套接字
-l: 显示处于监听状态的套接字
-m: 显示套接字的内存使用情况
-p: 显示使用套接字的进程信息
-i: 显示内部的 TCP 信息;
-t: 只显示 tcp 套接字
-u: 只显示 udp 套接字
nc nc 是 netcat 命令的简称, 都是用来设置路由器. 我常用它来上传文件到服务器, 具体可参考 如何优雅的实现文件上传或下载
ifconfig 用于配置和显示 Linux 内核中网络接口的网络参数. 用 ifconfig 命令配置的网卡信息, 在网卡重启后机器重启后, 配置就不存在. 要想将上述的配置信息永远的存的电脑里, 那就要修改网卡的配置文件了.
ifconfig eth0 down 关闭网卡 eth0
ifconfig eht0 up 启动网卡 eth0
系统管理
su 用于切换当前用户身份到其他用户身份, 变更时须输入所要变更的用户帐号与密码.
sudo 以其他身份来执行命令, 预设的身份为 root. 在 / etc/sudoers 中设置了可执行 sudo 指令的用户.
du 查看使用空间.
常用选项:
-a 显示目录中个别文件的大小
-b 显示目录或文件大小时, 以 byte 为单位
-c 除了显示个别目录或文件的大小外, 同时也显示所有目录或文件的总和
-k 以 KB(1024bytes)为单位输出
-m 以 MB 为单位输出
-s 仅显示总计, 只列出最后加总的值
-h 以 K,M,G 为单位, 提高信息的可读性
性能监测与优化
top 可以实时动态地查看系统的整体运行情况, 是一个综合了多方信息监测系统性能和运行信息的实用工具. 通过 top 命令所提供的互动式界面, 用热键可以管理.
常用选项:
-d: 屏幕刷新间隔时间
-u < 用户名>: 指定用户名
-p < 进程号>: 指定进程
-n < 次数>: 循环显示的次数
交互命令:
1: 显示全部 CPU 信息
k: 终止一个进程
i: 忽略闲置和僵死进程, 这是一个开关式命令
q: 退出程序
o 或者 O: 改变显示项目的顺序
m: 切换显示内存信息
t: 切换显示进程和 CPU 状态信息
c: 切换显示命令名称和完整命令行
M: 根据驻留内存大小进行排序
P: 根据 CPU 使用百分比大小进行排序
T: 根据时间 / 累计时间进行排序
free 显示当前系统未使用的和已使用的内存数目, 还可以显示被内核使用的内存缓冲区.
常用选项:
-b: 以 Byte 为单位显示内存使用情况
-k: 以 KB 为单位显示内存使用情况
-m: 以 MB 为单位显示内存使用情况
-t: 显示内存总和列
sar Linux 下系统运行状态统计工具, 它将指定的操作系统状态计数器显示到标准输出设备. sar 工具将对系统当前的状态进行取样, 然后通过计算数据和比例来表达系统的当前运行状态. 它的特点是可以连续对系统取样, 获得大量的取样数据. 取样数据和分析的结果都可以存入文件, 使用它时消耗的系统资源很小. 我常用它查看网卡流量, 具体请参考 Linux 查看实时网卡流量的几种方式.
lsof lsof 命令用于查看你进程开打的文件, 打开文件的进程, 进程打开的端口(TCP,UDP).
常用选项:
-a: 列出打开文件存在的进程
-c < 进程名>: 列出指定进程所打开的文件
-p < 进程号>: 列出指定进程号所打开的文件
当程序报 too many open files 异常时, 可以使用它查看是什么进程打开了太多的文件, 主要查看是不是文件 (包括网络链接) 打开后是不是没有关闭, 我之前的一个项目, 就遇到了这种问题.
ulimit 用来限制系统用户对 shell 资源的访问. 支持以下各种类型的限制: 所创建的内核文件的大小, 进程数据块的大小, Shell 进程创建文件的大小, 内存锁住的大小, 常驻内存集的大小, 打开文件描述符的数量, 分配堆栈的最大大小, CPU 时间, 单个用户的最大线程数, Shell 进程所能使用的最大虚拟内存. 同时, 它支持硬资源和软资源的限制.
常用选项:
-a: 显示目前资源限制的设定
-n <文件数目>: 指定同一时间最多可开启的文件数
-u <程序数目>: 用户最多可开启的程序数目
vmstat 显示虚拟内存状态("Viryual Memor Statics"), 但是它可以报告关于进程, 内存, I/O 等系统整体运行状态.
常用选项:
-a: 显示活动内页
-f: 显示启动后创建的进程总数
-m: 显示 slab 信息
-n: 头信息仅显示一次
-s: 以表格方式显示事件计数器和内存状态
-d: 报告磁盘状态
-p: 显示指定的硬盘分区状态
-S: 输出信息的单位.
iostat 监视系统输入输出设备和 CPU 的使用情况. 它的特点是汇报磁盘活动统计情况, 同时也会汇报出 CPU 使用情况. 同 vmstat 一样, iostat 也有一个弱点, 就是它不能对某个进程进行深入分析, 仅对系统的整体情况进行分析.
常用选项:
-c: 仅显示 CPU 使用情况
-d: 仅显示设备利用率
-k: 显示状态以千字节每秒为单位, 而不使用块每秒
-m: 显示状态以兆字节每秒为单位
-x: 显示扩展状态
Java 常用工具
java 可用来执行 jar 包.
java -jar test.jar
jps jps 是 jdk 提供的一个查看当前 Java 进程的小工具, 可以看做是 JavaVirtual Machine Process Status Tool 的缩写. 非常简单实用.
常用选项:
-l: 输出完全的包名, 应用主类名, jar 的完全路径名
-v: 输出 jvm 参数
jmap 打印出某个 java 进程内存中所有'对象'的情况.
常用选项:
-dump:[live,]format=b,file=<filename> 使用 hprof 二进制形式, 输出 jvm 的 heap 内容到文件 =. live 子选项是可选的, 假如指定 live 选项, 那么只输出活的对象到文件.
-heap 打印 heap 的概要信息, GC 使用的算法, heap 的配置及 wise heap 的使用情况.
-histo[:live] 打印每个 class 的实例数目, 内存占用, 类全名信息. VM 的内部类名字开头会加上前缀 "*". 如果 live 子参数加上后, 只统计活的对象数量.
jstat Jstat 用于监控基于 HotSpot 的 JVM, 对其堆的使用情况进行实时的命令行的统计, 使用 jstat 我们可以对指定的 JVM 做如下监控:
类的加载及卸载情况, 查看新生代, 老生代及持久代的容量及使用情况, 查看新生代, 老生代及持久代的垃圾收集情况, 包括垃圾回收的次数及垃圾回收所占用的时间, 查看新生代中 Eden 区及 Survior 区中容量及分配情况等.
常用选项:
-gcutil 用于查看新生代, 老生代及持代垃圾收集的情况
-class 用于查看类加载情况的统计
说明:
S0 Heap 上的 Survivor space 0 区已使用空间的百分比
S1 Heap 上的 Survivor space 1 区已使用空间的百分比
E Heap 上的 Eden space 区已使用空间的百分比
O Heap 上的 Old space 区已使用空间的百分比
P Perm space 区已使用空间的百分比
YGC 从应用程序启动到采样时发生 Young GC 的次数
YGCT 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC 从应用程序启动到采样时发生 Full GC 的次数
FGCT 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT 从应用程序启动到采样时用于垃圾回收的总时间(单位秒), 它的值等于 YGC+FGC
jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息.
jstack 25211> 25211.txt 将当前堆栈信息输出到文件.
参考: https://www.jianshu.com/p/341bc031ea2b
来源: http://www.bubuko.com/infodetail-2991073.html