一、参考资料

Linux官方教程
linux CSDN专栏

二、常用指令

1. CPU相关

1.1 /proc/cpuinfo

关于/proc/cpuinfo文件 - geloutingyu - 博客园

基于ARM架构的芯片获取CPU信息(cpuID)的多种方法-CSDN博客

Linux下获取ARMv8-A CPU详情的3种方法 - 知乎

1.2 CPU运行模式

# 查看系统是32位还是64位
getconf LONG_BIT

1.3 查看cpu是否支持64bit

cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l

1.4 查看CPU信息

lscpu

4核4线程

# lscpu
Architecture:          x86_64
CPU 运行模式:    32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
每个核的线程数:1
每个座的核数:  4
Socket(s):             1
NUMA 节点:         1
厂商 ID:           GenuineIntel
CPU 系列:          6
型号:              158
步进:              11
CPU MHz:             800.000
BogoMIPS:              6185.06
虚拟化:           VT-x
L1d 缓存:          32K
L1i 缓存:          32K
L2 缓存:           256K
L3 缓存:           6144K
NUMA node0 CPU(s):     0-3

6核12线程

Architecture:          x86_64
CPU 运行模式:    32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                12
On-line CPU(s) list:   0-11
每个核的线程数:2
每个座的核数:  6
Socket(s):             1
NUMA 节点:         1
厂商 ID:           AuthenticAMD
CPU 系列:          25
型号:              33
Model name:            AMD Ryzen 5 5600X 6-Core Processor
步进:              0
CPU MHz:             4591.230
CPU max MHz:           3700.0000
CPU min MHz:           2200.0000
BogoMIPS:              7386.44
虚拟化:           AMD-V
L1d 缓存:          32K
L1i 缓存:          32K
L2 缓存:           512K
L3 缓存:           32768K
NUMA node0 CPU(s):     0-11
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca

8核8线程

[root@host-10-10-17-13 ~]# lscpu
Architecture:                    aarch64
CPU op-mode(s):                  64-bit
Byte Order:                      Little Endian
CPU(s):                          8
On-line CPU(s) list:             0-7
Thread(s) per core:              1
Core(s) per socket:              1
Socket(s):                       8
NUMA node(s):                    1
Vendor ID:                       HiSilicon
Model:                           0
Model name:                      Kunpeng-920
Stepping:                        0x1
CPU max MHz:                     2600.0000
CPU min MHz:                     2600.0000
BogoMIPS:                        200.00
L1d cache:                       512 KiB
L1i cache:                       512 KiB
L2 cache:                        4 MiB
L3 cache:                        256 MiB
NUMA node0 CPU(s):               0-7
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Not affected
Vulnerability Spectre v1:        Mitigation; __user pointer sanitization
Vulnerability Spectre v2:        Not affected
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cp
                                 uid asimdrdm jscvt fcma dcpop asimddp asimdfhm

96核96线程

root@44ff3bb0ad1d:~# lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              96
On-line CPU(s) list: 0-95
Thread(s) per core:  1
Core(s) per socket:  48
Socket(s):           2
NUMA node(s):        4
Vendor ID:           0x48
Model:               0
Stepping:            0x1
CPU max MHz:         2600.0000
CPU min MHz:         200.0000
BogoMIPS:            200.00
L1d cache:           64K
L1i cache:           64K
L2 cache:            512K
L3 cache:            49152K
NUMA node0 CPU(s):   0-23
NUMA node1 CPU(s):   24-47
NUMA node2 CPU(s):   48-71
NUMA node3 CPU(s):   72-95
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm

192核192线程

[ma-user@notebook-87136e07-6a9a-4138-beec-742972f7b62f MyDocuments]$ lscpu
Architecture:        aarch64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              192
On-line CPU(s) list: 0-191
Thread(s) per core:  1
Core(s) per socket:  48
Socket(s):           4
NUMA node(s):        8
Vendor ID:           HiSilicon
Model:               0
Model name:          Kunpeng-920
Stepping:            0x1
BogoMIPS:            200.00
L1d cache:           12 MiB
L1i cache:           12 MiB
L2 cache:            96 MiB
L3 cache:            192 MiB
NUMA node0 CPU(s):   0-23
NUMA node1 CPU(s):   24-47
NUMA node2 CPU(s):   48-71
NUMA node3 CPU(s):   72-95
NUMA node4 CPU(s):   96-119
NUMA node5 CPU(s):   120-143
NUMA node6 CPU(s):   144-167
NUMA node7 CPU(s):   168-191
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm
yoyo@yoyo:/sys/devices/system/cpu$ lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         39 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  8
  On-line CPU(s) list:   0-7
Vendor ID:               GenuineIntel
  Model name:            11th Gen Intel(R) Core(TM) i7-1195G7 @ 2.90GHz
    CPU family:          6
    Model:               140
    Thread(s) per core:  2
    Core(s) per socket:  4
    Socket(s):           1
    Stepping:            2
    BogoMIPS:            5836.79
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr
                         sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology tsc_reli
                         able nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe p
                         opcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch i
                         nvpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid ept_ad fsgsbase
                          tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma
                         clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx512vb
                         mi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpi
                         d movdiri movdir64b fsrm avx512_vp2intersect flush_l1d arch_capabilities
Virtualization features:
  Virtualization:        VT-x
  Hypervisor vendor:     Microsoft
  Virtualization type:   full
Caches (sum of all):
  L1d:                   192 KiB (4 instances)
  L1i:                   128 KiB (4 instances)
  L2:                    5 MiB (4 instances)
  L3:                    12 MiB (1 instance)
Vulnerabilities:
  Itlb multihit:         Not affected
  L1tf:                  Not affected
  Mds:                   Not affected
  Meltdown:              Not affected
  Spec store bypass:     Mitigation; Speculative Store Bypass disabled via prctl and seccomp
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Enhanced IBRS, IBPB conditional, RSB filling
  Srbds:                 Not affected
  Tsx async abort:       Not affected

1.5 查看CPU指令集

cat /proc/cpuinfo | grep flags

输出结果

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe constant_tsc arch_perfmon rep_good xtopology cpuid aperfmperf pni pclmuldq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d

2. 内存相关

2.1 /proc/meminfo

/proc/meminfo 文件包含了详细的内存使用信息。

cat /proc/meminfo

输出示例:

/ # cat /proc/meminfo
MemTotal:         433500 kB
MemFree:          344076 kB
MemAvailable:     347632 kB
Buffers:             604 kB
Cached:            22180 kB
SwapCached:            0 kB
Active:            18080 kB
Inactive:          35580 kB
Active(anon):      13428 kB
Inactive(anon):    30896 kB
Active(file):       4652 kB
Inactive(file):     4684 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:             0 kB
HighFree:              0 kB
LowTotal:         433500 kB
LowFree:          344076 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                84 kB
Writeback:             0 kB
AnonPages:         30932 kB
Mapped:             6304 kB
Shmem:             13428 kB
KReclaimable:       3416 kB
Slab:              20052 kB
SReclaimable:       3416 kB
SUnreclaim:        16636 kB
KernelStack:        1648 kB
PageTables:         1072 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      216748 kB
Committed_AS:     783736 kB
VmallocTotal:     589824 kB
VmallocUsed:        6748 kB
VmallocChunk:          0 kB
Percpu:              288 kB
CmaTotal:           2048 kB
CmaFree:            1388 kB

参数解释

  • MemTotal: 总内存。
  • MemFree: 空闲内存。
  • MemAvailable: 可用内存。
  • SwapTotal: 总交换分区大小。
  • SwapFree: 空闲交换分区大小。

