Linux 常用命令速查

466 阅读14分钟

linux系统文件结构

/ : 根目录

/bin : 存放必要的命令

/boot : 存放内核以及启动所需的文件

/dev : 存放设备文件

/etc : 存放系统配置文件

/home : 普通用户的目录

/mnt : 存放临时的映射文件系统,通常用来挂载使用

/proc : 存放存储进程和系统信息

/root : 超级用户的主目录

/sbin : 存放系统管理程序

/tmp : 存放临时文件

/usr : 存放应用程序,命令程序文件、程序库、手册和其它文档。

/var : 系统默认日志存放目录录

后台运行进程

默认情况下,用户创建的进程都是前台进程,前台进程从键盘读取数据,并把处理结果输出到显示器。

如果想让进程在后台启动,只需要在要执行的命令后面添加 & 符号,就表示这个命令在后台执行,例如 在后台运行 eureka-server.jar 这样,当前窗口我们还可以执行其他命令

java -jar ./eureka-server.jar &

后台进程的优点是不必等待程序运行结束,就可以输入其它命令缺点是后台进程与终端相关联,一旦关闭终端,进程就自动结束了

使进程不受挂断(关闭终端等动作)的影响

在命令前面加上 nohup 命令,可以使进程不受挂断(关闭终端等动作)的影响。

例如,如下命令,即使你关闭终端后他依然在运行

nohup java -jar ./eureka-server.jar

nohup 命令最常用的用法是和 & 结合使用,让一个任务在后端执行,并且不受挂断影响,例如

nohup java -jar ./eureka-server.jar &

输出重定向

把本来要输出到终端的结果,输出到别的地方(到文件中或者作为其他命令的输入)

  • >覆盖的方式重定向输出。例如重定向到文件,如果文件不存在,就创建文件,如果文件存在,就覆盖原始内容。
  • >>追加的方式重定向输出。例如重定向到文件,如果文件不存在,就创建文件,如果文件存在,就追加到文件的末尾。
  • 2>>追加的方式重定向标准错误输出。只重定向标准错误输出
  • 2>&1追加的方式重定向标准输出和标准错误输出

例如 追加 size=100 到 xxx.conf 文件的末尾

echo size=100 >> xxx.conf

例如 启动 eureka-server.jar 并将日志输出到 eureka-server.log 文件中

java -jar ./eureka-server.jar >> ./eureka-server.log 2>&1

更常用的方式是结合 &nohup 一起使用(关于 &nohup 上面有讲),例如

nohup java -jar ./eureka-server.jar >> ./eureka-server.log 2>&1 &

表示,在后台启动 eureka-server.jar 并将日志输出到 eureka-server.log 文件中,并且及时关掉终端,也不会影响程序的运行

短命令选项与长命令选项

Unix/Linux 命令中
- 后一般跟短命令选项(通常是单字母,也有一些命令是例外的)
-- 后一般跟长命令选项,通常是一个单词
如果只有一个单独的--,后面不紧跟任何选项,则表示命令选项结束,后续的都作为命令的参数而不是选项。(例如: git checkout -- filename filename 作为 git checkout 的参数,而不是选项)

查看系统变量

echo 主要用来查看系统变量或在shell编程中打印信息

# 查看系统变量
echo 系统变量

例如

# 将信息输出到文件,文件不存在则创建,文件存在则覆盖原来的内容
echo 系统变量或其他内容 > 文件

查看文件

less

查看文件,支持上下翻页、翻行和查找

# -N 显示行号
less [-N] 文件名
  • 上翻页:W键
  • 下翻页:空格键、D键
  • 上翻行:上键
  • 下翻行:下键、S键、回车键
不同的操作系统 按键可能不一样,Mac 上还支持鼠标滚轮
  • 退出:q
  • 查找字符串: / 要查找的字符,
    • n : 下一个匹配的文本
    • N : 上一个匹配的文本
  • 移动到最后一行:G
  • 移动到第一行:g

tail

查看正在改变的日志文件

# 不断刷新末尾内容到屏幕上
tail -f 文件名

查看文件末尾

# 默认读取最后10行
tail [-n 行数] 文件名

vi 编辑器

vi有三种基本工作模式:命令模式、文本输入模式、末行模式。

