linux回忆录

从java切换到go之后,就很少登到服务器上排查问题了,加之CICD顺利上线和应用工程师的配备,在服务器上敲命令和写shell脚本的机会就更少了。
但是,这门传统手艺咱不能落下,遂写下该回忆录,想到哪写到哪吧.见谅!

1,基础

1.1 万能man命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 功能:格式化并显示在线帮助手册页面.(也就是查看命令的帮助信息)
man ls
# 输出:
LS(1) General Commands Manual LS(1)

NAME
ls, dir, vdir - 列目录内容

提要
ls [选项] [文件名...]

POSIX 标准选项: [-CFRacdilqrtu1]

GNU 选项 (短格式):
[-1abcdfgiklmnopqrstuxABCDFGLNQRSUX] [-w cols] [-T cols] [-I pattern]
[--full-time] [--format={long,verbose,commas,across,vertical,single-column}]
[--sort={none,time,size,extension}] [--time={atime,access,use,ctime,status}]
[--color[={none,auto,always}]] [--help] [--version] [--]

描述( DESCRIPTION )
程序ls先列出非目录的文件项,然后是每一个目录中的“可显示”文件。如果
没有选项之外的参数【译注:即文件名部分为空】出现,缺省为 "." (当前目录)。
选项“ -d ”使得目录与非目录项同样对待。除非“ -a ” 选项出现,文
件名以“.”开始的文件不属“可显示”文件。

以当前目录为准,每一组文件(包括非目录文件项,以及每一内含文件的目录)分
别按文件名比较顺序排序。如果“ -l ”选项存在,每组文件前显示一摘要行:
给出该组文件长度之和(以 512 字节为单位)。

输出是到标准输出( stdout )。除非以“ -C ”选项要求按多列输出,输出
将是一行一个。然而,输出到终端时,单列输出或多列输出是不确定的。可以分别
用选项“ -1 ” 或“ -C ”来强制按单列或多列输出。

1.2 ls命令

ls -l输出字段详解

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1,查看目录内容
ls [dir_name]
# 2,长格式显示目录内容
ls -l [dir_name]
# 输出
drwxr-xr-x 2 root root 6 7月 1 19:31 linux_demo
-rwxr-xr-x 1 root root 2008912 1月 26 17:16 main

ls -lh [dir_name] # 转为M或者G显示大小
# 3,显示当前目录下的所有文件及文件夹包括隐藏的.和..
ls -a [dir_name]
# 4,递归显示,连同子目录一同显示出来,也就所说该目录下所有文件都会显示出来
ls -R [dir_name]

1.3 cd命令

1
2
# 返回到刚才的目录
cd -

1.4 midir命令

1
2
# 递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
mkdir -p a/b/c

1.5 cp命令

1
2
3
4
# 1,复制目录/文件到指定位置
cp source_file/source_dir target_dir
# 2,复制目录/文件到指定位置,保留原有文件/文件夹的时间、属主和权限
cp -p source_file/source_dir target_dir

1.6 mv命令

1
2
# 移动/重命名 文件/文件夹
mv source_file/source_dir target_file/source_dir

1.7 通配符

1
2
3
4
# ?匹配一个
mv file? /root/tmp #当前目录下的filea将会被移动到/root/tmp目录下,fileaa将不会被移动
# *匹配所有
mv file* /root/tmp #当前目录下的filea和fileaa将会被移动到/root/tmp目录下

1.8 cat命令

1
2
# 文本内容显示到终端
cat file_name

1.9 head命令

1
2
# 查看文件开头(n行)
head [-n] file_name

1.10 tail命令

1
2
3
4
# 1,查看文件结尾(n行)
tail [-n] file_name
# 2,查看文件结尾,同步跟新显示
tail -f file_name

1.11 wc命令

1
2
# 1,查看文件内容行数
wc -l file_name

1.12 tail命令

1
2
3
4
# 1,查看文件结尾
tail file_name
# 2,查看文件结尾,同步跟新显示
tail -f file_name

1.13 打包压缩和解压缩命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1,打包/备份文件夹
tar cf dest_file_name.tar target_dir
tar cf /tmp/etc-backup.tar /etc/

# 2,解包文件
tar xf dest_file_name.tar -C target_dir
tar xf /tmp/etc-backup.tar -C /root

# 3,打包/备份,并压缩文件夹;gzip压缩方式,压缩速度更快
tar zcf dest_file_name.tar.gz target_dir
tar zcf /tmp/etc-backup.tar.gz /etc/

