Featured image of post Linux指令学习集合

Linux指令学习集合

Linux学习后的常用指令总结,不保证内容100%无误哦!

登录

普通登录

1
ssh username@IP -p port
  • username 用户名

  • IP 服务器 IP

  • port 登录端口

  • exit / ctrl + D 可以退出本次登录

ROOT 用户登录

以下方法仅第一次可用:

  1. 登录用户账户

  2. 执行命令 sudo passwd root

  3. 会出现 [sudo]password for username:

  4. 输入目前登录用户的账户和密码

  5. 当显示 NewPassword: 时输入新的 ROOT 账户的密码

  6. Retype New Password: 再次输入刚刚设定的 ROOT 账户密码进行确认

即可重置 ROOT 账户的密码

接着执行命令 su - root 即可切换为 ROOT 账号


文本编辑器 vi

vi 文件

  • 如果命令指定的文件不存在,则创建文件

  • 如果命令指定的文件存在,则打开该文件

命令模式

  • h 光标左移一个字符

  • j 光标下移一个字符

  • k 光标上移一个字符

  • l 光标右移一个字符

  • x 删除光标所在字符

  • dd 删除光标所在行

  • ndd n 为数字,表示删除当前光标及下面的 n 行

  • dG 删除当前行以下的所有内容

  • d$ 删除当前光标到当前光标所在行的结尾

  • d0 删除当前光标到当前光标所在行的开头

  • dw 删除光标处到词尾的内容

  • gg 把光标移到文件开始的位置

  • G 将光标移到文件末尾

  • ctrl + F 上一页

  • ctrl + B 下一页

  • 0 把光标移动到所在行的行首

  • $ 把光标移动到所在行的行尾

  • pageup 向上翻页

  • pagedown 向下翻页

  • yy 复制光标所在行

  • p 粘贴

  • v 移动光标进入选择模式

  • y 复制选中的内容

  • nyy n 为数字,表示复制当前光标及下面的 n 行

  • u 撤销刚才的操作

  • ctrl + R 恢复更改

  • . 重复刚才所做的操作

插入模式

按下键盘上的 i 进入插入模式,在左下角会显示 -- INSERT -- 字样

按下键盘上的 a 也可以进入插入模式,不过是在光标后面插入内容

  • 0 在光标上一行之后插入一行

  • o 在光标所在行之后插入一行

  • l 在行的开头进入插入模式

  • A 在行的结尾进入插入模式

  • esc 退出插入模式,进入命令模式

底行模式

  • :wq 保存文件并退出

  • :w 保存文件但是不退出 vi

  • :q! 不保存文件强制退出编辑器

  • :set paste 设置粘贴模式 (用于从外部复制内容进来不会导致内容错乱)

  • :set nu 显示行号

  • :set nonu 关闭行号显示

vi 编辑器其他

  • /[string] string 代表需要查询的内容 比如 /abc 即查询 abc

  • n 查找下一个

  • N 查找上一个

替换内容

1
:[range]/[string]/[replace]/[mode]
  • range 查找要替换内容的范围

  • string 要被替换的内容

  • replace 替换后的内容

  • mode 替换模式


文件系统

Linux 的文件路径是区分大小写的

可以通过 pwd 查询当前工作目录

cd 命令 - 更改工作目录

  • cd / 路径 / 改变工作目录

  • cd… 回到上一级目录

绝对路径与相对路径

  • 绝对路径 开始于根目录,沿着目录层级,一直到达想要的目录或文件

  • 相对路径 相对的当前目录 其中 . 指的是当前目录 … 指的是上一层目录,即当前目录的父目录

./test.txt 在当前目录下寻找 test.txt
./ 路径 / 路径 / 文件 也可以打开路径 / 路径 / 文件
…/ 文件 打开上一层目录中的某文件
…/…/…/文件 打开上 3 层目录中的文件

ls 命令 - 查看文件 / 文件夹

查看目录下的文件 / 文件夹

1
ls [-a / -l / -h] [dir]
  • -a all,列出所有文件

  • -l 以列表形式展示内容,并显示更多信息 可以简写为 ll

  • -lh 显示文件,文件夹大小

  • -la 查看隐藏的文件详情

  • dir 目录

通过 ls 来确定当前的工作目录并不恰当,我们可以使用 pwd 来查看当前所在的工作目录

cp 命令 - 复制

复制命令

1
cp [-r] [source] [destination]
  • -r 拷贝目录 同时会将该目录下的所有文件和文件夹都拷贝过去

  • source 源文件 / 目录

  • destination 目的文件 / 目录