命令模式下的操作

  • 撤销:u
  • 反撤销:ctrl + r
  • 剪切光标所在当前行:dd
  • 复制光标所在当前行:yy
  • 在光标的下一行粘贴:p

末行模式下的操作

  • 显示行号:set nu
  • 查找:/要查找的字符串,n查找下一个,N查找前一个
  • 全部替换:%s/要查找的字符串/要替换的字符串/g。例如 %s/abc/123/g 表示把所有的 abc 替换成 123
  • 部分替换:开始行,结束行s/要查找的字符串/要替换的字符串/g ,包括开始行号不包括结束行号。例如 10, 20s/abc/123/g 表示把10到19行的abc替换成123
  • 另存为 w 新文件

修改文件或文件夹权限

chmod 755 文件或文件夹

linux 的文件权限

linux 将文件的权限分为三种

  • 可读:read 简称 r
  • 可写:write 简称 w
  • 可执行:execute 简称 x

有了简称之后,一个文件的权限就可以通过一组 rwx 来表示。比如 r - - 代表,文件只有读权限,rw- 代表文件可读、可写,不可执行

有了权限还不够,linux 是多用户系统,还要给不同的用户设置不同的权限。 于是一组 rwx 变成三组 rwxrwxrwx

  • 第一组 rwx 表示的是文件所有者拥有的权限
  • 第二组 rwx 表示的是文件所有者所在用户组拥有的权限
  • 第三组 rwx 表示的是其他用户拥有的权限

除了三组 rwx 之外,为了区分文件和文件夹,linux 还在 三组 rwx 的前面加上一位字符以示区分。 如图, - 表示这是文件,d 表示这是文件夹

用数字表示权限

要给一个文件设置权限要设置 rwxrwxrwx 这样的一长串字符很不方便,于是想了另外一个办法来表示权限

  1. 首先将 rwx 看作三个占位符, - - -
  2. 将每个占位符看成一个二进制数,有字符就代表1,没字符就代表 0。比如 r- - 就代表 100, - w - 就代表010, - -x 就代表 001
  3. 将三位二进制数转换为十进制。比如 r- - 二进制是 100,十进制是 4,r-x 二进制是 101,十进制是 5,rwx 二进制是 111,十进制是 7

整体流程:将3组 rwx 转换成3组二进制数,再将每组二进制数转为十进制数,最终得到3位十进制数

比如常用的 755 表示,文件所有者可读可写可执行,文件所有者所在用户组可读可执行,其他用户可读可执行。

输出重定向

把正确输出和错误输出都保存到同一个文件

# >> 表示用追加的方式,最后的 & 表示在后台运行
nohup 命令 >> 文件 2>&1 &

例如 nohup java -jar /ent.jar >> /log/ent.log 2>&1 &

把正确输出放到文件A,错误输出放到文件B

# >> 表示用追加的方式,最后的 & 表示在后台运行
nohup 命令 >> 文件A 2>> 文件B &

例如 nohup java -jar /ent.jar >> /log/ent.log 2>> /log/ent_err.log &

ps

ps -ef | grep 关键字
ps aux | grep 关键字
# 查看 aux 的标题栏
ps aux | head -n 1

常用数据项含义

字段含义
UID用户ID
PID进程ID
PPID父进程ID
C、%CPU、CP进程占用的CPU百分比或千分比
%MEM进程占用内存的百分比
VSZ进程申请的虚拟内存量(KB)并不反应占用的物理内存的大小
RSS进程占用的物理内存大小(KB)
S、STATE、STAT进程的状态,R运行 S中断 D不可中断 Z僵死 T停止
CMD、COMMAND命令的名称和参数

kill

# 发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作
kill -9 进程id

查看端口号

netstat  -anp  | grep   端口号

查找文件或文件夹

# 查找/Users/wqlm/Desktop/work/ssm 目录及一级子目录中 小于1KB 以test开头的文件,不包含文件夹。找到后,移动到 当前目录下到 test 目录中
 find /Users/wqlm/Desktop/work/ssm -maxdepth 2 -size -1k  -type f -name "test*" -exec mv {} ./test \;

文件名

-name 文件名,文件名支持模糊匹配,* 匹配任意多个字符。

比如 *txt 匹配所有 txt结尾的文件

忽略大小写

-name "文件名",也可以通过模糊匹配实现同样的效果

路径

  • . 代表当前目录
  • / 代表根目录

