工作中用到的 Linux 总结(持续更新中...)

工作中用到的 Linux 总结

工作后服务都是部署在 linux 系统下的,在运维的过程中不可避免的会和 linux 打交道。

知道 linux 的一些知识,不仅可以对计算机操作系统,网络,进程等有更深入的了解,同时也可以让你写出更高效的代码(windows 下运行的情况和 linux 下有时候差好多)。

  1. 性能差异:由于 Windows 和 Linux 系统在底层架构和资源管理上的不同,相同的程序可能在两个系统中的运行速度和响应时间有所不同。例如,Linux 对 I/O 操作和网络处理的优化可能使某些类型的服务在其上运行得更快。
  2. 资源利用效率:Linux 系统通常被认为在资源利用方面更为高效,内存和CPU使用率较低。因此,一些程序在 Linux 上运行时,可能会占用更少的系统资源,从而表现得更稳定或能够处理更高的负载。
  3. 系统调用和API差异:Windows 和 Linux 提供了不同的系统调用和API(应用程序编程接口)。开发人员可能需要针对不同的系统进行优化,甚至重写某些代码段,以充分利用特定系统的功能和优势。
  4. 稳定性和可靠性:Linux 系统被广泛应用于服务器环境,因其稳定性和可靠性较高。因此,长期运行的重要服务在 Linux 上可能表现得更为稳定,宕机和重启的频率较低。
  5. 功能特性差异:某些功能在一个操作系统中可能有着天然的优势。例如,Linux 原生支持多种文件系统、内核级的网络功能,而 Windows 则有其特有的安全和图形界面相关特性。这些差异可能会影响到程序的设计和最终表现。

1. I/O 操作

例子:文件服务器的性能

假设你有一台文件服务器,主要任务是处理大量的文件读写操作。Windows 和 Linux 都有相应的文件系统,但它们在管理 I/O 请求和缓存策略上的机制略有不同。

  • Windows: Windows 使用的 NTFS 文件系统在设计上考虑了很多兼容性和功能性,如权限管理和日志记录,这可能带来一些性能上的开销。
  • Linux: Linux 下的 ext4、XFS、Btrfs 等文件系统更注重高效的 I/O 操作和更快的文件存取速度。一个显著的例子是在高并发读写操作时,Linux 的文件系统能够更好地利用缓存和异步 I/O 技术,使得处理速度更快。

2. 网络处理

例子:Web 服务器性能

假设你需要搭建一个高并发的 Web 服务器,同样的服务器软件(如 Nginx)在 Windows 和 Linux 上的表现可能有显著差异。

  • Windows: 尽管 Windows 支持大多数主流的服务器软件,但其网络协议栈以及 TCP/IP 处理机制在高并发请求下的表现可能不如 Linux 效率高。在高负载条件下,Windows 网络服务可能会遇到瓶颈。
  • Linux: Linux 的网络协议栈经过长期的优化,支持多种高效的网络工具和技术,如 epoll、kqueue(在BSD系统中)、异步 I/O 等,使得网络处理非常高效。在处理大规模并发请求时,Nginx 或 Apache 服务器在 Linux 上的性能往往优于在 Windows 上。

实际案例:

  1. Nginx 服务器性能测试: 在面对高并发的HTTP请求时,Nginx在Linux系统上的表现通常优于Windows。这是因为Linux支持大量并发连接,并且使用Epoll机制能更加高效地处理大量请求。
  2. 数据处理和日志分析: 在数据量巨大的场景中,例如使用Hadoop进行数据处理和分析,Linux的I/O性能优化能够更快速地处理数据读写操作,从而提升整体性能。

如何学习 linux

实践为主,书籍为辅。

书籍推荐:

细说Linux基础知识 鸟哥 linux 私房菜

工具推荐:

  1. windows 系统可以使用 wsl ,而不是虚拟机; 或者云服务器,或者 Mac;
  2. shell 工具 推荐: Windterm 非常好用,相比 MobaXterm 和 Xshell 等而言

实践 demo:

1 安装一个 ssh 服务;

2 安装 docker 容器 并跑一个 demo;

3 将 windows 的 功能迁移到 linux 上实现;

比如 windows 下

查看文件占用大小

任务管理器 显示实时任务

CPU 占用

内存 占用

下载文件并一键安装

查看服务

防火墙

配置 ip

看电影 打游戏 这类需要显示图形画面的就算了

编程的话主要是 通过 IDE 连接 linux 进行编程,因为还是需要可视化的操作环境。