1
cp /data/config.yaml ./config/

cp 命令也可以使用通配符

mv 命令 - 移动 / 重命名

移动 / 重命名命令

1
mv [source] [destination]
  • source 要被移动的源文件 / 目录

  • destination 目标目录 / 文件新名称 / 目录的新名称 (要求该目录不存在)/ 要移动进去的目录 (要求该目录存在)

grep 命令 - 查找

在文件中查找字符串

1
grep [keywords] [file] [-n] [-C] [-B] [-A] [line]
  • keywords 要查找的关键字

  • file 被查找的文件

  • -n 会将行号和每一行的内容都输出

  • -n -C 将查找到所在关键字的这一行的上下 line 行信息都输出出来

  • -n -B 将查找到所在关键字的这一行的上面 line 行信息都输出出来

  • -n -A 将查找到所在关键字的这一行的后面 line 行信息都输出出来

1
grep candy Candy_note -n -C 3

wc 命令 - 关键字数量统计

统计在一个文件中出现的关键字数量

1
wc [-c -m -l -w] [file]
  • -c 统计字节数量

  • -m 统计字符数量

  • -l 统计行数

  • -w 统计单词数量

ln 命令 - 创建 “快捷方式”

创建一个类似于 Windows 中的快捷方式

1
ln -s [source] [destination]
  • source 被链接的文件 / 文件夹路径

  • destination 目的地路径

scp 命令 - 远程拷贝文件

从远程设备中拷贝文件过来

1
scp [localfile][filename] [username]@[address]:[destinationPath]

我们使用 B 主机进行拷贝,就必须要有 B 主机的用户账号。加入 B 主机的账号是 candy1……

1
scp /home/candy0/note.txt candy1@luckyfuture.cc:/home/candy1/

which 命令 - 查找命令

可以查到被查找的命令在哪个路径下

1
which [command]

假如我要查看 ls 命令在哪个路径下:

1
which ls

find 命令 - 查找文件

查找文件在哪个路径下

1
find [startPath] -name ["filename"]
  • startPath 起始查找路径

  • filename 文件名

即从路径开始以文件名查找文件

也可以使用通配符来查找文件

1
find [stratPath] -size [+/-] [n] [kMG]
  • stratPath 起始查找路径

  • +/- + 代表大于 - 代表小于

  • n 代表大小中数字部分

  • kMG k: 代表 kb,需小写 k;M: 代表 MB;G: 代表 GB


用户

ROOT 账号拥有系统的最高权限

每一个用户账号都对应一个用户 ID,其被存储在文件 /etc/passwd 中

添加用户

1
adduser username
  • username 新用户的用户名

如果不添加组参数系统会默认创建一个组

1
adduser --ingroup root username

直接创建一个属于 root 用户组的用户

更新用户密码

如果是非 ROOT 账户,则只能更改自己的密码。ROOT 账户可以更改所有人的密码

1
passwd username
  • username 要被更改密码的账户名 (仅限 ROOT 账户使用)

删除用户

1
deluser username
  • username 要被删除的账户名 删除该用户 (仅限 ROOT 账户使用)

切换用户

1
su [-] username
  • - 使用该用户的用户环境

  • username 要被切换的用户名

如果是 root 账号切换不需要密码,普通用户则需要密码

若一直套娃切换,系统会保留层级关系;在使用 ctrl+D 时会退出当前账号返回上一个账号

1
getent passwd

查看当前系统中有哪些用户


用户组

查看所有用户组

1
groups

查看当前账号用户组

1
groups [username]
  • username 用户名

查看其他用户所属于的用户组

1
grep '[keyword]' /etc/group
  • keyword 组名称关键字

查看用户组里的用户,比如查看以 sudo 开头的组的用户:

1
grep '^sudo' /etc/group

其中,这里的 keyword 可以使用正则表达式

新增 / 删除用户组

1
addgroup [NewGroupName]
  • NewGroupName 新增组的名称

新增一个用户组

1
delgroup [groupname]
  • groupname 要被删除的组名称

删除该用户组

改变用户所在组

1
usermod -g [groupname] [username]
  • groupname 组名称

  • username 用户名

将用户添加的指定的组中

1
usermod -G [groupname1] [groupname2][username]

将用户设定到这些组当中


权限

在 Linux 系统中,权限通常可以按照用户权限分为 3 种类型,以及对文件的 3 种权限方式