路径的查找深度

  • -maxdepth 深度,默认是查找所有层级的子目录,-maxdepth 1表示只查找当前目录, -maxdepth 2表示查找当前目录及下一级子目录

指定大小 默认单位是块(1块=512字节),其他单位还有

  • k(小写):KB
  • M:MB
  • G:GB

-size +50k(小写) :表示大于 50KB -size -1M :表示小于 1MB

只匹配文件或文件夹

  • -type f 匹配文件(包括隐藏文件)
  • -type d 匹配文件夹(包括隐藏文件夹)
  • 默认全部匹配

查询完之后进行的操作

-exec 命令 {} \;

{} 是个占位符,代表的是匹配的文件或文件夹列表

例如 -exec mv {} /tmp; 表示将找到的文件移动到 /tmp 中

应用

查找 当前 目录及子目录中 文件大小 小于64KB 的文件数量

find ./  -size -64k  -type f  | wc -l

压缩、解压

Linux下常见的压缩包格式有

  • zip
  • tar.gz
  • tar.bz2
  • tar.xz
  • tar.Z

zip

# 压缩指定的所有文件或文件夹, -r 表示遍历文件夹
zip -r 压缩包名.zip 文件或文件夹1 文件或文件夹2 ...
# 解压 .zip 到指定路径,默认解压到当前目录
unzip name.zip [-d 路径]

tar

tar 是种打包格式,gz 和 bz2 等后缀才是压缩方式

  • tar.gz :压缩格式为 gzip
  • tar.bz2 :压缩格式为 bzip2
  • tar.xz :压缩格式为
  • tar.Z :压缩格式为
# 解压 .tar.gz 到指定路径,默认解压到当前目录
tar -zxvf filename.tar.gz [-C 路径]

其中zxvf含义分别如下

  • z:告诉 tar 压缩格式为 gzip
  • x(extract):表示解压
  • v(verbose):显示详细过程
  • f(file):档案名称。注意,这个参数需要放到最后,它到后面只能接档案名
# 解压 .tar.bz2 到指定路径,默认解压到当前目录,-j指压缩格式为bzip2
tar -jxvf filename.tar.bz2 [-C 路径]
# 解压 .tar.xz 到指定路径,默认解压到当前目录
tar -Jxvf filename.tar.xz [-C 路径]
# 解压 .tar.Z 到指定路径,默认解压到当前目录
tar -Zxvf filename.tar.Z [-C 路径]
从 1.15 版本开始 tar 就可以自动识别压缩的格式,不需人为指定

防火墙

不同的 linux 发行版有不同的防火墙,甚至同一个发行版的不同版本之间,使用的防火墙也不同

这里主要介绍两种防火墙产品

  • firewall : 是 CentOS/RedHat 7或Fedora 18 及以上版本的默认防火墙
  • iptable : 是 CentOS/RedHat 7 或Fedora 18 以下版本的默认防火墙

iptable

基本操作

# 查看防火墙状态
service iptables status

# 停止防火墙
service iptables stop

# 启动防火墙
service iptables start

# 重启防火墙
service iptables restart

# 开机自启
chkconfig iptables on

# 开机不自启
chkconfig iptables off 
# 开机不自启
/sbin/chkconfig --level 2345 iptables off

开放端口

# 查看查看端口开启情况
iptables -L -n 

# 添加端口 7000
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -p udp --dport 7000 -j ACCEPT
iptables -A OUTPUT -p udp --dport 7000 -j ACCEPT

# 保存更改
/etc/rc.d/init.d/iptables save

# 重启防火墙
service iptables restart    

firewall

# 查看防火墙开启状态
systemctl status firewalld

主要看 Active

# 启动
systemctl start firewalld

# 关闭
systemctl stop firewalld

# 开机启动
systemctl enable firewalld

# 取消开机启动
systemctl disable firewalld

开放端口

# 查看端口开启情况
firewall-cmd --zone=public --list-ports

# --permanent 表示永久生效,不加重启后失效
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=22/udp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=80/udp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=443/udp --permanent

# 重新载入一下防火墙设置,使设置生效
firewall-cmd --reload

# 查看某个端口是否生效
firewall-cmd --zone=public --query-port=22/tcp

关闭端口,同样设置完之后需要载入一下