# 4,解压缩文件;gzip压缩方式
tar zxf dest_file_name.tar.gz -C target_dir
tar zxf /tmp/etc-backup.tar.gz -C /etc/

# 5,打包/备份,并压缩文件夹;bzip2压缩方式,压缩文件更小
tar jcf dest_file_name.tar.bz2 target_dir
tar jcf /tmp/etc-backup.tar.bz2 /etc/

# 6,解压缩文件;bzip2压缩方式
tar jxf dest_file_name.tar.bz2 -C target_dir
tar jxf /tmp/etc-backup.tar.bz2 -C /etc/

2,多模式文本编辑器vim

  • 正常模式
  • 插入模式
  • 命令模式
  • 可视模式

2.1 正常模式下的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 复制
单行复制:在正常模式下输入yy即可复制当前行,输入p即可粘贴刚才的复制
多行复制:在正常模式下输入要复制的行数n+yy即可复制n行,输入p即可粘贴刚才的复制
行内复制:在正常模式下输入y$即可复制从当前位置到行末的数据,输入p即可粘贴刚才的复制

# 剪切
单行剪切:在正常模式下输入dd即可剪切当前行,输入p即可粘贴刚才的剪切
多行复制:在正常模式下输入要剪切的行数n+dd即可剪切n行,输入p即可粘贴刚才的剪切
行内剪切:在正常模式下输入d$即可剪切从当前位置到行末的数据,输入p即可粘贴刚才的剪切

# 撤销
单次撤销:单输u
多次撤销:多次输入u
撤销撤销操作:ctrl + r

# 光标移动
显示行号: 冒号+set nu
移动到第n行: n + shift + g
移动到行首: ^
移动到行末尾: $

# 删除
删除: x
替换: r

2.2 命令模式下的操作

命令 说明
:w 保存编辑后的文件内容,但不退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中。
:w! 强制写文件,即强制覆盖原有文件。如果原有文件的访问权限不允许写入文件,例如,原有的文件为只读文件,则可使用这个命令强制写入。但是,这种命令用法仅当用户是文件的属主时才适用,而超级用户则不受此限制。
:wq 保存文件内容后退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中,然后退出vim编辑器。另外一种替代的方法是用ZZ命令。
:wq! 强制保存文件内容后退出vim编辑器。这个命令的作用是把内存缓冲区中的数据强制写到启动vim时指定的文件中,然后退出vim编辑器。
:q 在未做任何编辑处理而准备退出vim时,可以使用此命令。如果已做过编辑处理,则vim不允许用户使用“:q”命令退出,同时还会输出下列警告信息:No write since last change (:quit! overrides)
:q! 强制退出vim编辑器,放弃编辑处理的结果。如果确实不需要保存修改后的文件内容,可输入“:q!”命令,强行退出vim编辑器。
:s/old/new 将当前行的字符old替换为new
:%s/old/new/g 全局的字符old替换为new
:n,m%s/old/new/g 第n行到第m的字符old替换为new
vim /etc/vimrc 修改vim配置

2.3 可视模式下的操作

1
进入可视模式: v

3,用户与权限管理

3.1 用户管理

命令 说明
useradd user_name 新建用户
id user_name 查看用户
userdel user_name 删除用户
passwd user_name 设置/修改用户密码
usermod user_name 修改用户属性,用户组等
chage user_name 修改用户属性,密码过期时间等
groupadd group_name 添加用户组
groupdel group_name 删除用户组
su - user_name 切换用户
exit 退回刚才的用户

3.2 用户切换

命令 说明
su - user_name 切换用户
sudo command 以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行

3.3 用户和用户组的配置文件

1
2
3
4
三个配置文件:
/etc/passwd
/etc/shadow
/etc/group

3.3 文件(夹)权限

3.3 文件(夹)权限修改

字母方式修改权限

数字方式修改权限

4,网络管理

4.1,网络状态查看

4.2,网络配置(可以跳过)

4.3,网络故障排查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 到目标主机(ip/域名)是否畅通
ping ip/domain

# 检测发出数据包的主机到目标主机之间所经过的网关数量
traceroute -w 1

# mtr 是一个集合 ping 和 traceroute 功能并能直观显示结果的网络诊断工具
mtr

# 把域名解析成ip
nslookup www.baidu.com

# 端口通畅情况
telnet ip/domian + export

# 抓包(后文详讲)
tcpdump

# 查看服务监听地址
netstat -ntpl
ss -ntpl

4.3,网络服务管理(跳过)

5,软件包管理器

5.1,rpm包

5.2,yum包

5.2,通过源代码编译安装软件(跳过)

6,进程管理