目录
上文请见:Linux系列(一):有关Shell及基本命令-CSDN博客
宝子们👋,欢迎来到 Linux 的奇妙世界!上次我们初步了解了 Linux 的一些基础知识,今天可更精彩啦🎉!我们要深入挖掘 Linux 系统管理的精髓,像网络配置、进程管理这些实用技能,还有 C 语言在 Linux 系统中的应用奥秘,都给大家安排得明明白白~
觉得内容有用的宝子们,别忘了动动小手点个赞👍,让我知道你们的喜欢呀!要是想持续收获 Linux 干货,就赶紧点个关注吧😘,咱们一起在技术的道路上越走越远~
4.4网络管理
4.4.1网络基本配置
在Linux中使用以下三种方式进行配置网络信息:
-
使用命令配置
-
直接修改网络配置文件
-
使用图形工具配置网络参数
注意:在终端命令模式下,可是使用ifconfig来配置网络接口中的ip地址、网络掩码、广播地址等信息,然后使用route工具可以配置网络的默认网关信息
-
ifconfig命令:
-
ifconfig 【网络接口设备名】
如果没有【】中的内容就是返回所有,包括回环网络接口的信息。
例如:查看网络接口eth0的TCP/IP参数信息
ifconfig eth0
-
配置网络信息
ifconfig 网络接口设备名 IP 地址 [netmask 网络掩码] [broadcast 广播地址]
其中,netmask 部分和 broadcast 部分可以任选其一,因为从网络掩码和广播地址可以互相推算。 例 39 给当前主机的 eth0 网络接口配置网络参数,其网络 IP 地址为 192.168.0.138,子网掩码为 255.255.255.0。
[root@myhost root]#ifconfig eth0 192.168.0.138 netmask 255.255.255.0
-
网络接口的启用和禁用
ifconfig 网络接口设备名 【up|down】 up表示的是启用 down表示的是禁用
-
-
route命令:
当配置了网络接口的相关信息后,主机就可以在局域网中与其他主机进行通信,但不能访问外网的主机。这个时候就需要route工具来配置网络的路由记录和默认网关
route可以查看当前的路由信息,也可以设置网络的默认路由信息。
-
查看路由信息:
route
-
添加、删除默认网关:
route add|del default gw 网关地址
因为当处于一个公司(局域网)内时,当需要与外部通信,外界信息通常都是通过默认网关来传递进入局域网的。让后再由,网关负责数据分组的路由选择
-
添加、删除路由记录:
使用 route 命令添加或删除一条到达目标网络的路由记录,其格式如下:
其中,参数 add 表示向路由表中添加一条路由信息,del 表示删除路由表中的一条路由信息。gw 参数和 dev 参数任选其一。gw 参数用于指定网关地址,dev 参数用于指定到达目标地址时数据分组投递的网络接口。
route add|del -net 网络地址 netmask 网络掩码 [gw 网关地址] [dev 网络接口]
其中,参数 add 表示向路由表中添加一条路由信息,del 表示删除路由表中的一条路由信息。gw 参数和 dev 参数任选其一。gw 参数用于指定网关地址,dev 参数用于指定到达目标地址时数据分组投递的网络接口。
-
-
域名配置:
注意:ip地址不好记,所以我们一般都是使用域名来访问网络当中的主机,所以就需要使用DNS来转换,DNS是由很多域名服务器组成的,域名配置的作用就是:指明本机使用的域名是由哪个,域名服务器来转化IP地址的。
在Linux系统中,DNS配置信息保存在:
/etc/resolv.conf文件中 使用以下命令查看: cat /etc/resolv.conf
通过修改/etc/resolv.conf文件,添加和删除DNS信息
-
4.4.2网络状态命令
-
ping命令
-
traceroute/tracepath命令
用于向目标主机发送数据包,没经过一个网关或路由就返回一行信息,返回的信息包括:主机名或IP地址、每次经过的网关或路由的时间。默认的数据包长度:38B,最大跳数为30次
traceroute 【选项】 主机名或IP地址
-
netstat命令
用于查看网络连接、路由表、网络接口的状态信息
netstat 【选项】
如果不知道选项含义的,就请使用命令:
man netdtat
查看
-
host命令
用于查询域名信息,包括:主机对应的IP地址、邮件服务器的信息,还可以返回指定域中所有主机名称和IP地址对应信息
host 【参数】 域名或主机名
-
nslookup命令
该命令除了可以进行域名查询外,还可以诊断当前DNS服务器是否正常。
使用exit命令退出nslookup命令
-
mtr命令
结合了ping、traceroute、nslookup的相关特性。
4.3进程管理
4.3.1什么是进程
进程就是记录程序在运行过程中的状态及资源使用情况。
进程可以并发执行,同一个程序可以对应不同的进程。每一个进程通过,唯一不同的,进程ID,进行区分。每一个进程都有唯一的一个数据结构记录进程信息——进程控制块(PCB)
4.3.2进程管理命令
-
启动进程
在 Shell 中输入一个可执行程序的文件名并按回车键后,Linux 把这个文件中的代码加载到内存中开始执行,就启动这个程序,系统内核会为这个程序创建一个或者多个相关的进程,以完成程序的功能。 程序启动可以分为前台或者后台启动。 例如: [zll@localhost ~]这样在前台启动了这个程序,通过按键将在后台执行。也可以用以下的命令让直接在后台运行:vi zz& 即在命令行后加符号 “&”。
-
改变进程优先级
优先级高的优先获取CPU
通过nice和renice命令改变优先级:
优先级值的设置和Linux发行版本有关,一般-20~19,默认为10,数值越小,优先级越高
nice命令在启动过程中指定优先级,而renice在程序执行中改变优先级。
-
进程的挂起与激活
进程状态:就绪态、运行态、等待态。正在运行的进程在被挂起时就是运行态变成等待态,然后被挂起的进程激活后又会从等待态转换成就绪态,然后等着操作系统的调度获取CPU从而转换成运行态。
-
fg命令
正在运行的进程可以通过快捷键:Ctrl+Z挂起,被挂起的进程可以通过fg命令激活,返回前台运行。
fg 【进程ID】
-
bg命令
与fg命令不同的是,通过bg命令激活的挂起进程,是运行在后台的
bg 【进程ID】
注意:进程ID可以通过:ps命令查看
-
-
终止进程
两个方式:1. Ctrl+C 2. kill命令
该命令语法为:
kill [- 信号] 进程 ID
信号在内部用整数表示,终止进程的信号为 9,命令 “kill -9 1222” 的意思就是终止 ID 号为 1222的进程。信号 9 的常量标识为 SIGKILL。
信号在内部用整数表示,终止进程的信号为 9,命令 “kill -9 1234” 的意思就是终止 ID 号为 1234 的进程。信号 9 的常量标识为 SIGKILL。
4.3.3进程查看命令
-
ps命令
查看进程信息
ps 【选项】
该命令选项很丰富,可以使用man ps来查看
-
pstree命令
显示进程状态树,列出当前进程以及它们的树状结构。 语法:
pstree 【选项】 【pid|user】
该命令支持特定程序或使用者作为显示的起始
-
top命令
用处
top 命令用于实时显示系统中各个进程的资源占用状况,包括 CPU 使用率、内存使用情况、进程状态等信息 。通过该命令,系统管理员或用户可以快速了解系统的运行状态,找出占用资源较多的进程,以便进行性能优化、故障排查等操作 。
语法
top [options]
常用选项列举
-
-d 或 --delay:指定屏幕信息更新的时间间隔(单位为秒)。例如
top -d 5
,表示每隔 5 秒更新一次显示内容。 -
-b 或 --batch:以批处理模式运行 top 命令,即把 top 命令的输出结果输出到文件或其他程序中,而不是交互式地显示在终端上。常用于脚本编写等场景。比如
top -b -n 1 > top_output.txt
,表示以批处理模式运行一次 top 命令,并将结果输出到top_output.txt
文件中。 -
-n 或 --iterations:指定 top 命令的运行次数。配合
-b
选项使用较多,如top -b -n 3
,表示以批处理模式运行 top 命令 3 次 。 -
-p 或 --pid:指定要监控的进程 ID。例如
top -p 1234
,表示只监控进程 ID 为 1234 的进程的资源使用情况 。 -
-u 或 --user:指定要监控的用户的进程。如
top -u username
,表示只显示用户username
所拥有的进程信息 。 -
-c 或 --command-line:显示进程的完整命令行信息,而不仅仅是进程名。有助于更清楚地了解进程的具体执行情况 。
-
5.Linux系统C语言程序设计
5.1C语言概述
5.1.1C语言特点
-
简洁紧凑,灵活方便:C语言一共只有32关键字和9条控制语句,主要用小写字母表示。他可以像汇编语言一样对位、字节、地址进行操作,而这三者是计算机中最基本的工作单元。
-
运算符丰富:C语言包括34个运算符
-
数据结构丰富:C 的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外,C 语言具有强大的图形功能,支持多种显示器和驱动器,且计算功能、逻辑判断功能强大。
-
C 是结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言程序是以函数形式提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
-
C 语法限制不太严格、程序设计自由度大:一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而 C 语言允许程序编写者有较大的自由度。
-
C语言允许直接访问物理地址,可直接对硬件进行操作
-
C语言程序生成的代码质量高,执行效率高
-
使用范围大,可移植性好
5.1.2C语言和Linux系统
-
Linux 系统中头文件放在 /usr/include 目录下,访问路径在环境变量中定义,说明如下。
-
(1) 常用头文件,存放在 /usr/include 根目录。
-
<a.out.h>:a.out 头文件,定义了 a.out 执行文件格式和一些宏。
-
<const.h>:常数符号头文件,目前仅定义了 i 节点中 i_mode 字段的各标志位。
-
<ctype.h>:字符类型头文件,定义了一些有关字符类型判断和转换的宏。
-
<errno.h>:错误号头文件,包含系统中各种出错号(Linus 从 minix 中引进的)。
-
<fcntl.h>:文件控制头文件,用于文件及其描述符的操作控制常数符号的定义。
-
<signal.h>:信号头文件,定义信号符号常量、信号结构以及信号操作函数原型。
-
<stdio.h>:基本输入、输出函数头文件。
-
<stdarg.h>:标准参数头文件,以宏的形式定义变量参数列表。
-
<stddef.h>:标准定义头文件,定义了 NULL、offsetof (TYPE,MEMBER)。
-
<string.h>:字符串头文件,主要定义了一些有关字符串操作的嵌入函数。
-
<termios.h>:终端输入输出函数头文件,主要定义控制异步通信口的终端接口。
-
<time.h>:时间类型头文件,主要定义了 tm 结构和一些有关时间的函数原型。
-
<unistd.h>:Linux 标准头文件,定义了各种符号常数和类型,并声明了各种文件操作函数。
<utime.h>:用户时间头文件,定义了访问和修改时间结构以及 utime () 原型。 (2) 体系结构相关头文件子目录 include/asm。 这些头文件主要定义了一些与 CPU 体系结构密切相关的数据结构、宏函数和变量。
-
<asm/io.h>:I/O 头文件,以宏的嵌入汇编程序形式定义对 I/O 端口操作的函数。
-
<asm/memory.h>:内存复制头文件,含有 memcpy () 嵌入式汇编宏函数。
-
<asm/segment.h>:段操作头文件,定义了有关段寄存器操作的嵌入式汇编函数。
-
<asm/system.h>:系统头文件,定义了设置或修改描述符 / 中断门等的嵌入式汇编宏。
(3) Linux 内核专用头文件子目录 include/linux。
-
<linux/config.h>:内核配置头文件,定义键盘语言和硬盘类型(HD_TYPE)可选项。
-
<linux/fdreg.h>:软驱头文件,含有软盘控制器参数的一些定义。
-
<linux/fs.h>:文件系统头文件,定义文件表结构(file, buffer_head, m_inode 等)。
-
<linux/hdreg.h>:硬盘参数头文件,定义访问硬盘寄存器端口、状态码和分区表等信息。
-
<linux/head.h>:head 头文件,定义了段描述符的简单结构和几个选择符常量。
-
<linux/kernel.h>:内核头文件,含有一些内核常用函数的原型定义。
-
<linux/mm.h>:内存管理头文件,含有页面大小定义和一些页面释放函数原型。
-
<linux/sched.h>:调度程序头文件,定义了任务结构 task_struct、初始任务 0 的数据,以及一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。
-
<linux/sys.h>:系统调用头文件,含有 72 个系统调用 C 函数处理程序,以 “sys_”
-
<linux/tty.h>:tty 头文件,定义了有关 tty_io、串行通信方面的参数、常数。
(4) 系统专用数据结构子目录 include/sys。 <sys/stat.h>:文件状态头文件,含有文件或文件系统状态结构 stat {} 和常量。
-
<sys/times.h>:定义了进程中运行时间结构 tms 以及 times () 函数原型。
-
<sys/types.h>:类型头文件,定义了基本的系统数据类型。
-
<sys/utsname.h>:系统名称结构头文件。
-
<sys/wait.h>:等待调用头文件,定义系统调用 wait () 和 waitpid () 及相关常数符号。
-
-
-
环境变量
(1) 头文件路径。Linux 系统在编译时,会把 /usr/include、/usr/local/include 作为默认的头文件路径,如果开发人员在程序设计中需要包含的头文件不在默认的头文件路径,也不在当前项目所在路径,则可以通过设置 gcc 的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH 或 OBJC_INCLUDE_PATH 来指定头文件目录。
(2) 库文件路径。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行搜索路径设置即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用。 ① 在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。 例如: export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH ② 在 /etc/ld.so.conf.d/libc.conf 文件中添加库的搜索路径。将可能存放库文件的路径都加入到 /etc/ld.so.conf.d/libc.conf 中是比较合理的方法,这样就不用每次手动修改环境变量,将库文件的绝对路径直接写进去就可以了。 例如:
/usr/X11R6/lib /usr/local/lib /opt/lib
方法一:通过环境变量 LD_LIBRARY_PATH 设置
-
临时设置:在终端中使用
export
命令,格式为export LD_LIBRARY_PATH=<your-lib-path>:$LD_LIBRARY_PATH
。例如要添加 /opt/gtk/lib 这个路径,命令为export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
。此方法设置的路径仅在当前 Shell 会话有效,重启或打开新 Shell 后设置失效 。 -
永久设置:将上述
export
语句添加到系统文件中,如 /etc/profile(对所有用户生效) 、~/.bashrc(仅对当前用户生效,每次打开 Shell 时读取 )、~/.bash_profile(仅对当前用户生效,登录时读取 )等 。以添加到~/.bashrc 为例,使用文本编辑器打开该文件,在末尾添加export LD_LIBRARY_PATH=<your-lib-path>:$LD_LIBRARY_PATH
,修改完成后,可使用source ~/.bashrc
命令使配置立即生效 。
方法二:在 /etc/ld.so.conf 文件或相关目录中设置
-
直接修改 /etc/ld.so.conf:使用文本编辑器打开 /etc/ld.so.conf 文件,将库文件的绝对路径按一行一个的格式添加进去,例如添加 /usr/X11R6/lib 、/usr/local/lib 、/opt/lib 等路径 。但此文件修改后,还需以 root 权限运行 /sbin/ldconfig 命令更新 /etc/ld.so.cache 文件,该文件是系统用于快速定位共享库的缓存文件 。
-
在 /etc/ld.so.conf.d 目录下添加配置文件:在 /etc/ld.so.conf.d 目录下创建一个以.conf 结尾的文件(文件名可自定义 ),如 my_libs.conf ,然后在该文件中添加库文件的绝对路径,同样是一行一个 。添加完成后,也需要以 root 权限运行 /sbin/ldconfig 命令,使新添加的路径生效 。
此外,在程序连接时,还可通过
-L
参数显式指定库的搜索路径,且该方式指定的路径会被优先搜索 。
-