一、Linux基础知识
1.1 Linux下的目录结构
Linux中可以用命令df -h查看磁盘的使用情况以及挂载点

可以看到根节点/挂载在了虚拟机的磁盘/dev/sda3上,/boot挂载在了/dev/sda1上,然后通过命令df -T可以查看挂载点的文件系统类型

/的文件系统类型是ext4。这是一种常用的日志文件系统。
在根目录下,可以扩展出Linux的目录树状结构,如下:


1.2 Linux下的用户权限
在Linux中可以有很多用户,但是只有root用户是超级用户,拥有最高权限,其它用户在各自的环境下文件放进自己的家目录下,其它用户不能访问,这样大大提高了Linux使用的安全性

root用户进入后,在/home目录下存放了所有用户的家目录信息

sudo:切换用户
sudo指令是Linux下的一个非常重要的指令,可以让普通用户在执行某些需要超级用户权限的指令时,临时提升权限,而不用切换到root用户
系统管理员可以在/etc/sudoers文件中配置哪些用户可以使用sudo指令

root用户可以直接使用sudo username切换到其它用户,而不用输入密码
su:切换用户
su指令是切换用户的指令,可以切换到其它用户,但是需要输入密码
su -可以切换到root用户

三、Linux下的指令集合
Linux可以通过shell终端来执行操作指令
对于终端指令解析:
- root:用户名
- AkiraEdu01:主机名
- ~:当前目录- root用户的- ~目录是- /root
- 普通用户的~目录是/home
 
- $:代表当前是普通用户
- #:代表当前是- root用户

3.1 软件安装、压缩和解压
Linux中的软件安装:
- CentOS:yum指令- sudo yum install 软件名
 
- Ubuntu:apt-get指令- sudo apt-get install 软件名
 
通过HTTP或FTP地址直接从终端控制台下载文件,wget
非常稳定,如果是由于网络原因下载失败, wget
会不断尝试,直到整个文件下载完毕。:
- wget http://www.xxx.com/xxx.tar.gz:下载文件- -c:继续中断了的文件的下载
 
tar:压缩和解压
压缩和解压都是用tar指令
- tar -cvf test.tar test:将- test目录压缩为- test.tar- -c:创建压缩文件
- -v:显示详细信息
- -f:指定压缩文件名
 
- tar -czvf test.tar.gz test:将- test目录压缩为- test.tar.gz- -z:使用- gzip压缩
 
- tar -xvf test.tar:解压- test.tar文件- -x:解压文件
 
3.2 文件和目录增删改查
pwd:查看当前目录

ls:列出当前目录下的文件
常用参数:
- -a:列出所有文件,包括隐藏文件
- -l:列出详细信息(包括文件权限、文件所有者、文件大小、文件创建时间等)
- -h:人性化显示文件大小
- -t:按照文件修改时间排序
cd:切换目录
常用指令:
- cd:切换到当前用户的家目录
- cd ~:切换到当前用户的家目录
- cd /:切换到根目录
- cd ..:切换到上一级目录
- cd ./test:切换到当前目录下的- test目录
cd指令可以使用补全功能,按Tab键可以自动补全路径:

mkdir:创建目录
mkdir test:在当前目录下创建test目录
rmdir:删除目录
rmdir test:删除当前目录下的test目录
touch:创建文件
touch test.txt:在当前目录下创建test.txt文件
rm:删除文件或目录
该指令是一个非常危险的指令,删除后无法恢复
rm test.txt:删除当前目录下的test.txt文件
rm -rf test:删除test目录(-r表示递归删除,-f表示强制删除)

cp:复制文件或目录
cp test.txt test2.txt:复制test.txt文件为test2.txt
cp -r test test2:复制test目录为test2目录

mv:移动文件或目录
mv test.txt ./test:将test.txt文件移动到./test目录下
mv test test2:将test目录重命名为test2
mv ./test ./test2:将./test目录移动到./test2目录下

find:查找文件(完全符合)
| 1 | find <何处> <何物> <做什么> | 
- <何处>:查找的目录
- <何物>:查找的什么?(文件名- -name test.txt、文件类型- -type、文件大小- -size)
- <做什么>:查找到后做什么?默认不写的话只会显示找到的文件(打印- -print、删除- -delete)
find / -name test.txt:在根目录下查找test.txt文件(这里就没有指定做什么)
find / -name test.txt -delete:在根目录下查找test.txt文件并删除
find ./ -name *.txt:在当前目录下查找所有的.txt文件
locate:查找文件(模糊匹配)
按照文件数据库去匹配查找而不是全盘查找,因此数据库还未更新的话是找不到的
所以一般先执行updatedb命令更新数据库
locate test.txt:查找文件名中包含test.txt的文件
locate *.txt:查找所有的.txt文件

