当前位置: 首页 > article >正文

工作中用到的 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 启动的命令不会阻塞终端(即使你在命令行键入后,仍然可以继续输入别的命令),通常会将命令置于背景运行,即在命令后面添加 &。这使得启动的任务不会占用你的终端。

nohup mylongrunningtask.sh > mytask.log 2>&1 &

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


查看输出

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

tail -f nohup.out

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

tail -f 查看日志

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

tail -f XXX.log

如果有其他需求 可以评论

网络篇

测试网络是否连通

ping 命令

ping  192.168.124.23   测试是否连通 192.168.124.23,会一直ping

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


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

比如


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 连不上的报错:是用户名密码不对,还是长时间没反应。

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

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

telnet 192.145.12.13 22

进程篇

排查 有哪些进程

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


top 命令


检查服务是否已经启动

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

查看服务器的信息

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


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)显示信息。

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

示例输出:

$ 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)显示信息。

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

示例输出:

$ du -h
4.0K    ./myfolder/subfolder
12K     ./myfolder
24K     ./otherfolder
48K     .

列的含义:

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

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

设备管理

这块用到的比较少

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


http://www.kler.cn/news/368731.html

相关文章:

  • 多线程进阶——线程池的实现
  • 【Redis】内存淘汰策略
  • STM32第15章 RCC-使用HSE/HSI配置时钟
  • RHCE笔记-NFS服务
  • 基于去哪儿旅游出行服务平台旅游推荐网站【源码+安装+讲解+售后+文档】
  • vue3+vite 部署npm 包
  • Word 删除空白页:亲测有效的方法
  • 【JavaEE】【多线程】线程池
  • 理解BERT的词向量及其初始化参数的一致性
  • Redis 集群 总结
  • 单片机中的BootLoader(使用汇编指令进行跳转)
  • Linux系列-yum软件安装包
  • 一次调整prompt的过程
  • docker常用命令整理
  • RabbitMQ几个核心概念
  • 通过页面添加国际化数据,实现vue的国际化
  • J2学习打卡
  • 分账系统适用于那些商家?
  • Spring Boot植物健康系统:绿色科技的创新
  • TensorFlow面试整理-TensorFlow 和 PyTorch 的区别是什么?
  • 论文阅读(二十五):PVTv2: Improved Baselines with Pyramid Vision Transformer
  • SASS转换成CSS步骤
  • 宝塔如何部署Django项目(前后端分离篇)
  • Three.js 使用着色器 实现跳动的心
  • WebView渲染异常导致闪退解决方案
  • 若依学习 后端传过来的数据在控制台打印为空