AkiraZheng's Time.

操作系统相关的Linux操作

Word count: 2.5kReading time: 9 min
2024/05/18

一、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中的软件安装:

  • CentOSyum指令
    • sudo yum install 软件名
  • Ubuntuapt-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:公钥

其中公钥会被传到服务器配置中,也就是我们在实际操作时将公钥添加到githubSSH and GPG keys

五、Linux下的进阶问题

5.1 如何在Linux中找到CPU占用高的进程

前面讲到Linux中的topps指令都可以查看进程列表中的CPU占用率,但是更倾向于用动态实时更新的top指令

而用ps的话,虽然只能看静态信息,但是可以很方便地过滤掉一些不需要的列信息,比如只看PID、CPU占用率、运行时间和进程名称:

1
ps -eo pid,pcpu,time,comm | sort -k 2 -nr | head -n 10

这个指令的意思是:

  • -e:显示所有进程
  • -o:指定输出的列
  • 只显示指定的列:pidpcputimecomm
  • 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的信息)等方面排查

参考:Linux下C/C++程序CPU问题分析及优化心得
参考:c++程序 cpu占用过高排查方法

CATALOG
  1. 一、Linux基础知识
    1. 1.1 Linux下的目录结构
    2. 1.2 Linux下的用户权限
      1. sudo:切换用户
      2. su:切换用户
  2. 三、Linux下的指令集合
    1. 3.1 软件安装、压缩和解压
      1. Linux中的软件安装:
      2. tar:压缩和解压
    2. 3.2 文件和目录增删改查
      1. pwd:查看当前目录
      2. ls:列出当前目录下的文件
      3. cd:切换目录
      4. mkdir:创建目录
      5. rmdir:删除目录
      6. touch:创建文件
      7. rm:删除文件或目录
      8. cp:复制文件或目录
      9. mv:移动文件或目录
      10. find:查找文件(完全符合)
      11. locate:查找文件(模糊匹配)
    3. 3.3 文本操作
      1. cat:查看小文件内容
      2. less:分页查看文件内容
      3. vim编辑器:编辑文件
  3. 四、Linux下的操作系统和网络操作
    1. 4.1 系统操作
      1. 查看进程:ps、top、kill
      2. 管理进程:systemctl
      3. reboot:重启系统
      4. shutdown:关机
      5. poweroff:关机
    2. 4.2 网络操作
      1. 查看网络状态:ifconfig
      2. 连接远程服务器:ssh
  4. 五、Linux下的进阶问题
    1. 5.1 如何在Linux中找到CPU占用高的进程
    2. 5.2 如何在Linux中排查占用率100%的问题