「生活可以更简单, 欢迎来到我的开源世界」
  1. 文档帮助
  2. 文件管理
  3. 搜索查找
    1. 根据指定的条件查询:find
    2. 搜索文件名数据库:locate
    3. 在文本文件中搜索:grep
  4. 组合命令
    1. 标准输入输出流
  5. 文本处理
  6. 磁盘管理
  7. 进程管理
    1. ps
    2. kill
    3. top
    4. lsof
  8. 性能监控
  9. 网络工具
    1. ss
  10. 用户管理
  11. 环境变量
  12. 系统管理
  13. 主要参考
Linux基础-汇总记录
2021-01-03

介绍Linux常用命令工具。

文档帮助

查看命令简要说明:whatis

查看命令详细说明:info

查看命令说明文档:man

读取命令的描述:whatis,相当于man -f

基于功能查找命令:opropos,相当于man -k

whereis:查找命令的可执行文件、源文件和 man page的路径

which:命名存在多个版本时,找出将要运行的命令的版本

文件管理

创建文件,修改时间:touch,touch存在的主要目的是更新文件访问和修改时间

创建目录:mkdir

删除:rm

移动:mv

复制:cp

显示当前目录:pwd

切换目录:cd

列出目录项:ls

查看文件内容:

创建链接:

搜索查找

根据指定的条件查询:find

搜索文件名数据库:locate

知道文件的名称,或者名称的一部分,但不记得放在系统的哪个位置。这就是locate命令要解决的问题。locate命令能够在文件、程序和目录中查找与提供的搜索项匹配的内容,并把任何匹配的结果依次显示到终端界面上。

搜索结果出来得非常快,因为locate命令并没有对系统进行实时搜 索。实际上,它搜索的是每天自动更新的文件名数据库。因为locate搜索的是早已创建好的数据库,所以搜 索结果几乎能够瞬间显示出来。

locate:从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用updatedb更新库。索引查找速度快,需要更新,查找结果是整个路径

在文本文件中搜索:grep