一些经验

灵活使用 nohup

nohup(no hang up)是一个 Unix/Linux 命令,用于在会话退出后继续运行特定的命令。换句话说,通过使用 nohup,可以确保在你注销或关闭终端后,启动的命令或程序仍然会继续运行。

这个很重要,因为本地连接服务器后,可能会在一段时间后退出,那么如果任务还没执行完毕,就需要重新执行。

所以需要使用

使用场景

  1. 长时间运行的任务:例如数据备份、批处理任务、长时间的计算等。
  2. 开启服务器或服务 :某些服务器进程需要长时间运行,可以通过 nohup 启动,比如启动一个 web 服务器。
  3. 远程操作 :通过 SSH 远程登录后,启动一个需要长时间运行的任务,然后退出 SSH 会话,这时 nohup 就显得非常有用。

配合 & 使用

为了确保 nohup 启动的命令不会阻塞终端(即使你在命令行键入后,仍然可以继续输入别的命令),通常会将命令置于背景运行,即在命令后面添加 &。这使得启动的任务不会占用你的终端。

shell 复制代码
nohup mylongrunningtask.sh > mytask.log 2>&1 &

不过一般直接 
nohup mylongrunningtask.sh  &  就行
然后  tail -f  nohup.out  查看执行的日志即可

查看输出

默认情况下,如果你没有指定输出文件,nohup 会将输出重定向到一个名为 nohup.out 的文件中,该文件通常位于运行命令的当前目录里。你可以使用 cat, less, tail 等命令查看 nohup.out 文件的内容。

shell 复制代码
tail -f nohup.out

使用 tail -f 可以实时查看输出文件的新增内容,类似于实时日志跟踪。

tail -f 查看日志

一般是生产环境 debug 的时候 查看日志:

plain 复制代码
tail -f XXX.log

如果有其他需求 可以评论

网络篇

测试网络是否连通

ping 命令

plain 复制代码
ping  192.168.124.23   测试是否连通 192.168.124.23,会一直ping

ping  www.baidu.com   测试是否连通外网, 需要DNS服务的支持

如果使用的是 windows 电脑 ,可以使用 -t 参数,因为 windows 下 ping 默认只会有 4 条 ping 的指令。

比如

plain 复制代码
PS C:\Users\14533> ping  www.baidu.com

正在 Ping www.a.shifen.com [110.242.68.3] 具有 32 字节的数据:
来自 110.242.68.3 的回复: 字节=32 时间=13ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=14ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=12ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=11ms TTL=51

110.242.68.3 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 11ms,最长 = 14ms,平均 = 12ms


PS C:\Users\14533> ping  www.baidu.com -t

正在 Ping www.a.shifen.com [110.242.68.3] 具有 32 字节的数据:
来自 110.242.68.3 的回复: 字节=32 时间=14ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=13ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=22ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=17ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=12ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=12ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=12ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=11ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=10ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=12ms TTL=51
来自 110.242.68.3 的回复: 字节=32 时间=11ms TTL=51
    

PS: 推荐使用 powershell 而不是 cmd,因为PowerShell 是一个更先进和功能更强大的工具( powershell 有命令记忆功能,比较方便)

应用场景:

连不上数据库 连不上服务器时,需要一层一层的进行调试和判断,

网络的调试不像 debug 代码,代码出错 IDE 会直接提示的,直接能够定位到出错的点。

但是网络调试则不同:

比如 使用 ssh 连不上服务器了,ssh 是应用层协议,那么出问题的地方可能是传输层,数据链路层,物理层等等。

首先看 ssh 连不上的报错:是用户名密码不对,还是长时间没反应。

用户名密码不对说明网络链接没问题,长时间没反应说明链接可能有问题。

plain 复制代码
PS C:\Users\14533> ssh   root@192.145.12.13
ssh: connect to host 192.145.12.13 port 22: Connection timed out

一般排查的思路是 自底向上,确保底层是没有问题的之后再逐层向上排查。

  1. ping 测试网络是否连通;
  2. telnet 测试端口是否开放;
  3. ps -ef | grep ssh 查看 ssh 服务是否启动;
  4. 进一步再去查看 ssh 的配置文件 vi /etc/ssh/sshd_config 是不是配置不允许使用用户名密码等;

telnet 命令

telnet ip port

plain 复制代码
telnet 192.145.12.13 22

进程篇

排查 有哪些进程

