嵌入式开发之常用命令

一、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/meminfols /sys/kernel/mm/hugepages/ 命令查看当前系统的 HugePages 配置。
  • 使用 echosysctl 设置 HugePages 的数量。
  • 如果需要进行持久化配置,可以将相关设置添加到 /etc/sysctl.conf/etc/rc.local 文件中。
  • 通过 pmapgrep /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:设置用户的注释(通常用来设置全名或其他信息)。
示例:
  1. 创建一个名为 john 的新用户,并为其创建主目录:

    sudo useradd -m john
    
  2. 创建一个名为 alice 的用户,指定其主目录,并设置默认 shell 为 /bin/zsh

    sudo useradd -m -s /bin/zsh -d /home/alice alice
    
  3. 创建一个用户 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

该文件包含了系统中所有用户的信息,每个用户占据一行。可以用 catgrep 命令查看:

cat /etc/passwd

如果只想查看用户名,可以通过 cut 命令提取:

cut -d: -f1 /etc/passwd
getent passwd

getent 命令用于获取系统信息数据库中的条目,类似于 cat /etc/passwd,但它还包括通过网络(如 LDAP)添加的用户。

getent passwd

4. 删除用户

要删除用户,可以使用 userdel 命令。

sudo userdel [选项] 用户名
常用选项:
  • -r:删除用户的主目录及其包含的所有文件。
示例:
  1. 删除用户 john,但保留其主目录和文件:

    sudo userdel john
    
  2. 删除用户 john,并删除其主目录和文件:

    sudo userdel -r john
    

5. 创建用户并设置默认组

Linux 系统中每个用户都有一个默认的用户组,这个组通常和用户名相同。你可以使用 -g 选项指定一个默认组,或让系统自动创建用户组。

示例:
  1. 创建一个名为 john 的用户,指定默认组为 devs

    sudo useradd -m -g devs john
    
  2. 创建一个名为 alice 的用户,并让系统自动创建一个名为 alice 的用户组:

    sudo useradd -m -G admin,staff alice
    

6. 创建新用户并配置用户特权

创建新用户后,你可能需要为其配置特定的特权,例如 sudo 权限。为了让用户具有执行管理员命令的权限,你需要将该用户添加到 sudo 组。

示例:
  1. 将用户 bob 添加到 sudo 组:

    sudo usermod -aG sudo bob
    
  2. 添加用户到其他附加组:

    sudo usermod -aG groupname bob
    

7. usermod 命令(修改用户)

usermod 命令用于修改已存在的用户信息。例如,改变用户的主目录、用户组或登录 shell。

示例:
  1. 修改用户 john 的默认 shell 为 /bin/zsh

    sudo usermod -s /bin/zsh john
    
  2. john 的主目录更改为 /home/john_new

    sudo usermod -d /home/john_new john
    
  3. 将用户 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/cpuinfocat /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 -Fls --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 eth0grep inet`
sudo ifconfig eth0 promisc启用 eth0 接口的混杂模式。
ifconfig eth0 add 192.168.1.200/24eth0 接口添加一个新的 IP 地址(192.168.1.200/24)。

七、IP CONMMAND

ip 命令是现代 Linux 系统中用于配置网络接口、路由、地址等的一种工具,通常被认为是 ifconfig 命令的替代品,功能更强大、灵活且支持更多的网络管理任务。

命令说明
ip aip 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 eth0eth0 接口添加 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 eth0grep 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
      
  • 修改接口的 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 -garp -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

解释:

  1. 广播请求和ARP攻击

    • arp -b 允许通过发送ARP广播来查询网络中其他设备的MAC地址。这种方式可以帮助网络管理员或安全专家进行网络拓扑发现。
    • arp -p 提供了发送指定次数ARP请求的功能,常用于测试网络中设备的响应速度或者进行ARP欺骗攻击的实验。
  2. ARP缓存管理

    • arp -darp -s 用于管理缓存中的IP-MAC映射,分别删除和添加静态条目。这些功能常用于清理或修复不准确的ARP缓存。
  3. 接口指定

    • 使用-i选项时,可以明确指定操作的网络接口,这对于拥有多个网络接口的设备尤为重要。这样可以管理每个接口的ARP缓存。
  4. ARP缓存刷新和更新

    • arp -f 在Windows系统中刷新缓存,确保系统通过新请求来更新ARP映射,避免长时间不更新导致的错误。
  5. ARP调试

    • arp -v 用于输出详细的命令执行信息,适用于调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值