用户权限

  • owner 即文件的所有者,也是该文件的创建者

  • grouper 文件所有者,即文件所在的用户组及里面的用户

  • other 其他用户,即非 owner 和非 grouper

文件权限

  • 使用英文字母 r 表示,可以查看目录 / 文件内的内容

  • 使用英文字母 w 表示,可以修改文件 / 目录内的内容

  • 执行 使用英文字母 x 表示,可以执行文件 / 使用 cd 命令进入目录

drwxrw-rw-

权限细节总共分为 10 个位置

  • 第1位,- 表示文件;d 表示文件夹;l 表示软链接

  • 第 2-4 位 这三位为文件所属用户权限

  • 第 5-7 位 这三位位文件所属用户组中的用户权限

  • 第 8-10 位 其他用户权限

假设一个权限是 drwxrw-r– 则表示:

  • d 这是文件夹
  • rwx 所属用户权限,在该例子中该文件所有者可以对该文件进行读、写、执行
  • rw- 所属用户组权限,在该例子中该文件所有者所在的用户组中的用户可以对该文件进行读、写操作
  • r– 表示其他用户的权限,在该例子中其他用户对该文件仅可读

数字所对应的权限

  • 0 无任何权限,即

  • 1 仅有 x 权限,即 –x

  • 2 仅有 w 权限,即 -w-

  • 3 w 和 x 权限,即 -wx

  • 4 仅有 r 权限,即 r–

  • 5 r 和 x 权限,即 r-x

  • 6 r 和 w 权限,即 rw-

  • 7 全部权限,即 rwx

例如, 751 即为 rwx (7) r-x (5) --x (1)

修改文件访问权限