一般用法:grep modao ./dir/*

image-20210103203410531

正则表达式中的单引号和双引号的用法也有很大区别。单引号是在告诉shell正在搜索一个字符串,而双引号则是让shell知道想要使用shell变量。

参数-R:递归式地搜索文件中的文本

参数-i:搜索文件中的文本,忽略大小写

参数-w:在文件中只搜索整个词

参数-n:显示搜索结果在文件中的行号

参数-v:显示没有包含搜索内容的行

参数-l:列出包含搜索内容的文件名

在其他命令的输出中搜索特定内容:ls -1 | grep 1960

在搜索结果中进行搜索:ls -1 | grep 196[6-7] | grep -v Live

查看文件中搜索内容的上下文信息:

组合命令

分号;创建命令栈:命令栈是将所有需要运行的命令放到shell的一行上,再用分号(;) 隔开每个具体的命令。接着依次顺序执行每个命令,只有一个命令结束运行(无论成功或失败),才会运行下一个命令。

使用&&代替;来顺序执行命令:只有前面的命令运行成功,才运行下一个命令

使用||代替;来顺序执行命令:只有前面的命令运行失败,才运行下一个命令

$():命令替换,将一个命令的输出插入到另一个命令

mkdir $(date "+%Y-%m-%d")

标准输入输出流

|:当把它放在两个命令之间时,它可以将第一个命令的输出作为第二个命令的输入。换句话说,|重定向stdout,将它发送到第二个命令的stdin。

>:将命令的输出重定向到文件,覆盖型。为了防止重定向时覆盖文件:set -o noclobber,从现在起,如果要使用重定向并覆盖文件,应该用>|代替>。关闭noclobber:set +o noclobber。要一直开着noclobber选项,需要在.bashrc文件中增加一行set -o noclobber

>>:将命令的输出追加到文件的底部,追加型(如果文件不存在,就会创建它)

<:将文件作为命令的输入

文本处理

sort命令:对文本内容排序

uniq命令:比较相邻的行并去掉重复的行,对不相邻的行无效

【留空】

sed和echo已经另外记录

Linux 三剑客之 awk 详解

磁盘管理

查看磁盘空间:df,默认以B为单位且不显示单位

查看当前目录所占空间:du

在linux中归档和压缩和分两步来实现的

归档文件:tar

解包文件:tar

测试tarball:参数-t

压缩文件 & 解压文件:

image-20200718152352629

进程管理

ps

查询所有进程信息:ps aux

ps命令显示当前状态(STAT)的种类

Z是个坏消息,因为它意味着进程基本上一直处于挂起状态,不能停止 (幸运的是,这并不意味着没有解决问题的办法)。如果某个程序有 问题,ps标明其状态为Z,这时或许只有重启计算机才能完全关闭这个 程序。

kill -9选项对“僵尸”进程也没有效果,这样的进程早已经死掉了,因此kill命令对它也无能为力。重启是唯一能够解决这种问题的办法,不过这样的问题通常是无关紧 要的。

查看进程树:ps axjf

查看特定用户拥有的进程:ps U [username]

kill

发送指定信号到相应进程:kill,默认信息是15,指正常停止,一般操作对象是PID,也可使用%jobs指定作业号

top

top命令提供的则是进程的动态更新的视图,展示系统中正在运行着什么进程,以及每个进程正在使用多少系统资源

分析线程堆栈:pmap,输出内存的状况

lsof

Linux系统中的所有东西都是文件,包括目录、网络连接和设备

列出当前系统打开的所有文件的工具:lsof(list open files的缩写)

# 列出所有打开的文件:
lsof
# 备注: 如果不加任何参数,就会打开所有被打开的文件,内容非常多,可以通过管道传给less

# 列出某个用户打开的文件
lsof -u username

# 列出除了某个用户外的被打开的文件
lsof -u ^username

# 列出正在使用特定文件的用户
lsof /filepath/file

#递归查看某个目录的文件信息
lsof +D /filepath/filepath2/
lsof | grep ‘/filepath/filepath2/’

# 列出特定程序的进程
lsof -c [program]

# 列出多个程序的进程
lsof -c [program] -c [program]

# 列出某个用户以及某个程序所打开的文件
lsof -u username -c [program]

# 通过某个进程号显示该进行打开的文件
lsof -p 1

# 列出多个进程号对应的文件信息
lsof -p 123,456,789

# 列出除了某个进程号,其他进程号所打开的文件信息
lsof -p ^1

# 列出所有的网络连接
lsof -i

# 列出所有tcp 网络连接信息
lsof -i tcp

# 列出所有udp网络连接信息
lsof -i udp

# 列出谁在使用某个端口
lsof -i :3306

# 列出谁在使用某个特定的udp端口
lsof -i udp:55

# 特定的tcp端口
lsof -i tcp:80

# 列出某个用户的所有活跃的网络端口
lsof -a -u test -i

# 列出所有网络文件系统
lsof -N

#域名socket文件
lsof -u

#某个用户组所打开的文件信息
lsof -g 5555

# 根据文件描述列出对应的文件信息
lsof -d description(like 2)

# 根据文件描述范围列出文件信息
lsof -d 2-3

Linux lsof命令

Linux 命令神器:lsof

使用文件或文件结构识别进程:fuser

pgrep

性能监控

CPU监控:top

内存监控:free

综合监控工具:vmstat

超级监控工具:dstat

网络工具

查看网络接口状态:ifconfig

配置网络接口:ifconfig

# eth0上的以太网卡的IP地址修改为192.168.0.125,
ifconfig eth0 192.168.0.125

# 为了运行某种类型的网络数据包嗅探工具(如强大的Ethereal),
# 需要首先将网卡设置为混杂(promiscuous)模式。
ifconfig eth0 promisc

# 关闭混杂模式
ifconfig eth0 -promisc

# 修改[或“欺骗(spoff)”]网络设备的硬件MAC地址
# 修改MAC地址时要小心,因为万一出错,就可能与其他网络设备发生冲突,引发问题
# 首先一定要用ifconfig获得设备的默认MAC地址,以便以后可以把默认的MAC地址再修改回来
ifconfig eth0 hw ether 00:14:CC:00:1A:00

查看无线网络接口的状态:iwconfig,可以尽可能多地得到与无线网卡相关的数据

配置无线网络接口:iwconfig

验证计算机能否联网:ping,发送ICMP消息

追踪路由:traceroute,默认路由跳数为30

执行DNS查询:host

使用DHCP获得新的网络地址:dhclient

启动网络连接:ifup [interface]

关闭网络连接:ifdown [interface]

显示IP路由表、修改IP路由表:route

ss

ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。

ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。

使用方式:

-h, --help           this message
-V, --version output version information
-n, --numeric don't resolve service names
-r, --resolve resolve host names
-a, --all display all sockets
-l, --listening display listening socket
-o, --options show timer information
-e, --extended show detailed socket information
-m, --memory show socket memory usage
-p, --processes show process using socket
-i, --info show internal TCP information
-s, --summary show socket usage summary

-4, --ipv4 display only IP version 4 sockets
-6, --ipv6 display only IP version 6 sockets
-0, --packet display PACKET sockets
-t, --tcp display only TCP sockets
-u, --udp display only UDP sockets
-d, --dccp display only DCCP sockets
-w, --raw display only RAW sockets
-x, --unix display only Unix domain sockets
-f, --family=FAMILY display sockets of type FAMILY

-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

-D, --diag=FILE Dump raw information about TCP sockets to FILE
-F, --filter=FILE read filter information from FILE
FILTER := [ state TCP-STATE ] [ EXPRESSION ]

常用命令:

# 显示所有TCP socket
ss -t -a
# 显示所有UDP socket
ss -u -a
# 列出所有打开的网络连接端口
ss -l
# 显示每个进程打开的socket
ss -pl
# 显示所有已建立的SMTP连接
ss -o state established '( dport = :smtp or sport = :smtp )'
# 显示所有已建立的HTTP连接
ss -o state established '( dport = :http or sport = :http )'
# 找出所有连接X服务器的进程
ss -X src /tmp/.X11-unix/*
# 列出当前socket(已连接、关闭、等待)详细信息
ss -s

ss常用的state状态:

established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all : All of the above states
connected : All the states except for listen and closed
synchronized : All the connected states except for syn-sent
bucket : Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
big : Opposite to bucket state.

ss使用IP地址筛选:ss src ADDRESS_PATTERN

ss使用端口筛选:ss (dport | sport) OP PORT

为什么ss比netstat快?
netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多

用户管理

添加用户:useradd -m [username] -s [/bin/bash]

设置密码:passwd [username]

删除用户:userdel [username]

切换用户:su [username]

查看当前用户所属组:groups

将用户添加到组:usermod -G [groupname] [username]

变更用户所在组:usermod -g [groupname] [username],添加到新组,从旧组中删除

查看所有用户及权限:less /etc/passwd

查看所有用户组及权限:less /etc/group

修改文件或目录属于的用户组:chgrp

同时修改文件和目录的拥有者和用户组:chown owner:group,甚至可以省略owner实现修改用户组,被修改的文件或目录有:则使用反斜杠转义。

更改文件和目录的权限:chmod [userMark](+|-|=)[PermissionsMark]

chmod a+x main         对所有用户给文件main增加可执行权限
chmod g+w blogs 对组用户给文件blogs增加可写权限
chmod o= test 删除系统中所有其他用户的所有权限
# 数字方式
chmod 740 main 将main的用户权限设置为rwxr-----

# 更改文件拥有者
chown username dirOrFile
# 更改目录拥有者(-R选项递归更改)
chown -R weber server/

可以对文件或目录使用chmod 000,但是那样的话,唯一能 够对它进行任何操作或再使用chmod命令修改权限的用户就只有 root了。

环境变量

Bash快捷操作:

用户环境信息配置文件,保存于用户主目录:

~/.profile~/.bashrc的区别:

  • 这两者都具有个性化定制功能
  • ~/.profile可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次
  • ~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次

系统全局环境信息配置文件,保存于/etc目录:

当登入系统获得一个shell进程时,其读取环境设置脚本分为三步:

  1. 首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d/etc/inputrc
  2. 读取当前登录用户Home目录下的文件~/.bash_profile,其次读取~/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系
  3. 读取~/.bashrc

系统管理

查看Linux系统版本:

查看CPU信息:cat /proc/cpuinfo

查看CPU核心:cat /proc/cpuinfo | grep processor | wc -l

查看内存信息:cat /proc/meminfo

查看架构:arch

系统时间:date

设置时区:tzselect

将系统时间写入CMOS:clock -w

主要参考

Linux工具快速教程

本文命令测试环境:Ubuntu 18.04 x86_64

<⇧>