plain 复制代码
ps -ef | grep ssh     e: every  f: full   
- `-e`:显示所有的进程。
- `-f`:以完整格式显示进程信息。
如果某一行中 包含 ssh  这个字符串 就打印出来


top 命令

检查服务是否已经启动

plain 复制代码
systemctl start serviceA  启动serviceA
systemctl stop serviceA  停止 serviceA
systemctl enable serviceA  设置开机启动
systemctl disable serviceA 设置开机不启动
systemctl status serviceA  查看serviceA 运行的状态

查看服务器的信息

主要是 CPU 内存 磁盘等信息,通过几个命令对这台服务器有一个简单的了解。

plain 复制代码
cat /etc/os-release   查看 操作系统信息  包括
[root@LAPTOP-ZXH home]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"



lscpu   查看 CPU 信息  包括

[root@LAPTOP-ZXH home]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                18
On-line CPU(s) list:   0-17
Thread(s) per core:    2
Core(s) per socket:    9
Socket(s):             1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 170
Model name:            Intel(R) Core(TM) Ultra 5 125H
Stepping:              4
CPU MHz:               2995.198
BogoMIPS:              5990.39
Virtualization:        VT-x
Hypervisor vendor:     Microsoft
Virtualization type:   full
L1d cache:             48K
L1i cache:             64K
L2 cache:              2048K
L3 cache:              18432K


查看内存信息:
free -h


查看硬盘信息:
df -h     disk free
du -h     disk usage


常用的  
du -sh   查看当前文件夹的总大小
du -h -d 1   查看当前目录下 每个目录的大小

文件系统

df -h:显示文件系统的磁盘空间使用情况

  • df(disk free):用于查看文件系统的整体磁盘空间使用情况。
  • -h:human-readable 的缩写,以更易读的格式(如 KB、MB、GB)显示信息。

这个命令通常用于检查整个系统中各个挂载点的磁盘使用情况。它会显示每个挂载点的总空间、已用空间、可用空间以及使用百分比。

示例输出:

shell 复制代码
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        20G   15G  5G   75% /
tmpfs           2.0G  1.2M  2.0G  1%  /dev/shm
/dev/sdb1       100G   70G  30G  70% /mnt/data

列的含义:

  • Filesystem:文件系统或设备名称。
  • Size:文件系统的总大小。
  • Used:已用空间。
  • Avail:可用空间。
  • Use%:已用空间的百分比。
  • Mounted on:挂载点目录。

df -h 提供的是文件系统整体层面的磁盘空间信息。

du -h:估算文件和目录的磁盘使用情况

  • du(disk usage):用于查看特定目录或文件的磁盘使用情况。
  • -h:human-readable 的缩写,以更易读的格式(如 KB、MB、GB)显示信息。

这个命令通常用于检查特定目录或文件占用了多少磁盘空间。尤其有用在发现哪个目录或文件占用了大量磁盘空间的时候。

示例输出:

shell 复制代码
$ du -h
4.0K    ./myfolder/subfolder
12K     ./myfolder
24K     ./otherfolder
48K     .

列的含义:

  • 大小:每个文件或目录的磁盘使用情况。
  • 路径:文件或目录的路径。

du -h 提供的是文件和目录层面的详细磁盘空间信息,可以显示指定目录及其子目录的空间使用情况。

设备管理

这块用到的比较少

主要是鼠标,键盘,屏幕,网卡,磁盘等。

相关推荐
加载中loading...10 分钟前
Linux线程安全(二)条件变量实现线程同步
linux·运维·服务器·c语言·1024程序员节
安科瑞刘鸿鹏12 分钟前
校园建筑用电安全监测装置 电气火灾监测预防设备功能介绍
运维·服务器·网络·嵌入式硬件·安全·能源
课堂随想16 分钟前
【libGL error】Autodl云服务器配置ACT的conda虚拟环境生成训练数据时,遇到了libGL相关错误,涉及swrast_dri.so
运维·服务器·conda
well_fly3 小时前
Ubuntu特殊目录
linux·ubuntu
大熊程序猿3 小时前
ubuntu 安装k3s
linux·运维·ubuntu
luoqice3 小时前
CentOS 自启动某个应用
linux·运维·服务器
泠山3 小时前
ubuntu增加swap交换空间
linux·运维·ubuntu
JavaOpsPro4 小时前
jenkins部署手册
运维·jenkins·离线部署
hero_th4 小时前
[Ubuntu] 文件/目录权限更改
linux·ubuntu