#  --permanent 表示永久生效,不加重启后失效
firewall-cmd --zone=public --remove-port=22/tcp --permanent

查看系统版本

uname -a

cat /proc/version

cat /etc/redhat-release

查看 Linux 版本:

方式一

lsb_release -a

方式二

cat /etc/issue

方式三

cat /etc/redhat-release

查看 Linux 内核版本

cat /proc/version

uname -a

uname -r

查看系统是64位还是32位:

# PC server X86 系列、I386--I686 都是32位,x86_64 是 64位

cat /proc/version

lsb_release -a

getconf LONG_BIT

file /bin/ls

关机、重启系统

关机

# 立刻关机

halt

poweroff

# 安全的关机,root用户使用
shutdown -h now

重启

# 立刻重启
reboot

# 安全的重启,root用户使用
shutdown -r now ()

查看树形结构目录

需要安装 tree 这个工具

yum install tree -y

展示当前目录下所有的层级

tree

展示当前目录下 5 个层级

tree -L 5

展示当前目录下 5 个层级,并对目录着色

tree -L 5 -C

展示当前目录下 5 个层级,并对目录着色。并显示权限信息

tree -L 5 -C -p

展示当前目录下 5 个层级,并对目录着色。并显示权限信息,并列出相对路径

tree -L 5 -C -p -f

展示当前目录下 5 个层级,并对目录着色。并显示权限信息,并只显示目录

tree -L 5 -C -p -d

展示 /tmp 目录下 5 个层级,并对目录着色。并显示权限信息,并列出相对路径

tree  /tmp -L 5 -C -p -f

创建多级目录

mkdir -p  ./dir1/dir2/dir3

如果 ./dir1 存在,则会忽略,自动创建 /dir2/dir3

修改主机名

hostnamectl set-hostname 主机名

修改完成之后重启

reboot

上传文件到linux、下载linux的文件

安装lrzsz

yum install -y lrzsz

上传文件到当前 linux 目录

rz 

在弹出的窗口中选择要传输的文件

下载 linux 上的文件

sz 文件名

在弹出的窗口中选择要下载的地址

linux 主机间文件的拷贝

scp [-r] 源文件或目录  用户@主机名或ip:目标文件或目录

-r 是循环遍历的意思,当要拷贝目录时,需要加上 -r

例如:scp -r /usr/local/flink/ root@hadoop3:/usr/local/flink

包管理器

yum

更换yum源

参考 163 CentOS 镜像使用说明

下载服务器包信息到本地缓存

yum makecache

在本地搜索包信息

yum search 包名

在服务器搜索包信息

yum -C search

获取软件包信息

yum info 关键字

查看某个包是否已安装

yum list installed | grep 包名

列出所有已安装的软件包

yum list installed

列出所有可更新的软件包

yum list updates

更新yum

yum update

清除yum缓存

yum clean all

网卡

配置网络

vi /etc/sysconfig/network-scripts/ifcfg-网卡名

重启网络

service network restart

启动网卡

ifup 网卡名

每次开机自动启动网卡 如果每次开机之后,需要 ifup 网卡名 来启动网卡,那可能是网卡的配置文件没有配置好, vi /etc/sysconfig/network-scripts/ifcfg-网卡名,然后将 ONBOOT 改成 yes

安装常用软件

# net-tools 包下有 ifconfig,精简版 linux 可能没装
yum install net-tools -y

# wget
yum install -y wget

# tree 树型展示目录
yum install tree -y

# 上传文件到linux、下载linux的文件
yum install -y lrzsz

# 常用压缩、解压工具
yum install –y unzip
yum install –y tar
yum install –y gzip
yum install -y bzip2

# 常用编译工具
yum install –y gcc 
yum install –y gcc-c++
yum install –y make

同步系统时间

date '+%Y-%m-%d %H:%M:%S'
ntpdate time.nist.gov 
date '+%Y-%m-%d %H:%M:%S'

如果 ntpdate 没有安装,记得安装一下

yum -y install ntp

查看命令的可执行文件所在路径

Linux 下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序, 如果想查看某个命令的可执行文件所在的路径,可以使用如下命令

which 命令

关闭 selinux

vi /etc/selinux/config

然后修改 SELINUX 为 disabled ,然后重启。

注意,是上面的 SELINUX,而不是最下面的 SELINUXTYPE,别改错了,不然重启后,机器起不起来