文章目录
一、HUGEPAGES often-used COMMANDS
Hugepages 是用于提高大内存应用程序性能的技术,特别适用于像 DPDK(Data Plane Development Kit)这样的高性能网络应用,它通过提供大页面内存减少了传统内存分页带来的开销。
1. 查看 HugePages 配置和状态
查看当前 HugePages 的使用情况:
-
cat /proc/meminfo
该命令会显示系统内存的详细信息,包括 hugepages 的使用情况:
cat /proc/meminfo | grep HugePages
示例输出:
HugePages_Total: 1024 HugePages_Free: 512 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
解释:
- HugePages_Total:系统上配置的总 hugepages 数量。
- HugePages_Free:当前空闲的 hugepages 数量。
- HugePages_Rsvd:已预留但未分配的 hugepages 数量。
- HugePages_Surp:超出预期配置的 hugepages 数量(通常由内核动态分配)。
- Hugepagesize:每个 hugepage 的大小,通常为 2MB(对于 x86_64 架构)。
ls /sys/kernel/mm/hugepages/
此命令将显示 HugePages 相关的内核文件和目录:
ls /sys/kernel/mm/hugepages/
示例输出:
hugetlb_shm_group nr_hugepages vmpage_alloc
numactrl
(如果支持 NUMA):
如果你的系统使用 NUMA(Non-Uniform Memory Access)架构,numactrl
可以帮助你查看每个 NUMA 节点的 HugePages 状况:
numactrl --show
这将显示系统各 NUMA 节点的 HugePages 配置和分配情况。
2. 设置 HugePages
查看当前 HugePages 配置:
-
cat /proc/sys/vm/nr_hugepages
该命令会返回当前配置的 HugePages 数量:
cat /proc/sys/vm/nr_hugepages
如果你想设置 HugePages 数量,直接写入该文件即可。例如:
echo 1024 > /proc/sys/vm/nr_hugepages
注意:更改后的值只在当前会话中有效,系统重启后会恢复默认值。要永久生效,应该将该命令添加到
/etc/rc.local
或/etc/sysctl.conf
中。
使用 sysctl
命令来永久设置 HugePages:
可以使用 sysctl
配置 HugePages 数量,使其在重启后保持一致:
编辑 /etc/sysctl.conf
文件并添加以下行:
vm.nr_hugepages = 1024
然后运行 sysctl -p
来使更改生效。
使用 echo
动态配置 HugePages 大小:
你也可以通过命令行临时调整 HugePages 的大小。比如:
echo 2048 > /proc/sys/vm/hugepagesize
这会改变系统上每个 HugePage 的大小。注意:这个值一般固定为 2MB 或 1GB,具体取决于系统架构和配置。
3. 创建和使用 HugePages 文件系统
挂载 HugePages 文件系统:
通常,hugepages 会被挂载到 /mnt/huge
目录,你可以使用以下命令挂载:
mount -t hugetlbfs none /mnt/huge
然后,你可以使用 ls
来查看已挂载的 HugePages 文件系统:
ls /mnt/huge
如果想要在启动时自动挂载,可以在 /etc/fstab
中添加一行:
none /mnt/huge hugetlbfs defaults 0 0
4. 检查应用是否使用 HugePages
-
pmap
命令:pmap
命令用于查看进程的内存映射,可以用来检查某个进程是否正在使用 HugePages:pmap -x <pid> | grep -i huge
该命令会列出进程内存中的 hugepages 使用情况。
-
grep
在/proc/<pid>/maps
中查找 HugePages:你可以直接查看某个进程的内存映射文件来查找是否有 HugePages 的映射:
cat /proc/<pid>/maps | grep hugetlb
5. 释放 HugePages
-
动态释放 HugePages:
如果你需要动态调整 HugePages 的数量,可以通过将
nr_hugepages
设置为一个较低的值来释放多余的 HugePages。例如:echo 512 > /proc/sys/vm/nr_hugepages
这将释放部分已配置的 HugePages。
总结
- 使用
cat /proc/meminfo
和ls /sys/kernel/mm/hugepages/
命令查看当前系统的 HugePages 配置。 - 使用
echo
或sysctl
设置 HugePages 的数量。 - 如果需要进行持久化配置,可以将相关设置添加到
/etc/sysctl.conf
或/etc/rc.local
文件中。 - 通过
pmap
或grep /proc/<pid>/maps
确认某个进程是否使用 HugePages。
二、ADD USER LINUX COMMANDS
1. useradd
命令
useradd
是创建新用户的主要命令,基本语法如下:
sudo useradd [选项] 用户名
常用选项:
-m
:创建用户的主目录。如果指定了此选项,系统会为用户创建主目录,默认位于/home/用户名
。-s
:指定用户的默认 shell。例如,/bin/bash
或/bin/zsh
。-g
:指定用户的初始用户组。-G
:指定用户所属的附加组。-d
:指定用户的主目录位置。-c
:设置用户的注释(通常用来设置全名或其他信息)。
示例:
-
创建一个名为
john
的新用户,并为其创建主目录:sudo useradd -m john
-
创建一个名为
alice
的用户,指定其主目录,并设置默认 shell 为/bin/zsh
:sudo useradd -m -s /bin/zsh -d /home/alice alice
-
创建一个用户
bob
,并指定用户组为devs
,同时也加入附加组admins
:sudo useradd -m -g devs -G admins bob
2. passwd
命令
useradd
命令仅创建用户,但不会设置密码。要为新用户设置密码,可以使用 passwd
命令。
sudo passwd 用户名
系统会提示你输入并确认密码。
示例:
为用户 john
设置密码:
sudo passwd john
3. 查看当前系统用户
要查看当前系统上的所有用户,可以使用以下命令:
cat /etc/passwd
该文件包含了系统中所有用户的信息,每个用户占据一行。可以用 cat
或 grep
命令查看:
cat /etc/passwd
如果只想查看用户名,可以通过 cut
命令提取:
cut -d: -f1 /etc/passwd
getent passwd
getent
命令用于获取系统信息数据库中的条目,类似于 cat /etc/passwd
,但它还包括通过网络(如 LDAP)添加的用户。
getent passwd
4. 删除用户
要删除用户,可以使用 userdel
命令。
sudo userdel [选项] 用户名
常用选项:
-r
:删除用户的主目录及其包含的所有文件。
示例:
-
删除用户
john
,但保留其主目录和文件:sudo userdel john
-
删除用户
john
,并删除其主目录和文件:sudo userdel -r john
5. 创建用户并设置默认组
Linux 系统中每个用户都有一个默认的用户组,这个组通常和用户名相同。你可以使用 -g
选项指定一个默认组,或让系统自动创建用户组。
示例:
-
创建一个名为
john
的用户,指定默认组为devs
:sudo useradd -m -g devs john
-
创建一个名为
alice
的用户,并让系统自动创建一个名为alice
的用户组:sudo useradd -m -G admin,staff alice
6. 创建新用户并配置用户特权
创建新用户后,你可能需要为其配置特定的特权,例如 sudo 权限。为了让用户具有执行管理员命令的权限,你需要将该用户添加到 sudo
组。
示例:
-
将用户
bob
添加到sudo
组:sudo usermod -aG sudo bob
-
添加用户到其他附加组:
sudo usermod -aG groupname bob
7. usermod
命令(修改用户)
usermod
命令用于修改已存在的用户信息。例如,改变用户的主目录、用户组或登录 shell。
示例:
-
修改用户
john
的默认 shell 为/bin/zsh
:sudo usermod -s /bin/zsh john
-
将
john
的主目录更改为/home/john_new
:sudo usermod -d /home/john_new john
-
将用户
alice
添加到附加组staff
:sudo usermod -aG staff alice
三、查看系统信息
在 Linux 系统中,查看版本等系统信息的命令有很多。以下是几种常见的命令,用于查看系统、内核、发行版等信息:
1. uname
命令
uname
命令用于显示操作系统的基本信息。常用选项包括:
-r
: 查看内核版本。-a
: 查看所有信息(包括内核版本、主机名、架构等)。
uname -r
示例输出:
5.4.0-42-generic
查看所有信息:
uname -a
示例输出:
Linux hostname 5.4.0-42-generic #46-Ubuntu SMP Tue Jul 14 12:12:42 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
2. lsb_release
命令
lsb_release
命令可以查看有关 Linux 发行版的信息。常用的选项有:
-a
: 查看所有信息。-d
: 查看发行版的描述。-r
: 查看发行版的版本。
lsb_release -a
示例输出:
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
3. cat /etc/os-release
文件
/etc/os-release
文件包含了当前操作系统的详细信息。可以使用 cat
命令查看这个文件:
cat /etc/os-release
示例输出:
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
VERSION_ID="20.04"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
4. hostnamectl
命令
hostnamectl
命令不仅用于设置主机名,还能显示系统的一些基本信息,包括操作系统、内核版本等。
hostnamectl
示例输出:
Static hostname: hostname
Icon name: computer-vm
Chassis: vm
Machine ID: xxxxxxxxxxxxxxxx
Boot ID: xxxxxxxxxxxxxxxx
Operating System: Ubuntu 20.04 LTS
Kernel: Linux 5.4.0-42-generic
Architecture: x86-64
5. cat /proc/version
文件
/proc/version
文件包含有关当前运行内核的版本信息。可以使用以下命令查看:
cat /proc/version
示例输出:
Linux version 5.4.0-42-generic (buildd@lgw01-amd64-031) (gcc version 8.4.0 (Ubuntu 8.4.0-1ubuntu1~18.04)) #46-Ubuntu SMP Tue Jul 14 12:12:42 UTC 2020
6. dmesg | head
命令
dmesg
命令显示系统启动信息和内核消息。通过该命令,可以查看启动时的内核版本和相关信息。
dmesg | head
示例输出:
[ 0.000000] Linux version 5.4.0-42-generic (buildd@lgw01-amd64-031) (gcc version 8.4.0 (Ubuntu 8.4.0-1ubuntu1~18.04)) #46-Ubuntu SMP Tue Jul 14 12:12:42 UTC 2020
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-5.4.0-42-generic root=/dev/mapper/ubuntu--vg-root ro quiet splash
...
7. cat /proc/cpuinfo
和 cat /proc/meminfo
如果你想查看关于 CPU 和内存的详细信息,可以使用以下命令:
查看 CPU 信息:
cat /proc/cpuinfo
查看内存信息:
cat /proc/meminfo
四、查找指定文件夹命令
find / -type d -name "*dpdk*"
五、查看文件类型
1. 使用 file
命令查看文件类型
file
命令通过检查文件内容来判断文件的类型,而不仅仅是根据扩展名。它可以识别许多不同类型的文件,包括文本文件、可执行文件、图片、压缩文件等。
基本语法:
file /path/to/file
示例:
file myfile.txt
输出示例:
myfile.txt: ASCII text
file
命令会输出文件的类型信息,可能会包括:
ASCII text
:文本文件ELF 64-bit LSB executable
:可执行的二进制文件gzip compressed data
:压缩文件(gzip 格式)JPEG image data
:JPEG 图片文件
2. 使用 ls -l
查看文件类型
基本语法:
ls -l /path/to/file
示例:
ls -l myfile.txt
输出示例:
-rw-r--r-- 1 user user 0 Jan 3 14:05 myfile.txt
在这个输出中,-rw-r--r--
的开头的 -
表示 myfile.txt
是一个常规文件。
3. 使用 stat
查看文件的详细信息
stat
命令提供了关于文件的详细信息,包括文件的大小、权限、修改时间、文件类型等。
基本语法:
stat /path/to/file
示例:
stat myfile.txt
输出示例:
File: myfile.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 999999 Links: 1
Access: 2025-01-03 14:05:24.000000000 +0800
Modify: 2025-01-03 14:05:24.000000000 +0800
Change: 2025-01-03 14:05:24.000000000 +0800
Birth: -
在 File:
后面的信息中,regular empty file
表示该文件是一个常规文件。
4. 使用 ls -F
或 ls --classify
区分文件类型
ls -F
命令会在每个文件的名称后面添加一个标志,以帮助你区分文件类型:
/
表示目录*
表示可执行文件@
表示符号链接|
表示管道文件
基本语法:
ls -F /path/to/directory
示例:
ls -F /path/to/directory
输出示例:
myfile.txt myfolder/ myscript.sh* symlink@
在这个例子中:
myfolder/
是一个目录。myscript.sh*
是一个可执行文件。symlink@
是一个符号链接。
六、IPCONFIG USAGE
命令 | 说明 |
---|---|
ifconfig | 显示所有网络接口的详细信息。 |
ifconfig eth0 | 显示指定接口(如 eth0 )的详细信息。 |
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up | 配置 eth0 接口的 IP 地址为 192.168.1.100 ,子网掩码为 255.255.255.0 并启用该接口。 |
sudo ifconfig eth0 down | 禁用 eth0 接口。 |
sudo ifconfig eth0 up | 启用 eth0 接口。 |
ifconfig -a | 显示所有网络接口,包括未启用的接口。 |
ifconfig eth0 mtu 1500 | 设置 eth0 接口的最大传输单元(MTU)为 1500 字节。 |
ifconfig eth0 hw ether 00:11:22:33:44:55 | 更改 eth0 接口的 MAC 地址为 00:11:22:33:44:55 。 |
`ifconfig eth0 | grep inet` |
sudo ifconfig eth0 promisc | 启用 eth0 接口的混杂模式。 |
ifconfig eth0 add 192.168.1.200/24 | 给 eth0 接口添加一个新的 IP 地址(192.168.1.200/24 )。 |
七、IP CONMMAND
ip
命令是现代 Linux 系统中用于配置网络接口、路由、地址等的一种工具,通常被认为是 ifconfig
命令的替代品,功能更强大、灵活且支持更多的网络管理任务。
命令 | 说明 |
---|---|
ip a 或 ip addr | 显示所有网络接口的详细信息,包括接口的 IP 地址、MAC 地址等。 |
ip a show eth0 | 显示指定接口(如 eth0 )的详细信息。 |
ip link set eth0 up | 启用指定接口(如 eth0 )。 |
ip link set eth0 down | 禁用指定接口(如 eth0 )。 |
ip addr add 192.168.1.100/24 dev eth0 | 给 eth0 接口添加 IP 地址 192.168.1.100/24 。 |
ip addr del 192.168.1.100/24 dev eth0 | 删除 eth0 接口的 IP 地址 192.168.1.100/24 。 |
ip addr show | 显示所有接口的 IP 地址信息。 |
ip route | 显示当前的路由表。 |
ip route add default via 192.168.1.1 | 添加默认路由,通过网关 192.168.1.1 。 |
ip route del default | 删除默认路由。 |
ip link set eth0 address 00:11:22:33:44:55 | 更改 eth0 接口的 MAC 地址为 00:11:22:33:44:55 。 |
ip link show | 显示所有接口的状态(包括启用、禁用等)。 |
ip link set eth0 mtu 1500 | 设置 eth0 接口的最大传输单元(MTU)为 1500 字节。 |
`ip addr show eth0 | grep inet` |
ip link set eth0 promisc on | 启用 eth0 接口的混杂模式。 |
ip link set eth0 multicast on | 启用 eth0 接口的多播功能。 |
ip -s link | 显示接口的详细统计信息,包括接收和发送的字节数、错误等。 |
ip addr show dev eth0 | 显示 eth0 接口的所有地址(包括 IPv4 和 IPv6 地址)。 |
其他常用功能:
-
配置默认路由:
ip route add default via 192.168.1.1
该命令配置将所有流量默认通过网关
192.168.1.1
。 -
删除路由:
ip route del 192.168.1.0/24
删除路由表中的 192.168.1.0/24 路由条目。
-
启用和禁用接口:
ip link set eth0 up ip link set eth0 down
-
查看和删除 IP 地址:
- 查看接口的 IP 地址:
ip addr show eth0
- 删除 IP 地址:
ip addr del 192.168.1.100/24 dev eth0
- 查看接口的 IP 地址:
-
修改接口的 MAC 地址:
ip link set eth0 address 00:11:22:33:44:55
八、ETHTOOL COMMAND
命令 | 描述 | 示例 |
---|---|---|
ethtool eth0 | 显示指定网卡(如 eth0)的基本信息 | ethtool eth0 |
ethtool -i eth0 | 显示网卡驱动信息 | ethtool -i eth0 |
ethtool -d eth0 | 显示网卡的诊断信息 | ethtool -d eth0 |
ethtool -s eth0 speed 1000 duplex full | 设置网卡速度为 1000 Mbps,全双工模式 | ethtool -s eth0 speed 1000 duplex full |
ethtool -p eth0 | 启动网卡的物理标识灯(LED) | ethtool -p eth0 |
ethtool -a eth0 | 显示和设置网卡的自动协商设置 | ethtool -a eth0 |
ethtool -A eth0 autoneg on | 启用自动协商 | ethtool -A eth0 autoneg on |
ethtool -S eth0 | 显示网卡的统计信息 | ethtool -S eth0 |
ethtool -T eth0 | 显示网卡支持的时间戳选项 | ethtool -T eth0 |
ethtool -E eth0 magic 0x12345678 offset 4 value 0x01 | 向网卡的 EEPROM 中写入数据 | ethtool -E eth0 magic 0x12345678 offset 4 value 0x01 |
ethtool -C eth0 rx-usecs 200 | 设置网卡的接收中断延迟 | ethtool -C eth0 rx-usecs 200 |
ethtool -c eth0 | 显示和设置网卡的中断协商参数 | ethtool -c eth0 |
ethtool -N eth0 tx-frames 500 | 设置网卡的传输队列大小 | ethtool -N eth0 tx-frames 500 |
ethtool -X eth0 adaptive-rx on | 启用自适应接收队列 | ethtool -X eth0 adaptive-rx on |
ethtool -F eth0 | 强制网卡重新初始化(重置网卡) | ethtool -F eth0 |
ethtool -L eth0 rx 256 tx 256 | 设置网卡的接收和发送队列大小 | ethtool -L eth0 rx 256 tx 256 |
ethtool -N eth0 rx-flow 100 | 设置网卡的接收流量队列限制 | ethtool -N eth0 rx-flow 100 |
ethtool -v eth0 | 显示详细的网卡信息 | ethtool -v eth0 |
ethtool --show-channels eth0 | 显示网卡的通道信息 | ethtool --show-channels eth0 |
九、ARP COMMAND
arp
(Address Resolution Protocol)命令主要用于管理ARP缓存,其中包含了IP地址和MAC地址之间的映射关系。尽管最常见的用途是查看和修改ARP缓存,它也可以用于网络调试、广播等其他场景。以下是arp
命令在不同场景中的常见用法:
命令 | 说明 | 平台 |
---|---|---|
arp -a | 显示ARP缓存中的所有条目。包括每个IP地址与对应的MAC地址。 | Linux/Windows/macOS |
arp -a <IP地址> | 显示特定IP地址的ARP条目。 | Linux/Windows/macOS |
arp -n <IP地址> | 以数字格式显示特定IP地址的ARP条目,不进行域名解析。 | Linux/macOS |
arp -d <IP地址> | 从ARP缓存中删除特定IP地址的条目。 | Linux/Windows/macOS |
arp -s <IP地址> <MAC地址> | 向ARP缓存中添加静态条目,手动映射IP地址和MAC地址。 | Linux/Windows/macOS |
arp -f | 刷新或更新ARP缓存。此命令适用于Windows平台,重新加载缓存中的条目。 | Windows |
arp -g | 与arp -a 类似,显示ARP缓存中的所有条目。 | Windows/macOS |
arp -v | 显示命令的详细信息(在某些系统上有效)。 | Linux/macOS |
arp -i <接口> -a | 显示指定网络接口的ARP缓存(仅限Linux)。 | Linux |
arp -i <接口> -s <IP地址> <MAC地址> | 向指定网络接口的ARP缓存中添加静态条目。 | Linux |
arp -i <接口> -d <IP地址> | 从指定网络接口的ARP缓存中删除某个IP地址的条目。 | Linux |
arp -b | 执行广播请求并显示返回的ARP缓存条目。用于通过广播获取网络设备的MAC地址。 | Linux/macOS |
arp -p <目标IP> <广播次数> | 执行ARP广播请求,通常用于网络攻击或漏洞测试,发送特定次数的ARP请求以测试网络中的设备响应。 | Linux/Windows |
arp -t <IP地址> | 发送ARP请求到特定IP地址,可以用于测试网络中某个设备的响应。 | Linux/Windows/macOS |
解释:
-
广播请求和ARP攻击:
arp -b
允许通过发送ARP广播来查询网络中其他设备的MAC地址。这种方式可以帮助网络管理员或安全专家进行网络拓扑发现。arp -p
提供了发送指定次数ARP请求的功能,常用于测试网络中设备的响应速度或者进行ARP欺骗攻击的实验。
-
ARP缓存管理:
arp -d
和arp -s
用于管理缓存中的IP-MAC映射,分别删除和添加静态条目。这些功能常用于清理或修复不准确的ARP缓存。
-
接口指定:
- 使用
-i
选项时,可以明确指定操作的网络接口,这对于拥有多个网络接口的设备尤为重要。这样可以管理每个接口的ARP缓存。
- 使用
-
ARP缓存刷新和更新:
arp -f
在Windows系统中刷新缓存,确保系统通过新请求来更新ARP映射,避免长时间不更新导致的错误。
-
ARP调试:
arp -v
用于输出详细的命令执行信息,适用于调试。