1
chmod [-R] [who] [op] [permission] [file/dir]
  • -R 指对文件夹内的全部内容应用相同操作

  • who 表示用户类型 (见下表)

  • op 表示动作(+ 表示加上 permission 指定权力,- 表示取消 permission 指定的权力

  • permission 存取权限(r: 可读,w: 可写,x: 执行)

用户类型表

  • u: 文件拥有者

  • g: 该文件拥有者的同组用户

  • o: 其他人

  • a: 所有人

1
2
3
4
5
6
7
chmod u+w file1 //该命令添加了拥有者对file1文件的写权限

chmod u-x file1 //该命令去掉了拥有者对file1文件的执行权限

chmod ug+rwx file //该命令添加了拥有者和同组用户对file1文件的读、写、执行权限

chmod a+rwx file //该命令添加了所有人对file1文件的读、写、执行权限

当然除了这种方式,我们也可以使用数字进行修改权限的修改

1
chmod [who] [op] [Num] [file/dir]

比如,给当前目录下的文件添加对自己的 777 权限:

1
chomod 777 file1

文件归属权

1
chown [-R] [User][:][UserGroups] [file1] [file2] []

改变文件所有者及文件所在组的用户

  • -R 对文件夹内全部内容应用相同的规则

  • User 修改所属用户

  • :UserGroups 修改所属用户组,其中带:的是用户组,不带:的是用户

1
2
3
4
5
chown candy file1 //把文件file1的所有者变更为用户candy

chown candy:sudo file1 //把文件file1的所有者变更为用户candy,所属组变为sudo

chown -R candy dir1 //把目录dir及其子目录以及文件的所有者都变更为candy

也可以使用 chgrp 命令改变文件所有者组:

1
chgrp [opt] [groups] [file]
  • opt 选项

  • groups 组名称

  • file 文件名称


sudo

sudo 是以 root 账号的权限执行命令一次

哪些账户可以使用 sudo 权限来运行是在 /etc/sudoers 里进行配置的

1
sudo -u [user] [command]
  • user 以该用户的权限来执行命令

  • command 要执行的命令

1
sudo [command]

以 ROOT 权限来执行这条命令

可以直接将某个用户加入 sudo 用户组(使用 usermod 命令添加),就可以在任何地方,以任何账号权限,运行任何程序


进程

ps 命令 - 进程命令

1
ps

查看进程信息

1
ps -f

查看详细的进程信息

1
ps -u [user]
  • user 用户名

显示该用户所创建的进程信息

1
ps -e

显示当前所有正在运行的进程信息

1
ps -ef

显示当前所有正在运行的所有系统进程信息

1
ps -ef | grep [keyword]
  • keyword 要被查找进程的关键字

查找该进程

1
ps -ef | grep [keyword] | grep -v [unkeyword]
  • keyword 要被查找进程的关键字

  • unkeyword 不包含的(排除)关键字

查找一个进程,但是这个进程不显示包含排除关键字的进程

nohup - 静默运行

一般来说,有些程序如果关闭终端的话进程有可能会被结束掉,因此可以在命令上加上 nohup

在程序前台运行的情况下,使用快捷键 ctrl+C 终止进程

kill 命令 - 杀死进程

1
kill -9 [PID / name]
  • PID / Name 该程序的 PID 或程序名

  • -9 表示强行杀死


重定向

在 shell 中输入命令时,可以使用 > 符号将输入命令后的执行结果信息输出到指定文件中

1
ps > [out]

上面的命令会将原本要输出在 stdout(可以理解为终端的输出)输出到文件中

如果要将 stdoutstderr(屏幕显示的报错信息)同时输入到一个文件 err.txt 中可以使用 &> 符号

1
command &> err.txt

单独重定向 stderr 的符号是 2>

1
command > [out] 2> err.txt

stdin 重定向符号是 < ,可以将原本要显示到终端上的内容输出到文件中

echo 命令

在命令行内输出指定的内容

1
echo [string]
  • string 要输出的指定内容

带有空格或 \ 等特殊符号的内容,建议使用双引号包含。如果不适用双引号的情况下,空格后面很容易被识别为另一个参数,虽然说影响不是很大就是了(

1
echo `[commad]`
  • commad 被 `` 包含的内容会作为命令去执行,然后结果会被 echo 打印在屏幕上

> 和 »

  • > 将左侧命令的结果覆盖写入到右侧指定的文件中

  • » 将左侧命令的结果追加写入到右侧指定的文件中

tail 指令

tail 指令可以查看文件尾部的内容,追踪文件的最新更新。也就是从后向前看

1
tail [-f] [-num] [filedir]
  • -f 表示持续跟踪

  • -num 表示从后向前看多少行,默认 10 行

  • filedir 要查看的文件路径

例如,查看 text.txt 文件后 5 行的内容

1
tail -5 text.txt

管道符 |

在 Linux 操作系统中,有时候需要将一个命令输出的内容作为另一个命令的输入内容,可以使用 | 操作符来实现,并且管道符可以嵌套

1
icommand | [othercommand1] | [othercommand2]
  • icommand 要输出的命令
  • othercommand 其他命令

打包与压缩

tar 命令 - 针对 tar 压缩包

1
tar [-c -v -x -f -z -C] [para0] [para1] []
  • -c 创建压缩文件,用于要压缩一个文件的时候

  • -v 显示压缩和解压缩的进度

  • -x 解压缩而不是压缩

  • -f 要创建的文件,或者说要解压文件,-f 选项必须在所有选项中处于最后一个

  • -z gzip 模式,不使用 -z 就是普通的 tarball 格式,一般处于第一位

  • -C 自定义解压路径

比如解压一个 test.tar,并将其解压缩到 /home/candy/

1
tar -xvf test.tar -C /home/candy/

如果要压缩 /data 路径出来一个名为 data.tar 压缩包……

1
tar -cvf data.tar ./data/*

也可以仅查看一个压缩包

1
tar -tvf data.tar

也可以将新文件添加进压缩包中

1
tar -rvf data.tar my_pic.jpg

gzip 命令 - 针对 gz 压缩包

gz 压缩包可以将压缩包体压缩至很小

1
gzip -d [file.gz]

解压缩一个名为 file.gz 的压缩包

同时 gziptar 可以联合使用

1
tar -zcvf [pag.tar.gz] [file] [dir]
  • pag.tar.gz 压缩包名

  • file 文件

  • dir 目录

可以直接将文件压缩成.tar.gz 格式

1
tar -zxvf [pag.tar.gz]

解压缩一个类型为 .tar.gz 的压缩包

zip 命令 - 针对 zip 压缩包

1
zip [-r] [file.zip] [dir]
  • -r 压缩目录

  • file.zip 压缩包名

  • dir 路径

压缩一个 zip 格式的压缩包

1
unzip [file.zip]

解压缩一个 zip 格式的压缩包


系统相关命令

top 命令 - 查看系统进程信息

1
top [-p -d -c -n -b -i -u] [PID]
  • -p 只显示某个进程的信息

  • -d 设置刷新时间,默认是 5s

  • -c 显示产生进程的完整命令,默认是进程名

  • -n 指定刷新次数,比如 top-n3,刷新输出 3 次后退出

  • -b 以非交互非全屏运行,以批次的方式执行 top,一般配合 -n 指定输出几次统计信息,将输出重定向到指定文件

  • -i 不显示任何闲置 (idle) 或无用 (zombie) 进程

  • -u 查找特定用户启动的进程

top 的页面上,按 1 切换核心的占用情况,按下大写 P 可以按照 CPU 占用率高低来排序,大写 M 按照内存占用高低来排序。按下 q 即可退出

top 命令内容较多,这里仅介绍部分内容

网络相关命令

1
ip addr

查看网络接口、IP 地址

1
ping [ip]

连通性测试

1
hostname

查看主机名

1
hostnamectl set-hostname [name]

修改主机名为 name

1
netstat

查看当前所有占用网络端口的程序

1
netstat -anp | grep [port]
  • port 端口号

查看指定端口的占用情况

1
netstat [-a -t -u -n -l -p -r]
  • -a 显示所有选项,默认不显示 LISTEN 相关

  • -t 仅显示 TCP 相关选项

  • -u 仅显示 UDP 相关选项

  • -n 不显示端口协议名,显示端口数字

  • -l 只显示 Listen (监听) 的状态端口

  • -p 显示建立相关链接的进程 PID

  • -r 显示路由信息、路由表

netstat 命令内容较多,这里仅介绍部分内容

1
nmap [ip]

显示端口占用情况

1
sar [-n] DEV [num1] [num2]
  • -n 查看网络

  • DEV 查看接口,默认为 DEV 即可

  • num1 数字,表示刷新间隔

  • num2 数字,表示刷新次数

网络状态监控

wget /curl 命令 - 网页 / 下载命令

1
wget [-b] [URL]
  • -b 后台下载,并且将日志写入当前工作目录的 wget-log 文件中

  • URL 文件地址

即可将一个文件下载到当前工作目录

1
curl [-o] [URL]
  • -o 用于下载文件,当 URL 为文件链接时,可以使用 -o 来保存文件

  • URL 要发起请求的网络地址

  • curl 类似于浏览器,可以查看网页,也可以下载文件

systemctl 系统服务命令

用于启动,关闭,重启服务

1
systemctl status [service]
  • service 服务名

查看该服务状态

1
systemctl start [service]

启动该服务

1
systemctl stop [service]

停止该服务

1
systemctl restart [service]

重启该服务

1
systemctl enable [service]

开启服务开机自启动

1
systemctl disable [service]

关闭服务开机自启动

apt / yum 服务

1
apt install [package]
  • package 要安装软件的包名

安装一个软件包

1
apt list --installed

显示所有已经安装的程序包

1
apt list [package]

显示 package 程序包的安装情况

1
apt remove [package]

移除 package 程序包

1
apt [-y] [install | remove | search] [package]
  • -y 自动确认,无需手动确认安装和卸载过程

  • install 安装

  • remove 卸载

  • search 搜索

  • package 包名

时间和时区

1
data [-d] ["+String"]
  • -d 按照指定的字符串显示日期,一般用于日期计算

  • String 通过特定的字符串标记,来控制显示的日期形式

磁盘命令

1
df [-h]
  • -h 以更人性化的单位显示

查看硬盘的使用情况

1
iostat [-x] [num1] [num2]
  • -x 显示更多信息

  • num1 数字,表示刷新间隔

  • num2 数字,表示刷新次数


Screen 命令 - 屏幕

创建屏幕

1
screen -S [screen_name]
  • screen_name 要创建的屏幕名称

退出屏幕但不删除当前屏幕

ctrl+A ctrl+D

1
screen -d
  • -r 恢复屏幕

  • -R 尝试恢复屏幕,若恢复失败则创建一个新的屏幕

  • -dr 顶掉之前的用户并恢复屏幕

显示所有屏幕

1
sreen -ls

检查屏幕,并删除不能使用的屏幕

1
screen -wipe

删除屏幕

1
screen [-XS] [-X] [screen_name] quit
  • -XS 在屏幕外删除,需要写屏幕名
  • -X 删除当前屏幕,不需要写屏幕名

环境变量

类似于 windows 中的环境变量,Linux 也是使用 PATH 来定义值

1
export [variable] = [count]
  • variable 变量名

  • count 变量值

这样可以临时设置一个环境变量

如果想要永久生效:

针对当前用户的环境变量: ~/.bashrc 文件中进行修改

针对所有用户,即系统环境变量: /etc/profile 中的 source 配置文件

这些修改都是立即生效的

不向焦虑与抑郁投降 这个世界终会有我们存在的地方
使用 Hugo 构建
主题 StackJimmy 设计
本博客已稳定运行
发表了9篇文章 · 总计52.05k字