库是一种可执行代码的二进制形式,能够被操做系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。html
a. 静态库
之因此称为【静态库】,是由于在连接阶段,会将汇编生成的目标文件.o与引用到的库一块儿连接打包到可执行文件中。所以对应的连接方式称为静态连接。首先,静态库对函数库的连接是放在编译时期完成的。其次,程序在运行时与函数库再无瓜葛,移植方便。静态库也有缺点以下图所示,形成空间内存浪费;node
b. 动态库
动态库在程序编译时并不会被链接到目标代码中,而是在程序运行是才被载入。不一样的应用程序若是调用相同的库,那么在内存里只须要有一份该共享库的实例,规避了空间浪费问题。动态库在程序运行时才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只须要更新动态库便可,增量更新。linux
- LIBRARY_PATH环境变量用于在程序编译期间查找动态连接库时指定查找共享库的路径。
- LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态连接库时指定除了系统默认路径以外的其余路径,
/bin
和/usr/bin
该目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等。c++
/boot
该目录中存放系统的内核文件和引导装载程序文件,/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M便可。shell
/dev
存放设备文件的目录,存放linux系统下的设备文件,访问该目录下某个文件,至关于访问某个设备,存放链接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件,包括字符设备和块设备等,经常使用的是挂载光驱mount /dev/cdrom/mnt。编程
/etc
存放系统管理和配置文件的目录,系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录。重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11(X Window系统有关)、/etc/sysconfig(与网络有关)、/etc/xinetd.d修改配置文件以前记得备份。该目录下的文件由系统管理员来使用,普通用户对大部分文件有只读权限。windows
/home
用户主目录,好比用户user的主目录就是/home/user,能够用~user表示数组
/lib
、/usr/lib
和/usr/local/lib
存放动态连接共享库的目录浏览器
/sbin
,/usr/sbin
和/usr/local/sbin
放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不一样的是,这几个目录是给系统管理员root使用的命令,通常用户只能"查看"而不能设置和使用。安全
/tmp
通常用户或正在执行的程序临时存放文件的目录,任何人均可以访问,重要数据不可放置在此目录下。
/root
系统管理员的主目录
/mnt
系统提供这个目录是让用户临时挂载其余的文件系统。关于挂载的理解:
linux系统中每一个分区都是一个文件系统,都有本身的目录层次结构。linux会将这些分属不一样分区的、单独的文件系统按必定的方式造成一个系统的总的目录层次结构;这里所说“按必定方式”就是指的挂载,
通俗的说,将一个文件系统的顶层目录挂到另外一个文件系统的子目录上,使它们成为一个总体,称为挂载;咱们把这个子目录叫“挂载点”不一样的是WINDOWS是把分区映射到一个盘符,而LINUX下是映射到一个目录。
/proc
此目录的数据都在内存中,如系统核心,外部设备,网络状态,因为数据都存放于内存中,因此不占用磁盘空间,
/var
若是/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运做后才会渐渐占用硬盘容量的目录。 放置系统执行过程当中常常变化的文件,如随时更改的日志文件 /var/log。
/usr
(最庞大的目录,要用到的应用程序和文件几乎都在这个目录),它不是user的缩写,其实usr是Unix Software Resource的缩写,也就是Unix操做系统软件资源所放置的目录,都会放置到/usr底下,所以这个目录有点相似Windows系统的C:\Windows + C:\Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。
/usr/bin/ #绝大部分的用户可以使用指令都放在这里 /usr/lib/ #应用软件的函式库、目标文件(object file),以及不被通常使用者惯用的执行档或脚本(script)。 某些软件会提供一些特殊的指令来进行服务器的设定,这些指令也不会常常被系统管理员操做, 那就会被摆放到这个目录下啦。要注意的是,若是你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生 /usr/local/ #本地安装的软件和其余文件放在这里,/usr/local/bin存放本地增长的命令,/usr/local/include存放本地增长的库文件。
安装gmp4.3.2
进入gmp4.3.2的安装目录执行。(注意:prefix指定编译的时候用来指定程序存放路径 。)
./configure --prefix=/home/gqx/new_gcc/gmp-4.3.2 make make install
安装mpfr2.4.2
进入gmp4.3.2的安装目录执行(注意:配置的时候要把依赖关系选项加进去)
./configure --prefix=/home/gqx/new_gcc/mpfr-2.4.2 --with-gmp=/home/gqx/new_gcc/gmp-4.3.2 make make install
安装mpc0.8.1
进入安装目录
./configure --prefix=/home/gqx/new_gcc/mpc-0.8.1 --with-gmp=/home/gqx/new_gcc/gmp-4.3.2 --with-mpfr=/home/gqx/new_gcc/mpfr-2.4.2 make make install
添加环境变量
修改~/.bashrc
文件,添加以下内容:
LD_LIBRARY_PATH=LD_LIBRARY_PATH:=/home/gqx/new_gcc/mpc-0.8.1/lib:=/home/gqx/new_gcc/gmp-4.3.2/lib=/home/gqx/new_gcc/mpfr-2.4.2/lib:=/home/gqx/new_gcc/gcc-5.3/lib export D_LIBRARY_PATH
安装gcc
下载gcc-5.3安装包
gcc各版本浏览地址:http://ftp.gnu.org/gnu/gcc/
gcc-5.3下载地址:http://ftp.gnu.org/gnu/gcc/gcc-5.3/gcc-5.3.tar.bz2
进入安装目录,编译安装指令以下:
./configure --prefix/home/gqx/new_gcc/gcc-5.3/
该过程须要一部分时间,接下来,编译
make make insatll
创建一个bin目录,作好软连接
mkdir bin ln -s /home/gqx/new_gcc/gcc-5.3/bin/gcc ./bin/gcc ln -s /home/gqx/new_gcc/gcc-5.3/bin/g++ ./bin/g++查看软连接是否成功:
ls ./bin -l
;注意,这里的bin目录是在/home/
目录下建的。添加环境变量
修改~/.bashrc
文件,添加以下内容:
export PATH=$PATH:~/bin #CC:用来指定C编译器 export CC=/home/gqx/new_gcc/gcc-5.3/bin/gcc #CXX: 用来制定CXX编译器 export CXX=/home/gqx/new_gcc/gcc-5.3/bin/gcc
保存生效后,查看便可。
gcc -v
- GNU
GNU不是一个公司名,而是一个软件项目名。它开发了许多应用程序。
- GCC
GCC全称是 GNU C Compiler, 最先的时候就是一个c编译器。可是后来由于这个项目里边集成了更多其余不一样语言的编译器,GCC就表明 the GNU Compiler Collection,因此表示一堆编译器的合集。
- G++
G++则是GCC的c++编译器
configure
这一步通常用来生成 Makefile,为下一步的编译作准备,你能够经过在 configure 后加上参数来对安装进行控制,好比代码:
./configure --prefix=/usr上面的意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。
--sys-config=
参数进行设定。有一些软件还能够加上--with、--enable、--without、--disable
等等参数对编译加以控制,你能够经过容许 ./configure --help
察看详细的说明帮助。make
make 的做用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能,好比 make install 通常表示进行安装,make uninstall 是卸载,不加参数就是默认的进行源代码编译。
管道是一种通讯机制,一般用于进程间的通讯(也可经过socket进行网络通讯),它表现出来的形式将前面每个进程的输出(stdout)直接做为下一个进程的输入(stdin)
管道命令使用|
做为界定符号,管道命令与上面说的连续执行命令不同。以下案例:
command1 | command2 | command3;
经常使用的管道命令以下:
选取命令:cut
cut -d '分隔字符' -f field // 用于分隔字符 cut -c 字符范围 [参数说明] -d : 后面接分隔字符,一般与 -f 一块儿使用 -f : 根据-d 将信息分隔成数段,-f 后接数字 表示取出第几段 -c : 以字符为单位取出固定字符区间的信息
grep
分析一行信息,若是其中有咱们须要的信息,就将该行拿出来
grep [-acinv] [--color=auto] '查找字符串' filename [参数说明] -a : 将binary文件以text文件的方式查找数据 -c : 计算找到 '查找字符串'的次数 -i : 忽略大小写的不一样 -n : 输出行号 -v : 反向选择,显示没有查找内容的行 --color=auto : 将找到的关键字部分加上颜色显示
排序命令sort,wc,uniq
sort [-fbMnrtuk] [file or stdin] [参数说明] -f :忽略大小写的差别,例如A 与a 视为编码相同 -b :忽略最前面的空格部分 -M :以月份的名字来排序,例如JAN, DEC 等等的排序方法 -n :使用『纯数字』进行排序默认是以文字型态来排序的) -r :反向排序 -u :就是uniq ,相同的资料中,仅出现一行表明 -t :分隔符号,预设是用[tab] 键来分隔 -k :以那个区间(field) 来进行排序的意思 uniq [-ic] [参数说明] -i :忽略大小写的不一样 -c :进行计数 wc [-lwm] [参数说明] -l :仅列出行 -w :仅列出多少字(英文单字) -m :多少字符
利用管道命令能够帮助解决不少问题,经常使用的一条命令是根据进程名字删除杀死进程,以下:
#杀死名为routerserver的进程 ps aux|grep routerserver|grep -v grep | awk '{print $2}'|xargs kill -9
关于ps
相关参数的说明:
-a 显示现行终端机下的全部进程,包括其余用户的进程。 -u 以用户为主的格式来显示程序情况 -x 显示全部程序,不以终端机来区分。
还有就是根据端口号杀死进程:
netstat -tunlp|grep 端口号 #获取进程号 kill -9 进程号
关于netstat的参数说明:
-t或--tcp:显示TCP传输协议的连线情况; -u或--udp:显示UDP传输协议的连线情况; -n或--numeric:直接使用ip地址,而不经过域名服务器; -l或--listening:显示监控中的服务器的Socket; -p或--programs:显示正在使用Socket的程序识别码和程序名称;
目标文件有三种类型:
可重定位的目标文件:包含二进制数据和代码,其形式能够在编译时与其余可重定位合并起来,建立一个可执行的目标文件
可执行的目标文件:包含二进制和代码,能够直接复制到内存并执行
共享目标文件:一类特殊的可重定位目标文件,能够在加载或者运行时被动态的加载到内存执行。
上面提到的三种对象文件有统一的格式(ELF文件),包含几个重要的部分,以下图:
下面分别介绍一下主要部分:
.text section 代码部分 .rodata section 只读数据部分,例如跳转表 .data section 初始化的全局变量 .bss section 未初始化的全局变量 .symtab section 包含 symbol table, procudure 和 static variable names 以及 section names 和 location .rel.txt section .text section 的重定位信息 .rel.data section .data section 的重定位信息
连接器实际上会处理三种不一样的符号,对应于代码中不一样写法的部分:
全局符号 Global symbols
在当前模块中定义,且能够被其余代码引用的符号,例如非静态 C 函数和非静态全局变量。
外部符号 External symbols
一样是全局符号,可是是在其余模块(也就是其余的源代码)中定义的,可是能够在当前模块中引用。
本地符号 Local symbols
在当前模块中定义,只能被当前模块引用的符号,例如静态函数和静态全局变量。
注意,Local linker symbol 并非 local program variables
第一步 符号解析 Symbol resolution
符号解析会将每一个符号引用恰好和一个符号定义联系起来。汇编器生成可重定位目标文件后,内部符号都已被正确地符号解析, 外部符号可能会引用了非本模块的符号定义,汇编器没法找到符号定义,所以没法解析。 汇编器把外部符号放入”符号表“.symtab,同时把如何解析该符号的方法放入”重定位表“。连接器只知道非静态的全局变量/函数,而对于局部变量一无所知,局部非静态变量和局部静态变量的区别:
局部非静态变量会保存在栈中
局部静态变量会保存在 .bss 或 .data 中
连接器符号解析时会用到符号表:
强符号与弱符号: 函数和初始化的全局变量叫强符号, 未初始化的全局变量叫弱符号。(extern int a是一个弱符号定义, int a 也是弱符号)
符号解析规则:
1.(定义多个强符号) 当引用符号时,该符号的符号定义有不止一个强符号定义时,会出现符号重定义错误。
2.(定义一个强符号和一个或者多个弱符号)当引用符号时, 该符号的符号定义有个强符号定义和一个和多个弱符号定义, 使用强符号定义。
3.(定义多个弱符号)当引用符号时, 该符号的符号定义都是弱符号时, 选择任意一个定义。
第二步 重定位 Relocation
就是把不一样可重定位对象文件拼成可执行对象文件,有三步,以下:
1.合并可重定位目标文件中相同的节。
2.重定位节和符号定义,修改符号表。为节和符号定义分配虚拟地址。修改符号表中符号定义的值为刚分配的虚拟地址。
3.重定位节中的符号引用,修改代码段和数据段符号引用。使用重定位表.rel.text .rel.data, 修改text,data中符号引用的地址。
例以下图,多个可重定位对象文件合并成可执行文件的过程所示:
简述为, 合并节, 重定位符号定义(修改符号表),重定位符号引用(修改数据段代码段)。
更多的详细内容能够参考该文章中的PPT:符号及符号解析
处理目标文件的一些工具,以下:
AR :建立静态库,插入、删除、列出和提取成员。
NM :列出一个目标文件的符号表中定义的符号。
LDD :列出一个可执行程序文件在运行时所需的共享库。
a. 断点
在代码的指定位置中断,使程序在此中断。
break <function> 在进入指定函数时停住 break <linenum> 在指定行号停住。 break +/-offset 在当前行号的前面或后面的offset行停住。offiset为天然数。 break filename:linenum 在源文件filename的linenum行处停住。 break ... if <condition> ...能够是上述的参数,condition表示条件,在条件成立时停住。好比在循环境体中,能够设置break if i=100,表示当i为100时停住程序。
b. 查看变量
最经常使用的查看变量的方法是
(gdb) print {变量名}
若是打印数组,因为默认的设置,可能打印的数组尾部部分没有显示,能够经过以下的命令设置打印数组的最大长度
(gdb) set print elements 300
c. 调试中查看代码
list function 如list main:显示main函数附近的代码 list file:function 如list main.c:main:显示main.c中的main函数附近的代码 list n1,n2 如list 10,20,显示当前文件的10到20行
也能够用以下命令:
gdb -tui 项目名 或者在启动gdb后, 输入命令focus。
d. 恢复程序运行和单步调试
在gdb中,和调试步进相关的命令主要有以下几条:
continue 继续运行程序直到下一个断点(相似于VS里的F5) next 逐过程步进,不会进入子函数(相似VS里的F10) step 逐语句步进,会进入子函数(相似VS里的F11) until 运行至当前语句块结束 finish 运行至函数结束并跳出,并打印函数的返回值(相似VS的Shift+F11)
e. GDB backtrace bt 查看程序crash堆栈信息
当程序被停住了,须要作的第一件事就是查看程序是在哪里停住的。当你程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。能够用bt命令来查看当前的栈中的信息。
a. tar
tar 包文件的命令一般都是以 .tar 结尾的。生成 tar 包后,就能够用其它的程序来进行压缩了,例如:
tar -cf all.tar *.jpg #将全部 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。
tar -rf all.tar *.gif #将全部 .gif 的文件增长到 all.tar 的包里面去,-r 是表示增长文件的意思。
关于后缀的说明:
-c: 创建压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 -z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示全部过程 -O:将文件解开到标准输出
(1). 调用gzip
gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用gzip。
tar -czf all.tar.gz *.jpg #将全部 .jpg 的文件打成一个
(2). tar 调用 bzip2
.bz2 结尾的文件就是 bzip2 压缩的结果。与 bzip2 相对的解压程序是 bunzip2。tar 中使用 -j 这个参数来调用 gzip
tar -cjf all.tar.bz2 *.jpg #将全部 .jpg 的文件打成一个 tar 包,而且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,包名为 all.tar.bz2
相应的解压命令以下:
tar -xjf all.tar.bz2
(3). 对于zip
zip 是压缩程序,unzip 是解压程序。
zip all.zip *.jpg unzip all.zip
(4). 总结
一、*.tar 用 tar –xvf 解压
二、*.gz 用 gzip -d或者gunzip 解压
三、*.tar.gz和*.tgz 用 tar –xzf 解压
四、*.bz2 用 bzip2 -d或者用bunzip2 解压
五、*.tar.bz2用tar –xjf 解压
六、*.Z 用 uncompress 解压
七、*.tar.Z 用tar –xZf 解压
八、*.rar 用 unrar e解压
九、*.zip 用 unzip 解压
ln功能是为某一个文件在另一个位置创建一个同步的连接.当咱们须要在不一样的目录,用到相同的文件时,咱们不须要在每个须要的目录下都放一个必须相同的文件,咱们只要在某个固定的目录,放上该文件,而后在其它的目录下用ln命令连接(link)它就能够,没必要重复的占用磁盘空间。
必要参数:
-b 删除,覆盖之前创建的连接 -d 容许超级用户制做目录的硬连接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 -n 把符号连接视为通常目录 -s 软连接(符号连接) -v 显示详细的处理过程
软链接
命令:
ln -s 原文件 目标文件
特征:
1.至关于windows的快捷方式
2.只是一个符号链接,因此软链接文件大小都很小
3.当运行软链接的时候,会根据链接指向找到真正的文件,而后执行
4.全部软链接文件的权限是777,而真正的权限是由指向的那个文件决定的
5.原文件丢失,软链接没法访问,会报找不到的错误
6.ls -al之后,软链接后面箭头指向的是原文件
硬链接
命令:
ln 原文件 目标文件
特征:
1.原文件和链接文件的属性彻底同样
2.链接文件和原文件的关系相似于:复制+同步更新
3.当原文件丢失,硬链接文件还能够访问
4.不能跨分区,不能针对目录使用
5.原文件和硬连接文件的i节点号是相同的(ls -i),1个文件名对应一个i节点,1个i节点能够经过多个文件名访问,因此,他们的属性彻底相同,而且修改了其中一个的内容另外一个也会跟着修改
补充:
Linux 目前使用的是 ext4 文件系统。若是用一张示意图来描述 ext4 文件系统,则能够以下图。
ext4 文件系统会把分区主要分为两大部分(暂时不提超级块):小部分用于保存文件的 inode (i 节点)信息;剩余的大部分用于保存 block 信息。
inode 的默认大小为 128 Byte,用来记录文件的权限(r、w、x)、文件的全部者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号。每一个文件须要占用一个 inode。你们若是仔细查看,就会发现 inode 中是不记录文件名的,那是由于文件名记录在文件所在目录的 block 中。
block 的大小能够是 1KB、2KB、4KB,默认为 4KB。block 用于实际的数据存储,若是一个 block 放不下数据,则能够占用多个 block。例如,有一个 10KB 的文件须要存储,则会占用 3 个 block,虽然最后一个 block 不能占满,但也不能再放入其余文件的数据。这 3 个 block 有多是连续的,也有多是分散的。
a. 使用tar打包的应用软件
b. 使用rpm打包的应用软件
安装
只需简单的一句话语句去执行:
rpm –ivh rpm软件包名
更高级的,请见下表:
rpm参数 参数说明 -i 安装软件 -t 测试安装,不是真的安装 -p 显示安装进度 -f 忽略任何错误 -U 升级安装 -v 检测套件是否正确安装 ...
卸载:
一样只需执行:
rpm –e 软件名
不过要注意的是,后面使用的是软件名,而不是软件包名。例如,要安装software-1.2.3-1.i386.rpm这个包时,应执行:
rpm –ivh software-1.2.3-1.i386.rpm
而当卸载时,则应执行:
rpm –e software
*** c.使用deb打包的应用程序 ***
安装
dpkg –i deb软件包名 如:dpkg –i software-1.2.3-1.deb
卸载:
dpkg –e 软件名 如:dpkg –e software
通常来讲著名的linux系统基本上分两大类:
RedHat系列:Redhat、Centos、Fedora等
Debian系列:Debian、Ubuntu等
Debian系列
常见的安装包格式 deb包,安装deb包的命令是“dpkg -参数”
包管理工具 apt-get
apt-get能够用于运做deb包,例如在Ubuntu系统上对某个软件的管理:
安装:apt-get install
卸载:apt-get remove
更新:apt-get update
支持tar包
yum能够用于运做rpm包
安装:yum install
卸载:yum remove
更新:yum update
Linux下环境变量设置的三种方法:
只对当前的shell 起做用的环境变量
在shell的命令行下直接使用export 变量名=变量值
定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,须要使用的话还须要从新定义。
~/.bashrc
文件中增长变量,改变量仅会对当前用户有效,而且是“永久的”。修改文件后要想立刻生效还要运行source ~/.bashrc
否则只能在下次重进此用户时生效。对全部用户生效(永久的)
用VI在文件/etc/profile
文件中增长变量,该变量将会对Linux下全部用户有效,而且是“永久的”。注:修改文件后要想立刻生效还要运行source /etc/profile
。否则只能在下次重进此用户时生效。
Makefile.am是一种比Makefile更高层次的编译规则,能够和configure.in文件一块儿经过调用automake命令,生成Makefile.in文件,再调用./configure的时候,就将Makefile.in文件自动生成Makefile文件了。因此Makefile.am文件是比Makefile文件更高的抽象。
用以下Makefile.am文件为例做说明:
AUTOMAKE_OPTIONS=foreign subdir-objects bin_PROGRAMS = client client_SOURCES = key.c connect.c client.c main.c session.c hash.c client_CPPFLAGS = -DCONFIG_DIR=\"$(sysconfdir)\" -DLIBRARY_DIR=\"$(pkglibdir)\" client_LDFLAGS = -export-dynamic -lmemcached noinst_HEADERS = client.h INCLUDES = -I/usr/local/libmemcached/include/ client_LDADD = $(top_builddir)/sx/libsession.la \ $(top_builddir)/util/libutil.la
AUTOMAKE_OPTIONS:这个是用来设定automake的选项。automake主要是帮助开发GNU软件的人员维护软件套件,通常在执行automake时会检查目录下是否存在标准GNU套件中应具有的文件档案,例如NEWS、AUTHOR、ChangeLog等,设成foreign时,automake会改用通常软件套件标准来检查,而gnu是缺省设置,该级别下将尽量地检查包是否服从GNU标准,gnits是严格标准,不推荐。
bin_PROGRAMS:表示指定要生成的可执行应用程序文件,这表示可执行文件在安装时须要被安装到系统中,若是只是想编译。不想被安装到系统中,能够用noinst_PROGRAMS来代替。
bin_PROGRAMS=client这一行表示什么意思?解释以下:
PROGRAMS 知道这是一个可执行文件。 client 表示编译的目标文件。 bin表示目录文件被安装到系统的目录。
client_SOURCES:表示生成可执行应用程序所用的源文件,这里注意,client_是由前面的bin_PROGRAMS指定的,若是前面是生成example,那么这里就是example_SOURCES,其它的相似标识也是同样。
client_CPPFLAGS:这和Makefile文件中同样,表示C语言预处理器参数,这里指定了DCONFIG_DIR,之后在程序中,就能够直接使用CONFIG_DIR,不要把这个和另外一个CFLAGS混淆,后者表示编译器参数。
client_LDFLAGS:这个表示在链接时所须要的库文件选项标识。这个也就是对应一些如-l,-shared等选项。
INCLUDES:链接时所须要的头文件。
a. 服务的管理
管理命令 | 命令 | 含义 |
---|---|---|
service 服务名 | start | 启动服务 |
service 服务名 | stop | 中止服务 |
service 服务名 | restart | 从新启动服务 |
举例说明
/etc/init.d/服务名 start #启动服务 /etc/init.d/服务名 stop #中止服务 /etc/init.d/服务名 restart #从新启动服务 /etc/init.d/network restart #重启network服务,读入配置文件
b. 用ifconfig查看设备信息
eth0 Link encap:Ethernet HWaddr 00:0C:29:7A:E4:0E inet addr:192.168.1.110 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe7a:e40e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1709 errors:0 dropped:0 overruns:0 frame:0 TX packets:783 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:175347 (171.2 KiB) TX bytes:100454 (98.0 KiB) Interrupt:19 Base address:0x2000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 ...
eth0 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,能够看到目前这个网卡的物理地址(MAC地址)是 00:0C:29:7A:E4:0E
inet addr 用来表示网卡的IP地址,此网卡的 IP地址是 192.168.1.110,广播地址Bcast:192.168.1.255 ,掩码地址Mask:255.255.255.0 。
lo 是表示主机的回坏地址,这个通常是用来测试一个网络程序,但又不想让局域网或外网的用户可以查看,只能在此台主机上运行和查看所用的网络接口。好比把 HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1 就能看到你所架WEB网站了。但只是您能看获得,局域网的其它主机或用户无从知道。
第一行:链接类型:Ethernet(以太网)HWaddr(硬件mac地址)
第二行:网卡的IP地址、子网、掩码
第三行:UP(表明网卡开启状态)RUNNING(表明网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节 。
第4、五行:接收、发送数据包状况统计
第七行:接收、发送数据字节数统计信息。
c. Linux网络服务管理命令
查看指定的服务是否开启
netstat | grep ssh | grep -v grep
telnet协议是TCP/IP协议簇中的一员,是Intenet远程登陆服务的标准协议
#示例1:登陆远程主机192.168.78.20 telnet 192.168.78.20 #示例2:以账户hadoop远程登陆主机192.168.78.20 telnet -l hadoop 192.168.78.20 #示例3:登陆远程主机bbs.uestc.edu.cn telnet bbs.uestc.edu.cn
文件传输命令
FTP文件传送协议是一个用于从一台主机到另外一台主机传送协议。
#利用登陆帐户登陆到FTP服务器 ftp 192.168.16.1 登陆成功后能够进行一些操做 下载一个文件:get 文件名 指定目录 删除一个文件:delete 文件名 上传一个文件:put 文件名
安全的主机间复制文件——scp
scp user1@ada.org:./test test 保存地址
a. Linux df命令用于显示目前在Linux系统上的文件系统的磁盘使用状况统计。
gqx@gqx-Lenovo-Product:~$ df -lh # -h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...) # -l, --local 限制列出的文件结构 文件系统 容量 已用 可用 已用% 挂载点 udev 7.8G 0 7.8G 0% /dev tmpfs 1.6G 34M 1.6G 3% /run /dev/sda3 74G 11G 60G 15% / tmpfs 7.9G 2.7G 5.2G 35% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup /dev/sda8 360M 210M 128M 63% /boot /dev/sda4 122G 40G 76G 35% /home tmpfs 1.6G 96K 1.6G 1% /run/user/1000
从上信息能够看出系统安装在/dev/sda3
上,挂载在/home
目录下的磁盘分区/dev/sda4
大小是122G。
b. Linux du命令是显示每一个文件和目录的磁盘使用空间。可是与df命令不一样的是Linux du命令是对文件和目录磁盘使用的空间的查看。
-a或-all 显示目录中个别文件的大小。 -s或--summarize 仅显示总计,只列出最后加总的值。 -h或--human-readable 以K,M,G为单位,提升信息的可读性。