目录
前言:
LinuxC高级分为linux和C语言两部分:
linux:
命令:软件安装、网络配置、进程管理、文件系统相关、用户管理、压缩解压
shell脚本:变量、功能语句、结构语句、数组、函数
make: makefile
C语言:
指针函数
函数指针
函数指针数组
分文件编程
条件编译
补充:
虚拟机安装腾讯文档-在线文档https://docs.qq.com/doc/DS21xVVRuRUpFVnpu
linxu系统影响笔者可以自行安装:搜索VM安装ununtu相关词条即可找到教程。
Linux命令
1.Linux简介
1.1 Linux起源
https://mp.weixin.qq.com/s?__biz=MzkzNzAwNDAzNQ==&mid=2247483775&idx=1&sn=fc5ab0d0ac067f6605906888b40e05bb&chksm=c2975c13f5e0d505fe3074729088341552275cbfa0f95ff8a0b4627b1003493c1011077e2f89&mpshare=1&scene=23&srcid=0902yXFHTAa1jzL68pTXNIWX&sharer_sharetime=1662117806737&sharer_shareid=b33de6e893f06376514acc7d36a0a351#rd
Ubuntu是常用的linux版本
ubuntu每半年更新一次,4月和10月份更新
1.2 查看系统版本
1.查看ubuntu版本:
sudo lsb_release -a
cat /etc/issue
2.查看内核版本:
uname -r
cat /proc/version
1.3 分层结构
应用层:程序、命令
内核层:五大功能:进程管理、设备管理、内存管理、网络管理、文件系统管理
驱动:字符设备驱动、块设备驱动、网络设备驱动
硬件:鼠标、键盘(字符设备驱动)、硬盘、U盘(块设备驱动)等
1.4 系统关机重启命令
sudo shutdown -h now: 立即关机
sudo shutdown -r now: 立即重启
sudo reboot now: 立即重启
sudo shutdown -h 时间 "提示语句": 定义关机
sudo shutdown -r 时间 "提示语句": 定义重启
通过 shutdown -c: 可以取消定时操作
2.Linux安装工具
2.1 软件包安装
2.1.1 软件包的管理机制
debian: deb软件包管理机制
redhat: rpm软件包管理机制(Red Hat Package Manager)
2.1.2 软件包分类
二进制软件包:xx.deb
源码包:xx.dsc
2.1.3 软件管理工具
在Debian的linux发行版本下,采用dpkg和apt两种包管理工具。
dpkg与apt工具的区别:
dpkg:离线安装,安装本地包,不能检查软件包的依赖关系,不关系仓库内的软件。
apt:在线安装,通过仓库获取软件包资源,解决依赖关系,不能安装本地包。A -> B
仓库:托管可安装软件包的公共服务器,用户从服务器获取软件并将其安装至用户计算机。类似于应用商店。
2.2 dpkg 工具
dpkg -i 软件包全称
sudo dpkg -i 软件包的全称:安装软件
sudo dpkg -s 软件包名:显示软件的安装状态
sudo dpkg -L 软件包名:显示软件的安装路径
sudo dpkg -r 软件包名:卸载软件
sudo dpkg -P 软件包名:完全卸载软件,重新下载不会保留上一次配置。
2.2 apt工具
用的比较多apt-get
其他可以挖掘一下:apt-cache apt-config apt-ftparchive apt-key
2.2.1 apt-get
sudo apt-get install 软件报名: 安装
可以在/ect.apt/sources.list 看见源头
默认下载的包存放路径:/var/cache/apt/archives/
练习下载安装:xcowsay 、 oneko
sudo apt-get install 软件包名:软件下载并安装
sudo apt-get remove 软件包名:卸载软件
sudo apt-get --purge remove:完全卸载软件包
sudo apt-get autoremove 软件包名:卸载软件
sudo apt-get update: 下载更新软件包列表信息
sudo apt-get upgrade : 将系统中所有软件包升级到最新的版本
sudo apt-get upgrade 软件包名:将系统中指定的软件包升级到最新的版本
sudo apt-get clean:清空安装包的存放路径
ubuntu网络配置
- 桥接模式:
1)桥接模式:编辑->虚拟网络编辑器->更改设置->选择vmnet0->桥接模式->桥接的网络适配器(根据主机的网络连接进行选择,当然选择自动也可以)->确定。
如果自动不行也可以找到对应的网络适配器。
2)虚拟机->设置->网络适配器->选择桥接模式
3)16版本: 点击图标->Edit connections ->add可以添加->Ethernet->create->ipv4 settings->Method->(可以选择自动获取或手动设置)->save保存即可
如果是手动设置ip,需要点击Method里manual,手动设置ip地址
18版本:
点击图标选择有线设置 -> 点击+号 -> ipv4 -> 添加
- nat模式
1)编辑->虚拟网络编辑器->更改设置->选择vmnet8->nat模式->确定。
2)虚拟机->设置->网络适配器->选择nat模式
如果还不行就试试关闭虚拟机然后还原默认设置
如果网用着用着有问题可以用一下命令:
sudo nmcli network off
sudo nmcli network on
2.2.2 apt-cache
sudo apt-cache show 软件包名:获取二进制软件包的详细描述信息
sudo apt-cache policy 软件包名:获取软件包当前的安装状态
sudo apt-cache depends 软件包名:获取该软件包的依赖信息
sudo apt-cache rdepends 软件包名:获取所有依赖于该软件包的软件包
3.shell
3.1 shell 的基础知识
3.1.1 概念
shell: 命令行解释器
shell是贝壳的意思,起到保护作用。那linux的shell可以保护内核。
作用: 负责把应用程序的输入命令信息解释给操作系统,讲操作系统指令处理后的结果再回馈给应用程序。
3.1.2 命令执行的过程
用户在命令行下命令,开始与Shell进行交互。接着,Shell将用户的命令或按键转化成内核所能够理解的指令控制操作系统做出响应,直到控制相关硬件设备。然后,Shell将输出结果提交给用户。
3.1.3 shell分类
(1)Bourne Shell(简称sh):Bourne Shell由AT&T贝尔实验室的S.R.Bourne开发,也因开发者的姓名而得名。它是Unix的第一个Shell程序,早已成为工业标准。目前几乎所有的Linux系统都支持它。不过Bourne Shell的作业控制功能薄弱,且不支持别名与历史记录等功能。目前大多操作系统是将其作为应急Shell使用。
(2)C Shell(简称csh):C Shell由加利福尼亚大学伯克利分校开发。最初开发的目的是改进Bourne Shell的一些缺点,并使Shell脚本的编程风格类似于C语言,因而受到广大C程序员的拥护。不过C Shell的健壮性不如Bourne Shell。
(3)Korn Shell(简称ksh):Korn Shell由David Korn开发,解决了Bourne Shell的用户交互问题,并克服了C Shell的脚本编程怪癖的缺点。Korn Shell的缺点是需要许可证,这导致它应用范围不如Bourne Shell广泛。
(4)Bourne Again Shell(简称bash):Bourne Again Shell由AT&T贝尔实验室开发,是Bourne Shell的增强版。随着几年的不断完善,已经成为最流行的Shell。它包括了早期的Bourne Shell和Korn Shell的原始功能,以及某些C Shell脚本语言的特性。此外,它还具有以下特点:能够提供环境变量以配置用户Shell环境,支持历史记录,内置算术功能,支持通配符表达式,将常用命令内置简化。
3.1.4 shell 命令格式
命令名称 选项 参数
命令名称:必须得有
选项和参数:可有可无,选项有-符号
3.2 历史记录命令
history: 查看历史命令,默认显示的命令行数根据HISTSIZE来决定
echo $HISTSIZE: 将变量的值打印到终端,echo命令作用是打印内容到终端
HISTSIZE=10: 临时修改变量的值(只在当前终端有效)
在家目录下的隐藏文件,通过vi打开:
.bash_history:默认存放2000条历史记录命令的文件
.bashrc :定义HISTSIZE(使用history时默认显示的记录个数)和HISTFILESIZE(.bash_history文件可以存放命令的个数)变量的脚本文件
修改.bashrc文件中HISTSIZE的值,将终端退出:可以永久修改
3.3 起别名命令
alias: 查看系统中起别名的命令
alias 新名='原来的命令': 起别名
unalias 新名: 取消别名
3.4 Linux 特殊字符
3.4.1 通配符
*: 匹配所有字符
?: 匹配一个字符
[...]: 匹配[]中指定的任意一个字符
[-]: 匹配指定一个字符的范围
[^]: 除了其中指定的一个字符,均可匹配
3.4.2 管道 |
格式: 命令1 | 命令2
作用:将前一个命令的输出作为下一个命令的输入
例如:
wc -l 文件名: 显示文件行数
wc -w 文件名:显示文件单词个数
ls | wc -w: 通过ls加管道连用wc,显示当前路径下的文件数个数
pwd | xcowsay: 将pwd的输出内容通过管道传递给xcowsay
3.4.3 输入输出重定向
>文件名:输出重定向,新建模式
>>文件名:输出重定向,追加模式
2> 或者&>文件名: 将有命令产生的错误信息输出到文件中
<文件名:输入重定向
例如:
3.4.4 命令置换符
esc键下的`(不是单引号)
格式: 命令1 `命令2`
作用:将一个命令的输出作为另一个命令的参数的一部分
例子:
3.4 echo 命令
向终端输出指定内容
echo 字符串: 向终端输出指定内容
-n: 不换行输出
echo "字符串": 原样输出
例子: