1、学会使用Linux
1.1 掌握命令行环境
? 要学会Linux编程必须先学会使用Linux,也就是要在Linux命令令行环境下生存 ? 给主机安装操作系统(例如Ubuntu18.04或其它版本) ? 给一台Linux能熟练使用服务器的服务器 ? 或者在Win十下,熟练使用WSL2 ? 安装WSL2 ? 基于WSL2环境下安装ubuntu 16.04,或ubuntu 18.04 ? 基于WSL2 ubuntu,搭建应用程序的交叉编译环境 ? 什么是熟练使用?原来是在Windows上干啥,在Linux上也能干: ? 新建文件、查看文件、编辑文件、保存文件、复制、移动、删除、包装、减压…… ? 下载软件,安装软件,不仅要掌握apt-get,yum软件包管理工具,如源代码编译和安装 ? 常用命令:chmod, chown, passwd, cat, more, cd , ps , top, dmesg等等 ? 插入U盘,如何挂载U盘,操作U盘下的文件 ? vim基本操作:编辑模式、写入、保存、退出、光标移动…… ? docker可以使用基本操作docker处理一些日常工作,如编程 ? …… ? 另外要熟悉Linux下面的文件系统,每个目录是什么,目录下的文件是什么:
? /etc ? /proc ? /sys ? /usr ? /var ? /sbin ? /lib ? /dev ? ……
? 推荐鸟哥Linux私房菜-基础文章,记得是基础文章,记得安装Linux系统自行操作 ? 还有一个是服务器文章,既然要学Linux编程开发不需要看服务器架设
2、Linux开发应用程序
2.1 Linux C/C 开发应用程序
2.1.1 要点
? Linux的API是遵循POSIX标准,可以搜索学习什么是什么POSIX。 ? Linux下面的文件操作非常重要,你应该知道Linux下一个想法叫做一切文件,可见文件读写有多重要 ? I/O模型,五大I/O模型、阻塞、非阻塞、重用、信号驱动和异步I/O,连接环环扣丝的概念和操作应仔细考虑 ? 最重要的是复用,即select,poll和epoll,了解他们的适用范围、优缺点 ? 过程和线程,包括过程和线程的概念和区别、过程和线程的建立、同步、通信、相互排斥等 ? 网络编程,就是socket编程学不好等于什么都没学。 ? 还得知道TCP/IP协议,socket,bind,listen,accept…… ? 熟悉各种常见的服务器模型、流程池线程池模式、多流程模式、重用模式,最重要的是重用模式,这部分只能写服务器,直接测试Telnet ? 这个东西不属于数据库Linux,但是你必须知道,否则你什么都做不了。《MySQL必知必会》 ? Makefile注重学习CMake ? 掌握静态库、动态库等基本概念
2.1.2 推荐的书籍
? C语言:推荐《c语言程序设计(丹尼斯.里奇)、《Linux C编程一站式学习 ? C :推荐《Essential C 》、《C Primer》、《Effective C 》、《C 并发编程实战等 ? 《Unix高级环境编程(W.Richard.Stevens) ? 《Unix网络编程》 两部,(W.Richard.Stevens) ? 《Unix/Linux编程实践教程,(Bruce Molay) ? 《Linux网络编程》 宋劲彬 ? 《Linux高级程序设计 华清远见 ? 《MySQL必知必会》 ? 数据库系统概念 ? 《大话数据结构》 ? 算法导论
2.2 Linux Shell脚本开发
2.2.1 要点
? Linux尽可能好的基础。Shell编程实际上是将军Linux组装和配合命令shell script一些逻辑实现了更复杂的功能。所以要写出有力的东西shell script,Linux基础太重要了。基础命令如ls、cd、pwd、echo、ps不用说,用户、组、文件权限(755)、设备(/dev/null)、管道命令(|)、隐藏文件权限(4755))、熟悉这些服务。 ? Linux如果基础不是很好,建议鸟哥Linux私房菜 基础篇,前十章要看完,再动手操作,整本书自然最好吃完。 ? Shell Script熟练掌握基本语法。Linux私房菜第十章是关于私房菜的Shell基础,看完里面提到的东西,敲代码,做完练习,基础就够了。 ? 灵活运用正则表达式。grep、sed、awk这些命令太重要了,配合正则表达式可以大大提高shell脚本质量。 ? 最重要的是多写多练。既然要用,shell script,这是一个很好的锻炼shell编程机会。 ? 有很多问题Google、百度,多在命令行下面试。 ? 平时在工作过程中发现一些经常做的事情,重复性很高,比如每天都要做pull可以考虑写代码shell script自动化。
2.2.2 推荐的书籍
? 想深入研究shell script如果你能读这本书:《Linux Command Line and Shell Scripting Bible》,中文名称叫: 《Linux命令行与shell脚本编程全集。
2.3 Linux C/C 开发环境
? 基于Ubuntu 18.04(或以上版本)的C/C 开发环境 ? vscode ? gcc,gdb,cmake,ninja ? 基于Win10 WSL2 vscode的C/C 开发环境 ? 基于Win10 Vscode ssh remote Linux服务器的C/C 开发环境
2.4 进阶学习
? 看看Linux核源码,理解Linux内核进线程调度等原理 ? 了解计算机网络、操作系统原理等。 ? 在学习过程中,要不断积累和理解最新的东西,至少要知道分布式、大数据、云计算、机器学习、计算机视觉等概念,JIT等等,形成知识链 ? 学一学python,用python完成一些shell实现脚本的功能
3、Linux程序调试技巧
在Linux用户空间调试工具主要包括系统工具和专用调试工具:‘print’ 打印句子,这是新手最常用的;查询 (/proc, /sys 等)系统的虚拟文件查看,该方法有局限性;跟踪 (strace/ltrace)该工具使用广泛,值得提倡;Valgrind (memwatch)内存排除工具,独特的内存排除是内存排错的法宝;GDB著名的程序调试工具,这是一个全能的工具,没有完成,只有你不知道。
3.1 ‘print’ 打印日志
这是调试问题的基本方法。 插入我们在程序中怀疑的地方printf(syslog,或者其他打印日志手段)句子来理解程序运行过程控制流和变量值的变化。 这是最简单的技术, 它的缺点。 编辑程序需要添加添加print句子,必须重新编译,重新操作才能获得输出。如果需要调试的程序比较大,那将是一种耗时费力的方法。
3.2 查询系统信息
在某些情况下,我们需要找出运行在内核中的过程状态和内存映射。为了获取这些信息,我们不需要在内核中插入任何代码。 相反,可以用 /proc 文件系统。proc伪文件系统保留系统启动运行时收集的信息 (cpu信息, 内存容量等)。 ls -l /proc通过对 系统中运行的每个过程在/proc文件系统中有一个进程id命名项。每个过程的细节可以在过程中id对应的目录下的文件中获得。也可以’ls /proc/pid’的输出 解释/proc文件系统中的所有条目都超出了本文的范围。一些有用的列表如下:
? /proc/buddyinfo 每个内存区的每一个order有多少块可用,与内存碎片有关 ? /proc/cmdline 启动时传递kernel的参数信息 ? /proc/cpuinfo cpu的信息 ? /proc/crypto 内核使用的所有已安装的加密密码及细节 ? /proc/devices 加载设备并分类 ? /proc/execdomains Linux目前支持内核execution domains ? /proc/filesystems 目前支持内核的文件系统类型 ? /proc/interrupts 每个架构IRQ中断数 ? /proc/iomem 目前系统内存中每个物理设备的映射 ? /proc/ioports 用于设备输入输出的注册端口范围 ? /proc/kmsg 通过/sbin/klogd或/bin/dmesg来处理 ? /proc/loadavg 根据过去一段时间CPU和IO负载状态和负载状态uptime命令有关 ? /proc/locks 内核
锁定的文件列表 ? /proc/meminfo RAM使用的相关信息 ? /poc/misc 其他的主要设备(设备号为10)上注册的驱动 • /proc/modules 所有加载到内核的模块列表 • /proc/mounts 系统中使用的所有挂载 • /proc/partitions 分区中的块分配信息 • /proc/slabinfo 系统中所有活动的 slab 缓存信息 • /proc/stat 所有的CPU活动信息 • /proc/uptime 系统已经运行了多久 • /proc/swaps 交换空间的使用情况 • /proc/version Linux内核版本和gcc版本 • /proc/bus 系统总线(Bus)信息,例如pci/usb等 • /proc/driver 驱动信息 • /proc/fs 文件系统信息 • /proc/irq 中断请求设备信息 • /proc/net 网卡设备信息 • /proc/scsi scsi设备信息 • /proc/tty tty设备信息 • /proc/net/dev 显示网络适配器及统计信息 • /proc/vmstat 虚拟内存统计信息 • /proc/vmcore 内核panic时的内存映像 • /proc/diskstats 取得磁盘信息 • /proc/sched_debug kernel调度器的统计信息 • /proc/zoneinfo 显示内存空间的统计信息,对分析虚拟内存行为很有用
以下是/proc目录中进程N的信息:
• /proc/N pid为N的进程信息
• /proc/N/cmdline 进程启动命令
• /proc/N/cwd 链接到进程当前工作目录
• /proc/N/environ 进程环境变量列表
• /proc/N/exe 链接到进程的执行命令文件
• /proc/N/fd 包含进程相关的所有的文件描述符
• /proc/N/maps 与进程相关的内存映射信息
• /proc/N/mem 指代进程持有的内存,不可读
• /proc/N/root 链接到进程的根目录
• /proc/N/stat 进程的状态
• /proc/N/statm 进程使用的内存的状态
• /proc/N/status 进程状态信息,比stat/statm更具可读性
• /proc/self 链接到当前正在运行的进程
一个常用的例子是通过/proc/tty/drivers下的文件接口,查看串口的工作状态:
[root@buildroot(V8133L) ~]# cat /proc/tty/driver/*
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x54E00000 irq:7 tx:7011 rx:207 oe:1 RTS|DTR
1: uart:16550A mmio:0x57100000 irq:13 tx:2800 rx:38006 RTS|DTR
2: uart:16550A mmio:0x56B00000 irq:12 tx:1442 rx:2275 RTS|DTR
3: uart:16550A mmio:0x55100000 irq:9 tx:103361 rx:102977 RTS|DTR
4: uart:16550A mmio:0x55000000 irq:8 tx:102977 rx:103343 RTS|DTR
5: uart:16550A mmio:0x55200000 irq:10 tx:103791 rx:102844 RTS|CTS|DTR
6: uart:16550A mmio:0x56A00000 irq:11 tx:103481 rx:103791 RTS|DTR
usbserinfo:1.0 driver:2.0
3.3 跟踪
strace的和ltrace是两个在Linux中用来追踪程序的执行细节的跟踪工具。
3.3.1 strace
strace拦截和记录系统调用及其接收的信号。对于用户,它显示了系统调用、传递给它们的参数和返回值。strace的可以附着到已在运行的进程或一个新的进程。它作为一个针对开发者和系统管理员的诊断、调试工具是很有用的。它也可以用来当做一个通过跟踪不同的程序调用来了解系统的工具。这个工具的好处是不需要源代码,程序也不需要重新编译。
3.3.2 ltrace
ltrace跟踪和记录一个进程的动态(运行时)库的调用及其收到的信号。它也可以跟踪一个进程所作的系统调用。它的用法类似与strace。
3.4 Valgrind
Valgrind是一套调试和分析工具。它的一个被广泛使用的默认工具——‘Memcheck’——可以拦截malloc(),new(),free()和delete()调用。换句话说,它在检测下面这些问题非常有用: • 内存泄露 • 重释放 • 访问越界 • 使用未初始化的内存 • 使用已经被释放的内存等。 它直接通过可执行文件运行。 • Valgrind也有一些缺点,因为它增加了内存占用,会减慢你的程序。它有时会造成误报和漏报。它不能检测出静态分配的数组的访问越界问题。 • Valgrind目前对ARM平台的支持并不好
3.5 gdb/gdbserver
GDB是来自自由软件基金会的调试器。它对定位和修复代码中的问题很有帮助。当被调试的程序运行时,它给用户控制权去执行各种动作, 比如: • 启动程序 • 停在指定位置 • 停在指定的条件 • 检查所需信息 • 改变程序中的数据 等。 也可以将一个崩溃的程序coredump附着到GDB并分析故障的原因。 还可通过gdb+gdbserver来调试,gdbserver在目标系统中运行,gdb则在宿主机上运行。
3.6 ipcs 查询进程间通信状态
ipcs是Linux下显示进程间通信设施状态的工具。可以显示消息队列、共享内存和信号量的信息。对于程序员非常有用,普通的系统管理员一般用不到此指令。
$ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 229376 weber 600 1
------ Message Queues --------
key msqid owner perms used-bytes messages
$ipcs -m 查看系统使用的IPC共享内存资源
$ipcs -q 查看系统使用的IPC队列资源
$ipcs -s 查看系统使用的IPC信号量资源
3.7 lsof 一切皆文件
lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。 lsof打开的文件可以是:
- 普通文件
- 目录
- 网络文件系统的文件
- 字符或设备文件
- (函数)共享库
- 管道,命名管道
- 符号链接
- 网络文件(例如:NFS file、网络socket,unix域名socket)
- 还有其它类型的文件,等等
$lsof| more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 150352 1310795 /sbin/init
init 1 root mem REG 253,0 65928 5505054 /lib64/libnss_files-2.12.so
init 1 root mem REG 253,0 1918016 5521405 /lib64/libc-2.12.so
init 1 root mem REG 253,0 93224 5521440 /lib64/libgcc_s-4.4.6-20120305.so.1
init 1 root mem REG 253,0 47064 5521407 /lib64/librt-2.12.so
init 1 root mem REG 253,0 145720 5521406 /lib64/libpthread-2.12.so
...
3.8 ps 进程查看器
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
3.9 top linux下的任务管理器
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
$top
top - 09:14:56 up 264 days, 20:56, 1 user, load average: 0.02, 0.04, 0.00
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st
Mem: 377672k total, 322332k used, 55340k free, 32592k buffers
Swap: 397308k total, 67192k used, 330116k free, 71900k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 2856 656 388 S 0.0 0.2 0:49.40 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 7:15.20 ksoftirqd/0
4 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
• 第一行 • 09:14:56 : 系统当前时间 • 264 days, 20:56 : 系统开机到现在经过了多少时间 • 1 users : 当前2用户在线 • load average: 0.02, 0.04, 0.00: 系统1分钟、5分钟、15分钟的CPU负载信息 • 第二行 • Tasks:任务; • 87 total:很好理解,就是当前有87个任务,也就是87个进程。 • 1 running:1个进程正在运行 • 86 sleeping:86个进程睡眠 • 0 stopped:停止的进程数 • 0 zombie:僵死的进程数 • 第三行 • Cpu(s):表示这一行显示CPU总体信息 • 0.0%us:用户态进程占用CPU时间百分比,不包含renice值为负的任务占用的CPU的时间。 • 0.7%sy:内核占用CPU时间百分比 • 0.0%ni:改变过优先级的进程占用CPU的百分比 • 99.3%id:空闲CPU时间百分比 • 0.0%wa:等待I/O的CPU时间百分比 • 0.0%hi:CPU硬中断时间百分比 • 0.0%si:CPU软中断时间百分比 • 注:这里显示数据是所有cpu的平均值,如果想看每一个cpu的处理情况,按1即可;折叠,再次按1; • 第四行 • Men:内存的意思 • 8175320kk total:物理内存总量 • 8058868k used:使用的物理内存量 • 116452k free:空闲的物理内存量 • 283084k buffers:用作内核缓存的物理内存量 • 第五行 • Swap:交换空间 • 6881272k total:交换区总量 • 4010444k used:使用的交换区量 • 2870828k free:空闲的交换区量 • 4336992k cached:缓冲交换区总量 • 进程信息 • PID:进程的ID • USER:进程所有者 • PR:进程的优先级别,越小越优先被执行 • NInice:值 • VIRT:进程占用的虚拟内存 • RES:进程占用的物理内存 • SHR:进程使用的共享内存 • S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数 • %CPU:进程占用CPU的使用率 • %MEM:进程使用的物理内存和总内存的百分比 • TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。 • COMMAND:进程启动命令名称 3.10、 free 查询可用内存 free工具用来查看系统可用内存: [root@buildroot(V8133L) ~]# free total used free shared buff/cache available Mem: 511724 24548 431356 72 55820 481412 Swap: 0 0
第一列 Mem 内存的使用信息 Swap 交换空间的使用信息 第一行 total 系统总的可用物理内存大小 used 已被使用的物理内存大小 free 还有多少物理内存可用 shared 被共享使用的物理内存大小 buff/cache 被 buffer 和 cache 使用的物理内存大小 available 还可以被 应用程序 使用的物理内存大小 free 与 available 的区别 free 是真正尚未被使用的物理内存数量。 available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法) Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。 Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么cached memory比较大,而free比较小的原因。
4、其他常用的命令和工具
4.1 stty
stty命令用于显示和修改终端行设置(change and print terminal line settings)。 stty常用来查看或者修改串口的设置。 比如查看串口/dev/ttyS3的设置:
[root@buildroot(V8133L) ~]# stty -a -F /dev/ttyS3
speed 9600 baud;stty: /dev/ttyS3
line = 0;
intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>;
stop = <undef>; susp = <undef>; rprnt = <undef>; werase = <undef>;
lnext = <undef>; flush = <undef>; min = 255; time = 4;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon
-ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop
-echoprt -echoctl -echoke -flusho -extproc
修改串口/dev/ttyS3的波特率为9600
stty -F /dev/ttyS3 9600
4.2 dmesg
Linux dmesg(英文全称:display message)命令用于显示开机信息。 kernel 会将开机信息存储在 ring buffer 中。您若是开机时来不及查看信息,可利用 dmesg 来查看。
[root@buildroot(V8133L) ~]# dmesg | more
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.14.155-gac856fcaf (root@lme-server1) (gcc version 7.4.1 20181213 [linaro-7.4-2019.02 revision 56ec6f6b99cc167ff0c2f8e1a2eed33b1edc85d4] (Linaro GCC 7.4-2019.02)) #V1.0.0 20220119
[ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
[ 0.000000] CPU: div instructions available: patching division code
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: leo
[ 0.000000] earlycon: uart8250 at MMIO32 0x54e00000 (options '')
[ 0.000000] bootconsole [uart8250] enabled
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] On node 0 totalpages: 131072
[ 0.000000] free_area_init_node: node 0, pgdat c0779e10, node_mem_map dfbf0000
[ 0.000000] Normal zone: 1024 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 131072 pages, LIFO batch:31
[ 0.000000] CPU: All CPU(s) started in SVC mode.
[ 0.000000] platform_i2s_init: pll3 locked
[ 0.000000] platform_lcdc_init: pll5 locked
[ 0.000000] platform_sdhci_init: pll7 locked
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
--More--
4.3 netstat
显示各种网络相关信息,如网络连接(无参数),路由表(-r)等网络信息。
[root@buildroot(V8133L) ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ftp 0.0.0.0:* LISTEN
netstat: /proc/net/tcp6: No such file or directory
udp 0 0 0.0.0.0:4060 0.0.0.0:*
udp 0 0 0.0.0.0:4061 0.0.0.0:*
udp 0 0 0.0.0.0:4066 0.0.0.0:*
udp 0 0 0.0.0.0:4067 0.0.0.0:*
udp 0 0 0.0.0.0:4069 0.0.0.0:*
udp 0 0 0.0.0.0:4070 0.0.0.0:*
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 17 [ ] DGRAM 3728 /dev/log
unix 2 [ ] DGRAM 3962
unix 2 [ ] DGRAM 3903
unix 2 [ ] DGRAM 4180
unix 2 [ ] DGRAM 4183
unix 2 [ ] DGRAM 4207
unix 2 [ ] DGRAM 4019
unix 2 [ ] DGRAM 3997
unix 2 [ ] DGRAM 4102
unix 2 [ ] DGRAM 4101
unix 2 [ ] DGRAM 3967
unix 2 [ ] DGRAM 3970
unix 2 [ ] DGRAM 3971
unix 2 [ ] DGRAM 3956
unix 2 [ ] DGRAM 3963
unix 2 [ ] DGRAM 5125
[root@buildroot(V8133L) ~]#
4.4 route命令
Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table)。 查看路由:
root@OpenWrt:/# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
default 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0
增加一条路由:
route add -net $HOSTIP netmask 255.255.255.0 gw $GWIP ppp0
5、参考资料
- Linux基础,https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/index.html
- Linux工具进阶,https://linuxtools-rst.readthedocs.io/zh_CN/latest/advance/index.html
- 鸟哥的Linux私房菜:基础学习篇,http://cn.linux.vbird.org/linux_basic/linux_basic.php