3.3 文本操作
cat:查看小文件内容
cat指令会一次性显示文件的全部内容,所以对于大文件不适用
cat test.txt:查看test.txt文件的内容

less:分页查看文件内容
less test.txt:查看test.txt文件的内容,按空格键翻页,按q键退出
- 回车键:向下翻一行
- y:向上翻一行
- 空格键:向下翻页
- b:向上翻页
- q:退出
- =:显示当前行号
- /:搜索(输入关键字后按- Enter键)- /^the:搜索以 "the" 开头的行
- /pattern1|pattern2:搜索包含 pattern1 或 pattern2 的行
 
vim编辑器:编辑文件
四、Linux下的操作系统和网络操作
4.1 系统操作
查看进程:ps、top、kill
- ps:静态查看当前系统运行的进程(快照,不会实时更新) - ps -ef:查看所有进程
- ps -aux | less:按CPU和内存使用率排序
 
- top:动态查看当前系统运行的进程(每5s实时更新) - 展示的这些进程是按照使用处理器 CPU 的使用率来排序的 - q:退出- 结果解析: - PID:进程ID
- USER:进程所有者
- PR:进程优先级
- VIRT:使用的虚拟内存
- RES:使用的物理内存
- SHR:使用的共享内存
- S:进程状态(S=睡眠,R=运行,Z=僵尸进程)
- %CPU:CPU使用率
- %MEM:RAM使用率
- TIME+:进程运行时间
- COMMAND:进程名称
 
- kill:杀死进程- kill 进程号PID:杀死进程
- kill -9 进程号PID:强制杀死进程
 
管理进程:systemctl
reboot:重启系统
需要root权限
shutdown:关机
需要root权限
- shutdown -h now:立即关机
- shutdown -h 10:10分钟后关机


poweroff:关机
不需要root权限
4.2 网络操作
查看网络状态:ifconfig
Windows下的ipconfig在Linux下是ifconfig,可以查看网络接口的信息,包括IP地址、MAC地址等

其中lo是本地回环接口,IP地址是127。0.0.1,每台电脑都应该有这个接口,它对应着localhost,用于本地测试,在某些需求下,我们要连接自己的服务器进行测试,而又不想让局域网或者外网的用户访问,就可以使用这个接口(比如对某个本地运行的项目,我们可以通过localhost或者127.0.0.1:port来访问自己的网站,且只能自己看到)
连接远程服务器:ssh
我们其实在使用github或者gitee的时候,经常通过配置ssh来连接远程服务器,这样就不用每次都输入密码了,那么它的原理是什么呢?
我们发现Github项目都会提供两个网址,一个是https的,一个是ssh的,所以可以联想到,ssh是一种类似于HTTPS的安全网络协议,它可以在不安全的网络中为网络服务提供安全的传输环境
我们之前在配置hexo的时候,通过ssh连接到github,这样每次部署到github的时候就不用输入密码了,在实现时,我们在本机客户端会生成两个密钥文件:
- id_rsa:私钥
- id_rsa.pub:公钥
其中公钥会被传到服务器配置中,也就是我们在实际操作时将公钥添加到github的SSH and GPG keys中
五、Linux下的进阶问题
5.1 如何在Linux中找到CPU占用高的进程
前面讲到Linux中的top和ps指令都可以查看进程列表中的CPU占用率,但是更倾向于用动态实时更新的top指令
而用ps的话,虽然只能看静态信息,但是可以很方便地过滤掉一些不需要的列信息,比如只看PID、CPU占用率、运行时间和进程名称:
| 1 | ps -eo pid,pcpu,time,comm | sort -k 2 -nr | head -n 10 | 
这个指令的意思是:
- -e:显示所有进程
- -o:指定输出的列
- 只显示指定的列:pid、pcpu、time、comm
- sort -k 2 -nr:按照第二列- pcpu排序,- -n表示按照数字排序,- -r表示降序
- head -n 10:只显示前10行(top10)

5.2 如何在Linux中排查占用率100%的问题
1)top指令查看当前CPU占用率最高的进程PID
| 1 | top | 
2)top查看该进程下各线程的CPU占用率
| 1 | top -H -p 进程号PID | 
3)执行pstack脚本查看当前线程的堆栈信息
| 1 | pstack 进程号PID | 
4)分析原因
一般从死锁、自旋(锁)时间过长、死循环、内存泄漏、I/O日志操作过于频繁(少打印DEBUG的信息)等方面排查