2.2 free 指令

free 是最常用的查看内存占用的指令,该指令能够显示系统总内存、已用内存、空闲内存等信息。

free -m
free -h

输出示例:

              total        used        free      shared  buff/cache   available
Mem:           15Gi       4.2Gi       8.1Gi       512Mi       2.7Gi        10Gi
Swap:          2.0Gi       0.0Gi       2.0Gi

参数解释

  • total: 总内存大小。
  • used: 已使用的内存。
  • free: 空闲的内存。
  • shared: 共享内存。
  • buff/cache: 缓存和缓冲区使用的内存。
  • available: 可用的内存(包括缓存和缓冲区中可释放的部分)。

2.3 vmstat 指令

vmstat -s

输出示例:

yoyo@yoyo:~/Downloads$ vmstat -s
     16336868 K total memory
      4667100 K used memory
      3756360 K active memory
      7608160 K inactive memory
      3675492 K free memory
       679068 K buffer memory
      7315208 K swap cache
       945416 K total swap
        33316 K used swap
       912100 K free swap
     30056282 non-nice user cpu ticks
         2665 nice user cpu ticks
      4661638 system cpu ticks
    316578415 idle cpu ticks
        23128 IO-wait cpu ticks
            0 IRQ cpu ticks
       256101 softirq cpu ticks
            0 stolen cpu ticks
     16868699 pages paged in
    140854133 pages paged out
          435 pages swapped in
         8670 pages swapped out
    425481957 interrupts
    598604180 CPU context switches
   1738909532 boot time
      2505263 forks

参数解释

  • total memory: 总内存。
  • used memory: 已用内存。
  • free memory: 空闲内存。

2.4 smem 指令

smem 是一个更高级的工具,可以显示更详细的内存使用情况。

如果未安装 smem,可以通过以下命令安装:

sudo apt install smem

运行 smem

smem -t -k

参数解释

  • -t: 显示总计。
  • -k: 以 KB 为单位显示。

2.5 top 指令

top

top 界面中,按下 M 可以按内存使用排序。

输出示例:

MiB Mem :  15985.2 total,   8192.3 free,   4321.5 used,   3471.4 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.  11000.0 avail Mem
  • Mem: 物理内存使用情况。
  • Swap: 交换分区使用情况。

2.6 htop 指令

htoptop 的增强版,提供了更友好的界面和更多的功能。在 htop 中,内存使用情况会以彩色条状图显示,更直观。

如果未安装 htop,可以通过以下命令安装:

sudo apt install htop

运行 htop

htop

2.7 ps指令

使用 ps 指令可以查看特定进程的内存使用情况。

ps aux --sort=-%mem

参数解释

  • --sort=-%mem: 按内存使用率从高到低排序。

输出示例:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user     12345  2.3  5.6 1023456 567890 pts/0  S+   10:00   0:10 some_process

参数解释

  • %MEM: 进程占用的内存百分比。
  • RSS: 进程实际使用的物理内存大小(单位:KB)。

2.8 分配swap交换空间

在移动平台上,GPU 内存和 CPU 内存共享系统内存。在内存大小非常有限的设备上,如 Jetson Nano,系统内存可能会因大型网络而耗尽;甚至所需的 GPU 内存也小于系统内存。在这种情况下,增加系统swap交换空间大小可以解决一些问题。

查看swap交换空间:

free -m
root@davinci-mini:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        2.2G        4.9G        2.0M        451M        5.2G
Swap:            0B          0B          0B

新增临时swap交换空间:

# count的大小就是增加的swap空间的大小,1G是块大小为1G,所以空间大小是 bs*count=6G
sudo dd if=/dev/zero of=/swapfile bs=1G count=6

# 把空间格式化成swap格式
sudo mkswap /swapfile

# 修改权限
su chmod 0600 /swapfile  

# 使swap空间生效
sudo swapon /swapfile

新增swap交换空间的shell脚本如下:

echo "######alloc swap######"
if [ ! -e /swapfile ];then
    sudo fallocate -l 4G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo /bin/sh -c 'echo  "/swapfile \t none \t swap \t defaults \t 0 \t 0" >> /etc/fstab'
    sudo swapon -a
fi

输出示例:

root@davinci-mini:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        14G  8.8G  4.3G  68% /
devtmpfs        3.6G  4.0K  3.6G   1% /dev
tmpfs           3.8G     0  3.8G   0% /dev/shm
tmpfs           3.8G  2.1M  3.8G   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup
/dev/mmcblk1p2  976M  5.0M  920M   1% /var/log/npu/slog
/dev/mmcblk1p3  103G   12G   88G  12% /home
tmpfs           777M     0  777M   0% /run/user/1000
root@davinci-mini:~# sudo dd if=/dev/zero of=/swapfile bs=1G count=4
4+0 records in
4+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 140.872 s, 30.5 MB/s
root@davinci-mini:~# sudo mkswap /swapfile
mkswap: /swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=a808bd53-fc5a-4958-8bc3-d58a1c10d3a7
root@davinci-mini:~# sudo chmod 0600 /swapfile
root@davinci-mini:~# sudo swapon /swapfile
root@davinci-mini:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        2.2G        1.2G        2.0M        4.1G        5.2G
Swap:          4.0G          0B        4.0G
root@davinci-mini:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        14G   13G  240M  99% /
devtmpfs        3.6G  4.0K  3.6G   1% /dev
tmpfs           3.8G     0  3.8G   0% /dev/shm
tmpfs           3.8G  2.1M  3.8G   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup
/dev/mmcblk1p2  976M  5.0M  920M   1% /var/log/npu/slog
/dev/mmcblk1p3  103G   12G   88G  12% /home
tmpfs           777M     0  777M   0% /run/user/1000

释放临时SWAP空间:

# 关闭swap空间
sudo swapoff /swapfile
sudo rm /swapfile

# 关闭所有的swap空间
sudo swapoff -a

输出示例:

root@davinci-mini:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        2.2G        1.2G        2.0M        4.1G        5.2G
Swap:          4.0G          0B        4.0G
root@davinci-mini:~# sudo swapoff /swapfile
root@davinci-mini:~# sudo rm /swapfile
root@davinci-mini:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        2.2G        4.9G        2.0M        451M        5.2G
Swap:            0B          0B          0B

2.9 修改 /dev/shm 共享内存大小

临时修改

默认的最大一半内存大小在某些场合可能不够用,并且默认的inode数量很低一般都要调高些,这时可以用mount命令来管理它。

mount -o size=1500m -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm

参数解释

  • size=1500m,在2g的机器上,将最大容量调到1.5g;
  • nr_inodes=1000000,inode数量调到1000000,这意味着最多可存入一百万个小文件。
永久修改

如果需要永久修改 /dev/shm 的值,需要修改 /etc/fstab

tmpfs /dev/shm tmpfs defaults,size=1.5g 0 0
mount -o remount /dev/shm

2.10 内存压力测试工具

【工具】 memtester内存压力测试工具 - 李春港 - 博客园

3. 磁盘/硬盘相关

3.1 Ubuntu清理硬盘空间

Ubuntu系统释放磁盘空间的7种简单方法
如何在Ubuntu上清理缓存和垃圾文件-CSDN博客

3.2 /home扩容

linux对根目录扩容(命令行) - EastWood001 - 博客园

使用gparted工具,给 /home 分区扩容即可。

查看硬盘空间
root@lubancat:/# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0      179:0    0 57.6G  0 disk
|-mmcblk0p1  179:1    0    4M  0 part
|-mmcblk0p2  179:2    0    4M  0 part
|-mmcblk0p3  179:3    0   64M  0 part
|-mmcblk0p4  179:4    0  256M  0 part
|-mmcblk0p5  179:5    0   32M  0 part
|-mmcblk0p6  179:6    0   14G  0 part /
|-mmcblk0p7  179:7    0  128M  0 part
`-mmcblk0p8  179:8    0 43.1G  0 part
mmcblk0boot0 179:32   0    4M  1 disk
mmcblk0boot1 179:64   0    4M  1 disk
root@lubancat:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       3.0G  2.9G     0 100% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           792M  2.1M  790M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs           792M  4.0K  792M   1% /run/user/1000

扩容总体思路:mmcblk0硬盘空间为57.6G,主分区mmcblk0p6挂在到 / 根目录。通过删除mmcblk0p7、mmcblk0p8两个分区(无用分区),以扩展mmcblk0p6分区。

删除无用分区

删除无用分区8:

root@lubancat:/# fdisk /dev/mmcblk0

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-8, default 8): 8

Partition 8 has been deleted.

Command (m for help): w
The partition table has been altered.
Syncing disks.

删除后的分区情况:

root@lubancat:/# fdisk -l
Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mmcblk0: 57.63 GiB, 61865984000 bytes, 120832000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B25F0000-0000-4B36-8000-7879000032B2

Device            Start      End  Sectors  Size Type
/dev/mmcblk0p1    16384    24575     8192    4M unknown
/dev/mmcblk0p2    24576    32767     8192    4M unknown
/dev/mmcblk0p3    32768   163839   131072   64M unknown
/dev/mmcblk0p4   163840   688127   524288  256M unknown
/dev/mmcblk0p5   688128   753663    65536   32M unknown
/dev/mmcblk0p6   753664 30113791 29360128   14G unknown
/dev/mmcblk0p7 30113792 30375935   262144  128M unknown


Disk /dev/mmcblk0boot0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mmcblk0boot1: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

删除无用分区7:

root@lubancat:/# fdisk /dev/mmcblk0

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-7, default 7): 7

Partition 7 has been deleted.

Command (m for help): w
The partition table has been altered.
Syncing disks.

删除后的分区情况:

root@lubancat:/# fdisk -l
Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mmcblk0: 57.63 GiB, 61865984000 bytes, 120832000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B25F0000-0000-4B36-8000-7879000032B2

Device          Start      End  Sectors  Size Type
/dev/mmcblk0p1  16384    24575     8192    4M unknown
/dev/mmcblk0p2  24576    32767     8192    4M unknown
/dev/mmcblk0p3  32768   163839   131072   64M unknown
/dev/mmcblk0p4 163840   688127   524288  256M unknown
/dev/mmcblk0p5 688128   753663    65536   32M unknown
/dev/mmcblk0p6 753664 30113791 29360128   14G unknown


Disk /dev/mmcblk0boot0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mmcblk0boot1: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
parted扩容

parted扩展分区:

root@lubancat:/# parted /dev/mmcblk0 print
Model: MMC 88A19C (sd/mmc)
Disk /dev/mmcblk0: 61.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name      Flags
 1      8389kB  12.6MB  4194kB               uboot
 2      12.6MB  16.8MB  4194kB               misc
 3      16.8MB  83.9MB  67.1MB               boot
 4      83.9MB  352MB   268MB                recovery
 5      352MB   386MB   33.6MB               backup
 6      386MB   15.4GB  15.0GB  ext4         rootfs
root@lubancat:/# parted /dev/mmcblk0
GNU Parted 3.3
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) resizepart 6
End?  [15.4GB]?
(parted) quit
Information: You may need to update /etc/fstab.
resize2fs扩容

执行resize2fs扩展分区:

root@lubancat:/# resize2fs /dev/mmcblk0p6
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mmcblk0p6 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mmcblk0p6 is now 3670016 (4k) blocks long.
扩容成功

查看扩容情况:

root@lubancat:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        14G  2.9G   11G  22% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           792M  2.1M  790M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs           792M  4.0K  792M   1% /run/user/1000

3.3 ubuntu系统U盘只读

  1. 查看系统日志

    tail -f /var/log/syslog
    
  2. 查看U盘所在的文件系统

    df -h
    
  3. 卸载U盘

    umount /media/sinkdream/DA18-EBFA 
    
  4. 修复U盘文件系统

    sudo dosfsck -v -a /dev/sda1
    

3.4 硬盘测速

固态硬盘的速度

Linux hdparm命令教程:优化硬盘性能和读写速度(附实例详解和注意事项)

# 安装
sudo apt-get install hdparm
yoyo@ubuntu:~$ sudo hdparm -t /dev/loop0

/dev/loop0:
 Timing buffered disk reads: 1476 MB in  3.01 seconds = 489.69 MB/sec

机械硬盘的速度

yoyo@ubuntu:~$ sudo hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads: 338 MB in  3.22 seconds = 104.99 MB/sec

3.5 硬盘挂载卸载

Ubuntu 配置/etc/fstab参数实现开机自动挂载硬盘-CSDN博客
【面向新手】Linux下挂载与卸载SD卡_linux 挂载 mmcblk1-CSDN博客

# 创建挂载目录
sudo mkdir /mnt/c

# 将c盘挂载到 /mnt/c
sudo mount -t drvfs C:\\ /mnt/c

# 卸载
sudo umount /mnt/c
# 创建挂载目录
sudo mkdir /mnt/sd

# 挂载microSD卡
mount /dev/mmcblk1p1 /mnt/sd

# 卸载
umount /mnt/sd

3.6 磁盘分区

创建分区
# 查看磁盘剩余空间
lsblk

# 创建新分区
sudo fdisk /dev/sda
n (新建分区)
p (主分区)
<选择合适的数字,例如空闲的5>
t (设置分区类型,例如8e)
w (退出并保存)

# 创建文件系统
sudo mkfs -t ext4 /dev/sda3

# 挂载新分区
sudo mkdir /mnt/sda3
sudo mount /dev/sda3 /mnt/sda3

# 查看分区
lsblk
或者
df -h

配置开机自动挂载:

sudo gedit /etc/fstab

# 添加以下内容
/dev/sda3        /mnt/sda3  ext4    defaults 0       2
删除分区
# 查看分区
sudo fdisk -l

# 进入分区工具,并选择 sda 盘
sudo fdisk /dev/sda
d (删除分区)
<选择需要删除的分区编号>
w (退出并保存)

# 卸载分区
sudo umount /dev/sda3

# 查看分区
lsblk
或者
df -h

可能会提示无法卸载,则执行以下指令:

# 查看占用该分区的进程
fuser -m /dev/sdb3

# 杀死进程
sudo kill -9 [PID]

4. 进程相关

Ubuntu系统批量杀死进程方法[转亲测可用]

# 通过端口号查看进程情况
lsof -i :5001

# 查看指定端口号的进程情况
netstat -tunlp | grep 5001
netstat -apn | grep 5001

# 查看进程的status文件
cat /proc/PID号/status

# 查找进程
ps -aux | grep xjserver
ps -ef | grep xjserver

# 查找进程ID
pgrep xjserver

# 查看进程信息
ps -efw

# 杀死进程
kill -9 PID

# 删除所有的 uwsgi 进程
killall -9 uwsgi 

# 杀进程
killall -9 xjserver

# 查看进程所占用内存大小
ps -ef | grep pycharm

# 根据进程ID查看进程情况
top -p PID号
ps -aux | grep pycharm

# nohup防止进程退出
在指令前加上 nohup 指令
ps -ef | grep spiderks.py | xargs kill -9  # 批量删除进程
ps -ef | grep spiderks.py | grep -v grep | awk '{print $2}' | xargs kill -9 

|  管道符,用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
ps  命令用来列出系统中当前运行的进程, ps -ef 显示所有进程信息,联通命令行。
grep 命令用于过滤/搜索特定字符,grep spiderks.py在这里为搜索过滤所有含有"piderks.py"名称的进程。
grep -v 显示不包含匹配文本的所有行,在这里为筛选出所有不包含grep名称的进程,对上一步的进程再做一次筛选(因为ps -ef列出了所有的命令,包括命令行)。
awk在文件或字符串中基于指定规则浏览和抽取信息;把文件逐行读入,以空格为默认分隔符将每行切片,然后再进行后序处理。这里利用awk '{print $2}'将上一步中过滤得到的进程进行打印,$2表示打印第二个域(PID,进程号) $0表示所有域,$1表示第一个域,$n表示第n个域。
xargs命令是给命令传递参数的过滤器,善于把标准数据数据转换成命令行参数。在这里则是将获取前一个命令的标准输出然后转换成命令行参数传递给后面的kill命令。
kill -9强制关闭进程。

5. 文件相关

# 查看当前文件夹大小
du -sh 

# 查看指定文件大小
du -sk filename 
df -h

# 下载服务器文件
scp -r remote_username@remote_ip:remote_file local_file

# 上传文件到服务器
scp -r local_file remote_username@remote_ip:remote_file

# 上传文件到docker容器中
scp -P 6013 -r ./mindspore remote_username@remote_ip:/data/YOYOFile

# 递归创建文件夹
sudo mkdir -p /a/b/c/d

# 删除文件夹
sudo rmdir xxx

# 将一个目录下的文件合并成一个文件
find data/ -name "*seisreal.su" | xargs cat > ./seisreal.su

# 扫描1k以下的文件并删除掉
find ./ -size -1k -exec rm {} \

查看文件大小

# 查看文件夹大小
du -h --max-depth=1 ./work

# 查看当前目录大小
du -h -x --max-depth=1

# 查看文件大小
du -h --max-depth=1 ./work/work.zip

参数解释:

--max-depth:文件级别,类似于 `tree -L 1`

查看文件

# grep过滤文件
ls /usr/lib/x86_64-linux-gnu/ | grep libusb

查看文件属性

file hello

查看x86_64文件属性

yoyo@yoyo:/demo-1/build$ file test.cpython-38-x86_64-linux-gnu.so
test.cpython-38-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=4b5bc89af229afb3a57067c59c6f6b3c3abd97f9, stripped

查看ARM aarch64文件属性

yoyo@yoyo:/demo-1/build$ file test 
test: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=ede486cbaba4f250828603555d45fa84769bcea9, with debug_info, not stripped

6. 日志相关

# 启动服务,打印详细信息
./xjserver -l4

# 重定向
> 新创建不追加,如果文件不存在,就创建文件;如果文件存在,就将其清空
>> 追加,将输出内容追加到目标文件中

# 要跟踪名为 tcp_server.log 的文件的增长情况,从末尾开始查看文件
tail -f /PATH/TO/tcp_server.log

# 向文本文件中写入内容
echo "deb http://mirrors.163/debian/ jessie main non-free contrib" > /etc/apt/sources.list

7. 系统相关

Linux查看系统与内核信息(lsb_release、uname、file)

7.1 查看系统

lsb_release -a

cat /etc/issue
yoyo@LAPTOP-4DTD5D42:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy
yoyo@yoyo:~$ cat /etc/issue
Ubuntu 22.04.1 LTS \n \l

7.2 系统信息

# OS详细信息
uname -a
或者
cat /proc/version

# OS发行信息
cat /etc/*release

# 硬件平台
uname -i

# 节点名称
uname -n

# OS名称
uname -o

# 处理器体系结构
uname -p

# OS发行版本号
uname -r

# OS名称
uname -s

# 内核版本
uname -v
[root@host-10-10-17-13 ~]# uname -a
Linux host-10-10-17-13 4.19.90-24.4.v2101.ky10.aarch64 #1 SMP Mon May 24 14:45:37 CST 2021 aarch64 aarch64 aarch64 GNU/Linux
[root@host-10-10-17-13 ~]# uname -i
aarch64
[root@host-10-10-17-13 ~]# uname -n
host-10-10-17-13
[root@host-10-10-17-13 ~]# uname -o
GNU/Linux
[root@host-10-10-17-13 ~]# uname -p
aarch64
[root@host-10-10-17-13 ~]# uname -r
4.19.90-24.4.v2101.ky10.aarch64
[root@host-10-10-17-13 ~]# uname -s
Linux
[root@host-10-10-17-13 ~]# uname -v
#1 SMP Mon May 24 14:45:37 CST 2021
# OS详细信息
cat /proc/version

# OS发行信息
cat /etc/*release

cat /etc/issue
cat /etc/os-release
[root@host-10-10-17-13 ~]# cat /proc/version 
Linux version 4.19.90-24.4.v2101.ky10.aarch64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Mon May 24 14:45:37 CST 2021
[root@host-10-10-17-13 ~]# cat /etc/*release
Kylin Linux Advanced Server release V10 (Sword)
DISTRIB_ID=Kylin
DISTRIB_RELEASE=V10
DISTRIB_CODENAME=juniper
DISTRIB_DESCRIPTION="Kylin V10"
DISTRIB_KYLIN_RELEASE=V10
DISTRIB_VERSION_TYPE=enterprise
DISTRIB_VERSION_MODE=normal
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Sword)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Sword)"
ANSI_COLOR="0;31"

Kylin Linux Advanced Server release V10 (Sword)

7.3 查看系统发行版本

lsb_release -a
yoyo@yoyo:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy

7.4 显卡信息

# 查看显卡信息
lshw -c video

7.5 IP信息

# 查看Ip
ip addr show 

8. 关机与重启相关指令

linux 关机命令总结

8.1 关机指令

# 立刻关机,停止所有正在运行的进程,并进入一个无操作状态,需要手动断开与电源的连接
halt

# 立刻关机,停止所有正在运行的进程,并断开与电源的连接
poweroff

# 立即关机
sudo shutdown -h now
等价于
sudo shutdown --poweroff now

# 10分钟后自动关机
shutdown -h 10 

注意:如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启。

8.2 重启指令

# 立即关闭系统并重新启动,适用于快速重启系统
reboot

# 立刻重启,允许用户在执行重启操作之前显示一条关机通知消息
sudo shutdown -r now
等价于
sudo shutdown --reboot now

# 10分钟后自动重启(root用户使用)
shutdown -r 10 

# 在时间为20:35时重启(root用户使用)
shutdown -r 20:35 

注意:如果是通过shutdown命令设置重启的话,可以用 shutdown -c 命令取消重启。

9. 网络相关

开发板上网(保姆级教程)

9.1 安装网卡(网络管理器)

# 停止网络管理器服务
sudo service network-manager stop

# 删除网络管理器的状态文件
sudo rm /var/lib/NetworkManager/NetworkManager.state

# 重新启动网络管理器服务
sudo service network-manager start

9.2 设置IP

临时修改ip:

# 设置IP
ifconfig eth0 192.168.137.30 up

# 设置路由
sudo route add default gw 192.168.137.1 eth0
等价于
sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.137.1 eth0

永久修改ip:

# 设置开机自启连接
sudo vim /etc/profile

# 末尾添加
ifconfig eth0 192.168.137.30 up
route add default gw 192.168.137.1

# 使配置生效
source /etc/profile

验证ip:

ifconfig
ping www.baidu

9.3 route路由

Linux上添加路由,删除路由,修改路由配置(route add, route del, 路由表项基本知识)

linux 默认路由 主机路由 网络路由

route路由命令、ip route命令、default默认路由(0.0.0.0 )

# 查看路由列表
route -n 

# 新增默认路由
sudo route add default gw 192.168.137.1 eth0
等价于
sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.137.1 eth0

# 新增主机路由
sudo route add -host 192.168.137.32 gw 192.168.137.1 ech0

# 新增网络路由
sudo route add -net 192.168.137.32 netmask 255.255.255.0 ech0

# 删除默认路由
sudo route del default gw 192.168.137.1

# 删除主机路由
sudo route del -host 192.168.137.32 eth0

# 删除网络路由
sudo route del -net 192.168.137.32 netmask 255.255.255.0 eth0

查看指定ip的路由信息:

cat@lubancat:~$ ip route get 183.2.172.17
183.2.172.17 via 192.168.137.1 dev eth1 src 192.168.137.94 uid 1000

183.2.172.17www.baidu 对应ip,查询该ip通过 192.168.137.1 网关。

9.4 设置DNS

公共DNS服务器整理

sudo vim /etc/systemd/resolved.conf

DNS=114.114.114.114

如果以上方法无效,则尝试以下操作:

修改 /etc/resolv.conf 文件:

sudo vim /etc/resolv.conf 

# 添加以下内容
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 223.5.5.5
nameserver 223.6.6.6

修改完成后,保存文件并重启网络服务:

sudo /etc/init.d/networking restart
或者
sudo systemctl restart networking

解释说明

114 DNS:114.114.114.114114.114.115.115
google DNS:8.8.8.88.8.4.4
阿里云 DNS:223.5.5.5223.6.6.6

9.5 查看网卡网速信息

# 查看网卡实际速度
cat /sys/class/net/eth0/speed

# 查询网卡信息
ethtool <网卡>

输出示例:

root@ok3588:~# ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Full
                                100baseT/Full
                                1000baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Full
                                100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
                                             1000baseT/Full
        Link partner advertised pause frame use: No
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: ug
        Wake-on: d
        Current message level: 0x0000003f (63)
                               drv probe link timer ifdown ifup
        Link detected: yes

9.6 hostname

查看当前主机名:

hostname

# 查看更详细的信息
hostnamectl

输出示例:

cat@lubancat:~$ hostname
lubancat
cat@lubancat:~$ hostnamectl
   Static hostname: lubancat
         Icon name: computer
        Machine ID: 141cb011286c454f87281ac3a50f8832
           Boot ID: 0b1da2bf785943c29f691726902ea474
  Operating System: Ubuntu 20.04.6 LTS
            Kernel: Linux 6.1.84
      Architecture: arm64

修改主机名:

127.0.0.1 localhost
127.0.1.1 新主机名

9.7 dhclient指令

Linux dhclient命令教程:如何动态获取IP地址和其他网络配置信息(附实例详解和注意事项)-Linux入门自学网

dhclient命令 – 动态获取或释放IP地址 – Linux命令大全(手册)

dhclient 命令详解 - 习久性成 - 博客园

dhclient(DHCP client)动态主机配置协议客户端。

# 在指定网络接口上发出DHCP请求(动态获取 IP,并且显示过程)
dhclient -v eth0

9.8 iptables防火墙

iptables命令 – 防火墙策略管理工具 – Linux命令大全(手册)

9.9 netstat指令

netstat -ltpn

输出示例:

cz@ubuntu:/media/sda3/gerrit_site/bin$ sudo netstat -ltpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      1074/mosquitto      
tcp        0      0 0.0.0.0:34403           0.0.0.0:*               LISTEN      1073/rpc.mountd     
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      831/systemd-resolve 
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      44056/python        
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/init              
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      98360/nginx: master 
tcp        0      0 0.0.0.0:52915           0.0.0.0:*               LISTEN      1073/rpc.mountd     
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:38833           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      71274/cupsd         
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      98360/nginx: master 
tcp        0      0 0.0.0.0:39093           0.0.0.0:*               LISTEN      1073/rpc.mountd     
tcp6       0      0 :::1883                 :::*                    LISTEN      1074/mosquitto      
tcp6       0      0 :::34379                :::*                    LISTEN      -                   
tcp6       0      0 :::111                  :::*                    LISTEN      1/init              
tcp6       0      0 :::80                   :::*                    LISTEN      98360/nginx: master 
tcp6       0      0 :::52349                :::*                    LISTEN      1073/rpc.mountd     
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
tcp6       0      0 :::54737                :::*                    LISTEN      1073/rpc.mountd     
tcp6       0      0 :::29418                :::*                    LISTEN      98946/GerritCodeRev 
tcp6       0      0 :::37483                :::*                    LISTEN      1073/rpc.mountd     
tcp6       0      0 :::8088                 :::*                    LISTEN      98946/GerritCodeRev 
tcp6       0      0 ::1:631                 :::*                    LISTEN      71274/cupsd

10. 时间相关

hwclock硬件时间

hwclock显示系统硬件时钟的日期和时间 - 知乎

Linux hwclock命令 | 菜鸟教程

设置Linux硬件时钟的正确方法 使用hwclock工具进行配置 - OSCHINA - 中文开源技术交流社区

date指令

# 获取系统时间纳秒
date +%Y-%m-%d' '%H:%M:%S.%N

# 获取系统时间毫秒
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23

# 自动循环获取时间(有休眠、不如手动敲)
while true; do date +%Y-%m-%d' '%H:%M:%S.%N; sleep 0.1;done

11. 环境变量相关

~/.bashrc

Ubuntu:配置环境变量的两种常用方法( .bashrc 和 /etc/profile )

~/.bashrc 文件包含bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。该文件被修改后,打开新的terminal,配置才可生效。

为了避免旧的变量被新增的变量覆盖,应该写成如下格式:PATH=$PATH:xx,每一个 PATH 之间要用 : 分隔。在LINUX系统下用 : 作为分隔,在windows中用 ;

执行 source ~/.bashrc 使环境变量生效。

# 环境变量
export PACKAGE_ROOT_PATH={converter_path}

# 动态链接库
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PACKAGE_ROOT_PATH}/tools/converter/lib
export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:${PATH}

# 系统的环境变量
source /etc/profile

# 当前用户的环境变量
source ~/.bashrc

linux设置环境变量

export PATH={converter_path}:${PATH}

windows设置环境变量

set PATH={converter_path}:${PATH}

删除环境变量

export -n KUBECONFIG="/etc/kubernetes/admin.conf"
# 或者
unset KUBECONFIG

参数解释:-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

列出当前的环境变量

# 列出当前的环境变量值
export -p 

/etc/profile

可以将 ffmpegbin 添加到全局变量,这样可以随时调用,不用加上绝对地址,修改 profile 文件:

sudo vi /etc/profile

# 末尾添加
export FFMPEG_HOME=/usr/local/ffmpeg 
export PATH=$FFMPEG_HOME/bin:$PATH

三、重要指令

解压缩相关

zip指令

zip压缩文件

zip 指令的基本语法如下:

zip [选项]... [文件]

常用的选项包括:

  • -v:可视化操作,显示压缩的执行过程,默认就是可视化。
  • -q: 静默操作,不显示指令执行过程。
  • -r:表示递归打包包含子目录的全部内容。
  • -d:从压缩文件内删除指定的文件。
  • -n:n为一个数字,压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。
  • -e:加密压缩文件 。
  • -u:追加文件到zip压缩包中。
# 压缩/etc/目录,压缩文件名为etc.zip
zip -vr etc.zip /etc/

# 压缩多个文件夹
# 将input1,input2, input3压缩成output.zip
zip -vr output.zip input1 input2 input3

# 删除压缩文件中的指定文件
zip -d myfile.zip smart.txt

# 追加mypasww.txt文件到压缩包中
zip -u passwd.zip mypasww.txt

# 将文件和文件夹压缩成 .zip 文件
zip -q -r compress.zip [file directory]
unzip解压文件
# 解压到当前目录
unzip xxx.zip
或者
unzip -q xxx.zip

# 解压到指定目录
unzip xxx.zip -d ./xxx

tar指令

tar 指令的基本语法如下:

tar [选项]... [文件]

常用的选项包括:

  • -c:创建一个新的压缩文件。
  • -v:在压缩过程中显示文件。
  • -f:指定压缩文件的名称。
  • -z:使用 gzip 压缩。
  • -j:使用 bzip2 压缩。
  • -J:使用 xz 压缩。
  • -C:在解压缩时切换到指定的目录。
tar压缩文件

要将文件或目录压缩到指定目录,可以使用以下命令格式:

tar -cvzf [目标压缩文件路径] [要压缩的文件或目录]

例如,要将 /tools/erp_exp 目录压缩到 /dev/tmp/erp_exp.tar.gz,可以使用以下命令:

# 将文件和文件夹压缩成 .tar.gz 文件
tar -cvzf /dev/tmp/erp_exp.tar.gz /tools/erp_exp

在这个命令中,-cvzf 是一组选项的组合,其中 -c 表示创建压缩文件,-v 表示显示过程,-z 表示使用 gzip 压缩,-f 后面跟着的是压缩文件的路径和名称。/tools/erp_exp 是要压缩的目录。

tar解压文件

如果要解压缩文件到指定目录,可以使用 -C 选项,后面跟着目标目录的路径。如果目标目录不存在,tar 命令会自动创建这个目录。例如,要将 erp_exp.tar.gz 解压缩到 /data/backup 目录,可以使用以下命令:

  • 解压 .tar.gz 结尾的压缩包:

    # 一步解压
    tar -xvzf xxx.tar.gz
    # 解压 .tar.gz 文件到 /data/backup 目录
    tar -xvzf xxx.tar.gz -C /data/backup
    
    # 分两步解压
    # 1. 解压 gz
    gzip -d cmake-3.14.1.tar.gz
    # 2. 解压 tar
    tar -xvzf cmake-3.14.1.tar
    

    在这个命令中,-xvzf 是一组选项的组合,其中 -x 表示解压缩,-v 表示显示过程,-z 表示文件是用 gzip 压缩的,-f 后面跟着的是压缩文件的名称。-C /data/backup 表示解压缩到 /data/backup 目录。

  • 解压 .tar.xz 结尾的压缩包:

    # 一步解压
    tar -xJvf xxx.tar.xz
    
    # 分两步解压
    # 1. 解压 xz
    xz -d xxx.tar.xz
    # 2. 解压 tar
    tar -xvf xxx.tar
    

7z指令

7z解压

解压 zip 或 rar 推荐使用 7z 命令

安装7z

apt-get update
apt-get install p7zip-full -y
# 如果 zip 超过 1GB 推荐使用 7z 命令解压,-o 后直接加解压缩路径
7z x compress.zip -o/hy-nas

# 解压 .rar 文件到当前目录
7z x compress.rar

curl 下载

如何使用curl命令下载文件

下载链接:https://d7.serctl/downloads8/2022-10-08-14-24-38-CopyTranslator-CopyTranslator-PaddleOCR-json.v1.2.1.7z

# 下载单个文件,文件名称与url一致
curl -O [URL]

# 下载多个文件
curl -O [URL1] -O [URL2] -O [URL3] ...

# 下载连续的多张图片
# 如果url中文件带有数字,并且有顺序,可以使用正则语法
curl ftp://ftp.example/file[1-30].jpg

# 使用不同的名称保存多个文件
curl -o file2.pdf www.example/file.pdf -o file3.pdf www.example/file1.pdf

# 下载文件显示进度条
curl -# -O [URL]

# 限制下载速度
# 这个值可以用字节表示,k后缀为千字节,m后缀为兆字节,g后缀为千兆字节
curl --limit-rate [value] [URL]
curl --limit-rate 1m -O [URL]

--connect-timeout

设置等待远程服务器回复的最长时间(以秒为单位):

curl --connect-timeout <duration> <URL>
curl --max-time <duration> <URL>

--max-time

当“连接服务器”+“下载文件时间”的总时间大于我们这里指定的 20 秒时,将终止下载。如果文件大小太小,下载时间不会超过 20 秒,因此命令将成功执行。

curl --max-time 20 https://github/aristocratos/btop/releases/download/v1.2.3/btop-aarch64-linux-musl.tbz

wget 下载

Linux wget 命令详解

wget命令是Linux系统用于从Web下载文件的命令行工具,支持 HTTP、HTTPS及FTP协议下载文件,而且wget还提供了很多选项,例如下载多个文件、后台下载,使用代理等等,使用非常方便。接下来就介绍一下wget的使用方法。

# 下载单个文件,文件名称为默认名称
wget [url]

# 下载单个文件,并重命名
wget -O redis.tar.gz https://download.redis.io/releases/redis-6.0.8.tar.gz

# 将文件下载到指定目录
wget -P /usr/software https://download.redis.io/releases/redis-6.0.8.tar.gz


# 断点续传
wget -c https://download.redis.io/releases/redis-6.0.8.tar.gz

# 在后台下载
wget -b https://download.redis.io/releases/redis-6.0.8.tar.gz

# 按照download_list.txt中的链接下载
# 每个url单独一行
wget -i download_list.txt

# 限制下载速度
# 这个值可以用字节表示,k后缀为千字节,m后缀为兆字节,g后缀为千兆字节
wget --limit-rate=1m https://download.redis.io/releases/redis-6.0.8.tar.gz

# 设置模拟浏览器下载
# 如果远程服务器阻止wget下载资源,我们可以通过-U选项模拟浏览器进行下载,例如下面模拟谷歌浏览器下载
wget -U 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.43 Safari/537.36' https://download.redis.io/releases/redis-6.0.8.tar.gz

# 增加重试次数
# 如果网络有问题或下载一个大文件有可能会下载失败,wget默认重试20次
wget --tries=40 https://download.redis.io/releases/redis-6.0.8.tar.gz

# 通过FTP下载如果要从受密码保护的FTP服务器下载文件,需要指定用户名和密码
wget --ftp-user=<username> --ftp-password=<password> url
# 使用wget命令时跳过SSL证书检查
wget https://download.redis.io/releases/redis-6.0.8.tar.gz --no-check-certificate  # 临时

# 永久
vi ~/.wgetrc
check_certificate = off  # 插入内容

软链接

# 创建软链接
# Ubuntu中建立软链接运用ln命令,第一个参数是要建立软链接的文件,第二个参数是软链接名称
ln -s 源地址 目的地址
ln -s /opt/Linux/root_dir /home/lp/roo_dir

# 移除软链接
rm -rf <软链接地址>

# 修改软链接
ln -snf <新目标目录> <软链接地址>

文件完整性校验

linux文件完整性校验-md5-sha256

md5校验

通过md5sum 对二进制文件 libTaskDb.so 算md5值,并将值存储在 libTaskDb.so.md5 文件中,校验文件的时候,使用 md5sum -c libTaskDb.so.md5 来校验文件,校验成功,返回0,否则返回1。

# 生成校验码
md5sum -b libTaskDB.so > libTaskDB.so.md5

# 校验文件
md5sum -c libTaskDB.so.md5 

sha256校验

# 生成校验码
sha256sum -b mindspore-lite-1.8.2-linux-x64.tar.gz > mindspore-lite-1.8.2-linux-x64.tar.gz.sha256

# 校验文件
sha256sum -c mindspore-lite-1.8.2-linux-x64.tar.gz.sha256

adb logcat

通过工具(如adb logcat)抓取后台日志。

ldd指令

功能:查看可执行文件的链接库情况。

用法:ldd file

yoyo@yoyo:/mnt/d/MyDocuments/CMakeDemo/build$ ldd test.cpython-38-x86_64-linux-gnu.so
        linux-vdso.so.1 (0x00007ffde1d20000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5588e95000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5588e75000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5588c4d000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5588b66000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f55890eb000)

file/nm/strings/readelf 查看二进制文件信息

file指令

功能:查看二进制文件信息。

root@root:/home/mindspore_ascend-1.8.2-linux_aarch64/lib# file libmindspore_common.so
libmindspore_common.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=a8e6f5d61eef2f8447ce237014c8f94a1d0638d5, not stripped

nm

查看二进制程序依赖的glibc版本:

nm [二进制文件] | grep GLIBC_
yoyo@yoyo:~/Documents/infer/build$ nm infer | grep GLIBC_
         U abort@GLIBC_2.4
         U clock@GLIBC_2.4
         U exit@GLIBC_2.4
         U fmaxf@GLIBC_2.4
         U fmax@GLIBC_2.4
         U fminf@GLIBC_2.4
         U __libc_start_main@GLIBC_2.4
         U memcpy@GLIBC_2.4
         U memmove@GLIBC_2.4
         U memset@GLIBC_2.4
         U puts@GLIBC_2.4
         U round@GLIBC_2.4
         U strcmp@GLIBC_2.4
         U strlen@GLIBC_2.4

strings

查看GLIBCXX版本:

strings /usr/lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
yoyo@yoyo:~/Documents/infer/build$ strings infer | grep GLIBC_
GLIBC_2.4
round@GLIBC_2.4
fmax@GLIBC_2.4
clock@GLIBC_2.4
exit@GLIBC_2.4
fmaxf@GLIBC_2.4
puts@GLIBC_2.4
memset@GLIBC_2.4
abort@GLIBC_2.4
memmove@GLIBC_2.4
fminf@GLIBC_2.4
memcpy@GLIBC_2.4
strlen@GLIBC_2.4
strcmp@GLIBC_2.4
__libc_start_main@GLIBC_2.4

readelf 指令

readelf 是一个用于查看 ELF(Executable and Linkable Format)文件信息的命令行工具,广泛用于分析可执行文件、动态库(.so 文件)和目标文件(.o 文件)。

查看二进制程序的链接库:

readelf -d xxx.so
readelf -h

使用 -h--file-header 选项可以显示 ELF 文件的头部信息,包括文件类型、架构、入口点等。

readelf -h <elf-file>

输出示例:

yoyo@yoyo:~/share/driver/opencv_test$ readelf -h test/build/opencv_test 
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - GNU
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x18709
  Start of program headers:          52 (bytes into file)
  Start of section headers:          137480 (bytes into file)
  Flags:                             0x5000400, Version5 EABI, hard-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         41
  Section header string table index: 40
readelf -d

功能:使用 -d--dynamic 选项可以显示动态链接信息,这些信息描述了文件的动态依赖关系(如依赖的共享库)。

readelf -d <elf-file>

输出示例:

yoyo@yoyo:~/share/driver/opencv_test$ readelf -d test/build/opencv_test 

Dynamic section at offset 0xfe38 contains 52 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libz.so.1]
 0x00000001 (NEEDED)                     Shared library: [libsz.so.2]
 0x00000001 (NEEDED)                     Shared library: [libhdf5.so.310]
 0x00000001 (NEEDED)                     Shared library: [libx264.so.164]
 0x00000001 (NEEDED)                     Shared library: [libx265.so.151]
 0x00000001 (NEEDED)                     Shared library: [libavcodec.so.58]
 0x00000001 (NEEDED)                     Shared library: [libavdevice.so.58]
 0x00000001 (NEEDED)                     Shared library: [libavfilter.so.7]
 0x00000001 (NEEDED)                     Shared library: [libavformat.so.58]
 0x00000001 (NEEDED)                     Shared library: [libavresample.so.4]
 0x00000001 (NEEDED)                     Shared library: [libavutil.so.56]
 0x00000001 (NEEDED)                     Shared library: [libpostproc.so.55]
 0x00000001 (NEEDED)                     Shared library: [libswresample.so.3]
 0x00000001 (NEEDED)                     Shared library: [libswscale.so.5]
 0x00000001 (NEEDED)                     Shared library: [libopencv_world.so.4.5]
 0x00000001 (NEEDED)                     Shared library: [libopencv_img_hash.so.4.5]
 0x00000001 (NEEDED)                     Shared library: [libmi_ipu.so]
 0x00000001 (NEEDED)                     Shared library: [libmi_common.so]
 0x00000001 (NEEDED)                     Shared library: [libmi_sys.so]
 0x00000001 (NEEDED)                     Shared library: [libcam_os_wrapper.so]
 0x00000001 (NEEDED)                     Shared library: [libcam_fs_wrapper.so]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x0000000f (RPATH)                      Library rpath: [$ORIGIN/../../third_party/zlib/lib:$ORIGIN/../../third_party/szlib/lib:$ORIGIN/../../third_party/hdf5/lib:$ORIGIN/../../third_party/x264/lib:$ORIGIN/../../third_party/x265/lib:$ORIGIN/../../third_party/ffmpeg/lib:$ORIGIN/../../third_party/arm_opencv/lib:$ORIGIN/../../build:/home/yoyo/share/driver/opencv_test/third_party/arm_opencv/lib]
 0x0000000c (INIT)                       0x18228
 0x0000000d (FINI)                       0x1d5b8
 0x00000019 (INIT_ARRAY)                 0x2fd70
 0x0000001b (INIT_ARRAYSZ)               8 (bytes)
 0x0000001a (FINI_ARRAY)                 0x2fd78
 0x0000001c (FINI_ARRAYSZ)               4 (bytes)
 0x00000004 (HASH)                       0x101b4
 0x6ffffef5 (GNU_HASH)                   0x10bcc
 0x00000005 (STRTAB)                     0x12ea8
 0x00000006 (SYMTAB)                     0x116d8
 0x0000000a (STRSZ)                      19467 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000015 (DEBUG)                      0x0
 0x00000003 (PLTGOT)                     0x30000
 0x00000002 (PLTRELSZ)                   808 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x17f00
 0x00000011 (REL)                        0x17ea0
 0x00000012 (RELSZ)                      96 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x6ffffffe (VERNEED)                    0x17db0
 0x6fffffff (VERNEEDNUM)                 4
 0x6ffffff0 (VERSYM)                     0x17ab4
 0x00000000 (NULL)                       0x0

ifconfig 指令

# 查看所有网卡
ifconfig -a

# 启用eth0网卡
ifconfig eth0 up

# 设置IP
ifconfig eth0 192.168.137.30 netmask 255.255.255.0

ldconfig 指令

pkg-config的用法及库搜索路径设置

ldconfig命令 - Linux命令大全 | linux教程

简单的说,ldconfig 的作用就是将 /etc/ld.so.conf 列出的库文件路径,缓存到 /etc/ld.so.cache 以供使用。/etc/ld.so.cache 是一个非文本的数据文件,不能直接编辑,它是根据 /etc/ld.so.conf 文件中设置的搜索路径,由 sudo /sbin/ldconfig 命令将这些搜索路径下的共享库文件集中在一起而生成的。因此,当安装完一些库文件(例如刚安装好glib库),或者在 /etc/ld.so.conf 文件中新增搜索路径后,还必须运行 sudo /sbin/ldconfig 命令 ,使所有的库文件路径都被缓存到 ld.so.cache 。如果没做,即使库文件明明在 /usr/lib 路径下,也不会被使用,这将导致在编译过程中出现"缺少xxx库"的错误。

# 修改 ld.so.cache 文件
vi /etc/ld.so.conf

# 更新动态库链接
sudo /sbin/ldcofnig
ldconfig -p | grep boost_python

示例:为了编译时能找到ffmpeg的动态库,需要设置 ldconfig。

# 创建文件 `ffmpeg.conf` 文件
sudo vi /etc/ld.so.conf.d/ffmpeg.conf

# 添加以下内容
/home/yoyo/360Downloads/ffmpeg-4.3.8/ffmpeg_build/lib

# 使生效
sudo ldconfig

pkg-config 指令

pkg-config 官方文档:https://linux.die/man/1/pkg-config

pkg-config笔记

pkg-config的一些用法

引言

大家应该都知道用第三方库,就少不了要使用到第三方库的头文件库文件。我们在编译、链接的时候,必须要指定这些头文件和库文件的位置。对于一个比较大的第三方库,其头文件和库文件的数量是比较多的。如果我们一个个手动地写,那将是相当麻烦的。所以,pkg-config 就应运而生了。pkg-config 能够把这些头文件和库文件的位置指出来,给编译器使用。

概述

【已解决】opencv 交叉编译 ffmpeg选项始终为NO

pkg-config 是一个用于管理编译时和运行时依赖关系的工具,它提供了一个标准的接口来查询所需库的相关信息。当安装一个库时,通常会将库的元数据信息(如库路径、版本号、依赖关系等)保存在对应的 .pc 文件中,并将该文件安装到系统的 pkg-config 目录中。pkg-config 目录是一个包含所有项目所需的 .pc 文件的目录。

在编译和安装源代码时,常常会使用 pkg-config 工具来帮助 CMake 在构建过程中找到所需的库和头文件路径。在 CMake 中,可以使用 find_package 命令来查找并配置依赖库的设置。当传递库的名称给 find_package ,CMake 将通过 pkg-config 查询相应的库信息,并将结果存储在变量中,例如:

find_package(OpenCV REQUIRED)

上述代码中,find_package(OpenCV REQUIRED) 将在 pkg-config 目录中查找名为 opencv.pc 的文件,并从中提取出 OpenCV 库的信息,包括库的路径、版本号和所需的其他依赖关系。然后,CMake 将使用这些信息来设置 OpenCV 库的配置,以便在构建过程中可以找到和链接 OpenCV。

需要注意的是,并非所有的库都使用 pkg-config 进行管理和配置。有些库可能使用其他方式来提供编译和运行时的元数据信息,例如 CMake 配置文件或环境变量。因此,在使用特定库时,应查阅该库的文档或官方指南,以了解正确的配置方法。

xxx.pc 文件

首先要明确一点,因为 pkg-config 也只是一个命令,所以不是你安装了一个第三方的库,pkg-config 就能知道第三方库的头文件和库文件所在的位置。pkg-config 命令是通过查询XXX.pc 文件而知道这些的。我们所需要做的是,写一个属于自己的库的 .pc 文件。

opencv.pc 为例:

cz@ubuntu:/media/sda3/pycharm-2024.3.1.1/bin$ cat /usr/local/opencv-4.10.0/lib/pkgconfig/opencv4.pc 
# Package Information for pkg-config

prefix=/usr/local/opencv-4.10.0
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv4

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.10.0
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_signal -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}

配置环境变量

pkg-config 是如何找到所需的 .pc 文件呢?这就需要用到一个环境变量 PKG_CONFIG_PATH 。该环境变量写明了 .pc 文件的路径,pkg-config 命令会读取这个环境变量的内容,这样就知道了 .pc 文件。

修改 /etc/bash.bashrc 文件:

sudo vi /etc/bash.bashrc

# 末尾添加
export PKG_CONFIG_PATH=/usr/local/opencv-4.10.0/lib/pkgconfig:$PKG_CONFIG_PATH

pkg-config 指令

# 查看软件包版本
pkg-config --modversion <package_name>

# 查看头文件的路径
pkg-config --cflags <package_name>

# 查看库文件的路径
pkg-config --libs <package_name>

# 查看pkgconfig路径
which pkgconfig
whereis pkgconfig

# 查看软件包
pkg-config --list-all

# 查看指定的软件包
pkg-config --list-all | grep <package_name>
yoyo@yoyo:~/Downloads/caffe$ pkg-config --modversion protobuf
3.6.1
yoyo@yoyo:~/Downloads/caffe$ pkg-config --cflags protobuf
-pthread
yoyo@yoyo:~/Downloads/caffe$ pkg-config --libs protobuf
-lprotobuf -pthread
yoyo@yoyo:~/share/driver/test_video$ pkg-config --cflags opencv4
-I/usr/local/opencv-4.10.0/include/opencv4
yoyo@yoyo:~/share/driver/test_video$ pkg-config --libs opencv4
-L/usr/local/opencv-4.10.0/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_signal -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
yoyo@yoyo:~/360Downloads/ffmpeg-4.3.8$ pkg-config --modversion x265
2.7
yoyo@yoyo:~/360Downloads/ffmpeg-4.3.8$ pkg-config --list-all | grep x265
x265                           x265 - H.265/HEVC video encoder
yoyo@yoyo:~/360Downloads/ffmpeg-4.3.8$ pkg-config --cflags x265
-I/home/cz/360Downloads/x265_2.7/x265build/include 
yoyo@yoyo:~/360Downloads/ffmpeg-4.3.8$ pkg-config --libs x265
-L/home/cz/360Downloads/x265_2.7/x265build/lib -lx265

htpasswd指令

htpasswd命令 – 管理用户基本认证文件 – Linux命令大全(手册)

ls指令

Shell 脚本:按日期排序和查找文件 / 删除指定时间范围内的文件-CSDN博客

fallocate分配空间

fallocate命令用于快速为文件分配空间,而不需要实际写入任何数据。这一特性使得它在需要快速创建大文件的场景下非常有用,例如在系统测试或磁盘压力测试的情况下。

# 随机生成2GB的文件
fallocate -l 2G 2GBfile.txt

参数解释:

  • -l--length:预分配的长度。
  • -z, --zero-range:在预分配的空间内填充零值。

fallocate指令与dd指令的区别

虽然dd命令也可以用来创建文件,但fallocate的速度通常更快,因为它不实际写入任何数据。以下是两者的比较:

  • fallocate:快速分配空间,不写入数据。
  • dd:按指定大小写入数据,速度较慢。

dmesg指令

dmesg | grep ax88179     # 查看驱动加载日志