GPL =General Public License对自由软件的条款
Ubuntu核心理念—“人道待人
Enterprise Open Source and Linux | Ubuntu Ubuntu官网
The Linux Kernel Archives 看Linux内核的网址
默认终端:Gnome –terminal
“软件包”管理机制----Deb软件包:将应用程序的二进制文件、配置文档、man/info帮助页面等文件合并打包在一个文件中,用户使用软件包管理器直接操作软件包,完成获取、安装、卸载、查询等操作。
APT软件包管理器:检查和修复软件包依赖关系,利用Internet网络帮助用户主动获取软件包
二进制软件包(deb):包含可执行文件、库文件、配置文件、man/info页面、版权声明和其它文档。
源码包(deb-src):包含软件源代码、版本修改说明、构建指令以及编译工具等。先由tar工具归档为.tar.gz文件,然后再打包成.dsc文件。
软件包的命名遵循以下约定:软件包名称_软件版本_修订版本_体系架构
dpkg相关命令
dpkg –i
dpkg –r
dpkg –P
dpkg –L
dpkg –s
APT工作原理
Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库至于许许多多的镜像服务器中,并保持基本一致。因此,对于用户这些镜像服务器就是他们的软件源(reposity)
在Ubuntu系统中,使用软件源配置文件/etc/apt/sources.list列出最适合访问的镜像站点地址。
管理软件包
Apt-get subcommands [-d|-f|-m|-q|--purge|--reinstall|-b|-s|-y|-u|-h|-v] pkg
Update 下载更新软件包列表信息
Upgrade 将系统中所有软件包升级到最新的版本
Install 下载所需软件包并进行安装配置
Remove 卸载软件包
Autoremove 将不满足依赖关系的软件包自动卸载
Source 下载源码包
Build-dep 为源码包构建所需的编译环境
Dist-upgrade 发布版升级
Dselect-upgrade 根据dselect的选择来进行软件包升级
Clean 删除缓存区中所有已下载的包文件
Autoclean 删除缓存区中老版本的已下载的包文件
Check 检查系统中依赖关系的完整性
-f 修复系统中存在的软件包一栏问题
--purge 与remove子命令一起使用,完全卸载软件包
apt-cache show 命令获取指定软件包的详细信息
apt-cache policy 可以获取软件包当前的安装状态。
Shell命令行解释器
Home目录 /home/linux
Bash除了在命令编辑功能上比sh有很大改进外,还增加了特有功能极大地方便了用户在Shell命令行上的操作。
连续按两下TAB键或ESC键,用于命令补齐;按下一次TAB键,用于文件名补齐。
输入\输出重定向(常见的要熟练)
输入\输出重定向是改变shell命令或是程序默认的标准输入/输出目标,重新定向到新的目标。
命令替换是将一个命令的输出作为另一个命令的参数。
Man
Name:命令的名称;SYNOPSIS:命令的语法格式;DESCRIPTION:命令的一般描述以及用途;options:描述命令所有的参数或选项;SEE ALSO:列出联机帮助页中与该命令直接或功能相近的命令;BUGS:解释命令或其输出中存在的任何可能存在的缺陷;EXAMPLES:普通的用法实例;AUTHORS:联机帮助页以及命令的作者。·
su 用于临时改变用户身份 su – 切换到超级用户
echo用于标准输出(在终端)
data 显示日期
clear 清屏(ctrl+l)
df 查看磁盘空间的使用情况
du 列出目录和文件所使用的磁盘块数
/etc/passwd文件是系统能够识别的用户清单。
/etc/group文件 包含了UNIX组的名称和每个组中成员列表。
Addurer
/etc/adduser.conf. adduser配置文件
SKEL模板
添加新用户的过程
系统
编辑passwd和shadow文件,定义用户账号
设置一个初始口令
创建用户主目录,用chown和chmod命令改变主目录的属主和属性。
为用户所进行的步骤
将默认的启动文件复制到用户主目录下
设置用户的邮件主目录并建立邮件别名
Usermod修改用户属名
Deluser 删除用户
Addgroup 添加用户组
Delgroup 删除用户组
程序的一次执行就是一个进程
ps显示进程(process)的动态
top实时监测(q键退出)
使用kill命令终止进程(kill [-signal] PID)signal是信号,PID是进程号
Linux文件系统:用于组织和管理计算机存储设备上的大量文件,并提供用户交互接口。既可以使用界面友好的Nautuius图形文件管理器,也可以使用功能强大的shell文件系统管理工具
Linux分区的命名方式:字母和数字相结合
Linux文件系统结构;(自顶向下的查询方法)所有存储设备作为这棵树的一个子目录。存取文件时只需确定目录就可以了,无需考虑物理存储位置。
在linux中,将所有的硬件都视为文件来处理
File命令。判定一个文件的类型
硬链接是利用linux中为每个文件分配的物理编号——inode建立链接
软连接是利用文件的路径名建立链接
文件压缩和归档(和window一样)
gzip和gunzip命令压缩和解压文件
如何配置网络
Ifconfig
Vi /etc/network/interfaces
Vi /etc/resolv.conf
Vi /etc/rc.local
Sudo /etc/init.d/networking restart
Ping www.baidu.com
Shell脚本语言是解释型语言。本质:shell命令的有序集合
Esc+o是vi的换行。
Sh文件的头文件#!/bin/bash命令置换一定要有输出 修改权限:chmod 740 文件名
Shell中有四种变量:
用户自定义变量(大写);
通常使用全大写变量,方便识别。变量的调用:在变量前面加$。Linux Shell/bash从右向左赋值。使用unset命令删除变量的赋值
位置变量即命令行参数;
$0与键入的命令行一样,包含脚本文件名
$1,$2……$9分别包含第一个到第九个命令行参数
$#包含命令行参数的个数
$@包含所有命令行参数:“$1,$2,.......$9”
$?包含前一个命令的退出状态
$*包含所有命令行参数:“$1,$2,……$9”
$$ 包含正在执行进程的ID号
预定义变量;
环境变量
HOME:/etc/passwd文件中列出的用户主目录
IFS:Internal Field Separator,默认为空格,tab及换行符
PATH:shell搜索路径
PS1,PS2:默认提示符($)及换行提示符(>)
TERM:终端类型,常用的有vt100,ansi,vt200,xterm等。
Shell程序由零或多条shell语句构成。Shell语句包括三类:说明性语句、功能性语句和结构性语句。
说明性语句:
以#号开始到该行结束,不被解释执行
功能性语句:
任意的shell命令、用户程序或其它shell程序
Read;expr(\*)
结构性语句:
主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程
条件测试语句【if then fi】、多路分支语句【case in esac】、循环语句【for、while】、循环控制语句。
GNU工具
编译工具:把一个源程序编译为一个可执行程序。
调试工具:能对执行程序进行源码或汇编级调试。
软件工程工具:用于协助多人开发或大型软件项目的管理,如make,CVS,Subvision
其他工具:用于把多个目标文件链接成可执行文件的链接器,或者用作格式转换的工具。
GCC最基本的用法:gcc [options] [filenames]
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于汇编不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-g,产生符号调试工具所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
-O,对成进行优化编译,连接,采用这个选项,整个源代码就会在编译,连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一点。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-l dirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。
-L dirname,将dirname所指出的目录加入到程序函数档案库文件目录列表中,实在链接过程中使用的参数。
GCC的错误类型及对策:第一类:c语法错误;第二类:头文件错误;第三类:档案库错误
第四类:未定义符号
GCC的编译流程分为四个步骤:
1.预处理(pro-processing)
2.编译(Compiling)
3.汇编(Assembling)
4.链接(Linking )
GDB调试
gcc –g test.c –o test
gdb test
共用体的概念:在C语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型称为共用体(在定义、说明和使用形式上与结构体相似,两者本质上的不同仅在于使用内存的方式上)
C/C++定义了四个内存空间:
代码区/全局变量与静态变量区/局部变量区即栈区/动态存储区、即堆区。
静态存储分配:通常定义变量,编译器在编译时都可以根据该变量的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。
在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些储存单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
动态存储分配:有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法为他们预定存储空间,只有在程序运行时,系统根据运行的要求进行内存分配。
所有动态存储分配都在堆区进行。
从堆上分配,亦称动态内存分配。程序在运行的时候用malloc申请任意多少的内存,程序员在即负责在何时用free释放内存。内存生存期灵活,但是容易出问题。
堆内存的分配与释放:
当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆中的一块所需大小的存储空间,用于该变量或对象。当不再使用该变量或对象时,也就是它的生命结束时,要显式释放它所占用的存储空间,这样系统就能对该堆空间进行再次分配,做到重复使用有限资源。
堆区是不会自动在分配时做初始化的(包括清零),所以必须用初始化式(initializer)来显式初始化。
Makefile是make读入的唯一配置文件
由make工具创建的目标体(target),通常是目标文件或可执行文件
要创建的目标体所依赖的文件(dependency_file)
创建每个目标体时需要运行的命令(commamd)
注意:命令行前面必须是一个“TAB键”,否则编译错误为:***missing separator. Stop
创建变量的目的:用来代替一个文本字符串:
1.系列文件的名字
2.传递给编译器的参数
3.需要运行的程序
4.需要查找源代码的目录
5.你需要输出信息的目录
6.你想做的其他事
隐含规则1:编译C程序的隐含规则
隐含规则2:链接Object文件的隐含规则
X:x.o y.o z.o
并且x.c、y.c、z.c都存在时,隐含规则将执行如下命令:
cc –c x.c –o x.o
cc –c y.c –o y.p
cc –c z.c –o z.o
cc x.o y.o z.o –o x
如果没有一个源文件