目录
如何定义repo文件
[Repo_ID]
name=Description
baseurl=
ftp:// #
http:// # http,使用nginx转接
file:/// # 本地
enabled={1|0}
gpgcheck=={1|0}
gpgkey=
yum命令
yum [options] [command] [package ...]
list: 列表
all
available:可用的,仓库中有但尚未安装的
installed:已经安装的
updates:可用的升级
oboletes:被废弃的包
clean:清理缓存
[ packages | headers | metadata | dbcache | all ]
repolist:显示repo列表及其简要信息
all:获取所有已安装的包
enabled:
disabled:
yum install PACKAGE_NAME
-y:表示不需要交互 # 不加-y,会给用户选择(y/n/d),d表示只下载不安装
--nogpgcheck
yum remove|erase PACKAGE_NAME: 卸载
yum info PACKAGE_NAME:查看某个包的概要信息
yum provides | whatprovides: 查看指定的文件或特性是由哪个包安装生成的。
yum
groupinfo groupname # 查看组信息
yum groupinfo groupinstall "Development Tools"
grouplist # 分类列出所有已安装的组和可以安装的组
groupinstall
yum groupinstall "Development Tools" "Development Libraries" -y
groupremove:
groupupdate:
如何创建yum仓库
createrepo
yum install createrepo
mkdir -pv /yum/VT
cp /media/cdrom/VT/*.rpm /yum/VT/
cd /yum/VT
cd /etc/yum.repo.d/
vim cdrom.repo
[Base]
name=RHEL7 CDROM Server
baseurl=file://media/cdrom/Server
enabled=1
gpgcheck=0
[VT]
name=VT
baseurl=file:///yum/VT
enabled=1
gpgcheck=0
yum repolist
createrepo /yum/VT/
ls /yum/VT/
yum clean all
yum repolist
RPM安装编译
'''
在 Unix 上写过程序的人尤其是用 C 来开发程序的人一般都遇到过 Makefile,用 make 来开发和编译程序的确很方便,可是要写出一个 Makefile 就不那么简单了。GNU Make 那份几百页的文件,让许多人害怕。当然,现在关于 make的文档比较多,不过写一个 Makefile 总是一件很烦人的事情,GNU Autoconf 及Automake 这两个软件就是帮助程序开发者轻松产生 Makefile 文件的。现在的 GNU 软件如 Apache, MySQL Minigui 等都是利用 Autoconf,Automake实现自动编译的。用户只要使用 “./configure”, “make”, “make install” 就可以把程序安裝到系统中。
Makefile 基本上就是『目标』(target), 『关联』(dependencies) 和『动作』三者所组成的一系列规则。而 make 就是根据 Makefile 的规则决定如何编译 (compile) 和连接 (link) 程序或者其它动作。当然,make 可做的不只是编译和连接程序,例如 FreeBSD 的 port collection 中 ,Makefile 还可以做到自动下载远程程序,解压缩 (extract) ,打补丁 (patch),设定,然后编译,安装到系统中。Makefile 基本结构虽然很简单,但是妥善运用这些规则就可以变换出许多不同的花样。却也因为这样,许多人刚开始学写 Makefile 时会觉得没有规范可以遵循,每个人写出来的 Makefile 都不大一样,不知道从哪里下手,而且常常会受到开发环境的限制,只要环境参数不同或者路径更改,可能 Makefile 就得跟着修改。虽然有 GNU MakefileConventions (GNU Makefile 惯例)制订出一些在进行 GNU 程序设计时写 Makefile 的一些标准和规范,但是其内容很长而且很复杂,并且经常作一些调整,为了减轻程序开发人员维护 Makefile 的负担,就出现了 Automake。利用 Automake,编程者只需要写一些预先定义好的宏 (macro),提交给 Automake 处理,就会产生一个可以供Autoconf 使用的 Makefile.in 文件。再配合使用 Autoconf 产生的自动配置文件 configure 即可产生一份符合 GNUMakefile 惯例的 Makeifle 了。
'''
二进制格式:
源程序-->编译-->二进制格式
有些特性是编译选定的,如果编译未选定此特性,将无法使用;
rpm包的版本会落后于源码包,甚至落后很多:bind-9.8.7, bind-9.7.2
定制:手动编译安装
编译环境,开发环境
开发库,开发工具
Linux:C,
GNU:C
gcc(编译器):GNU C Complier,C
g++:C++编译器
make:C或者C++项目管理工具,将多个不同的项目文件做成一个项目,并且将这个项目的编译过程通过一个配置文件来提供;这个配置文件叫做makefile.
makefile:定义了make按何种次序去编译这些源程序文件中的源程序,make调用gcc或者g++
automake,--> makefile.in(半成品,指定如何编译,无法和用户交互)
autoconf(给我们的项目生成一个编译的脚本)-->configure(可以和用户交互,提供的脚可以让用户选择使用哪些特性)
perl,java,python
# 编译安装的三步骤:
前提:准备开发环境(编译环境)
安装"Debelopment Tools"和"Development Libraries" # yum groupinstall "Development Tools" "Development Libraries" -y
1. tar xf... # 解压
2. cd 到解压后的文件中
3. ./configure
--help
--prefix=/path/to/somewhere
--sysconfdir=/PATH/TO/CONFFILE_PATH # 指定了各文件装在什么路径下
功能:1. 让用户选定编译特性;2. 检查编译环境;
3. make
4. make install # 将库文件、帮助文件、配置文件放到指定的路径下
1.修改PATH环境变量,以能够识别此程序的二进制文件路径;
修改/etc/profile文件
或者在/etc/profile.d/目录中建立一个以.sh为名称后缀的文件,在里面定义 export PATH=$PATH:/path/to/somewhere
2.默认情况下,系统搜索库文件的路径/lib, /usr/lib; 要增添额外搜寻路径;
在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中;
# ldconfig 通知系统重新搜寻库文件
-v : 显示重新搜寻库的过程
3.头文件:输入给系统
默认:/usr/include
增添头文件搜寻路径,使用链接进行:
/usr/local/tengine/include /usr/include
ln -s /usr/local/tengine/include/* /usr/include 或
ln -s /usr/local/tengine/include /usr/include/tengine
4. man文件路径: 安装在--prefix指定的目录下的man目录:/usr/share/man
1.man -M /PATH/TO/MAN_DIR COMMAND
2.在/etc/man.config中添加一条MANPATH
netstat命令
netstat
-r # 显示路由表,如果是主机名,则显示主机名
-rn # 显示路由表,将主机名以IP地址的方式显示
-t # 显示建立tcp相关的链接
-u # 显示udp连接
-l:# 显示监听状态的连接
-p: # 显示监听指定的套接字的进程的进程号及进程名
脚本练习
写一个脚本,完成以下功能:
说明:此脚本能与同一个repo文件中创建多个yum源的指向;
1、接受一个文件名作为参数,此文件存放至/etc/yum.repos.d/目录中,且文件名以.repo为后缀;要求:此文件不能事先存,否则,报错;
2、在脚本中,提醒用户数据repo id:如果为quit,则退出脚本;否则,继续完成下面的步骤;
3、repo name 以及baseurl的路径,而后以repo文件的格式将其保存至指定的文件中;
4、enabled默认为1,而gpgcheck默认设定为0;
5、此脚本会循环执行多次,除非用户为repo id 指定为quit;
#!/bin/bash
#
REPOFILE=/etc/yum.repos.d/$1
if [ -e $REPOFILE ];then
echo "$REPOFILE exists."
exit 3
fi
read -p "Repository ID:" REPOID
until [ $REPOID == 'quit' ];do
echo $REPOID >> $REPOFILE
read -p "Repository name:" REPONAME
echo "name=$REPONAME" >> $REPOFILE
read -p "Repository Baseurl:" REPOURL
echo"baseurl= $REPOURL" >> $REPOFILE
echo -e 'enabled=1\nngpgcheck=0' >> $REPOFILE
read -p "Repository ID:" REPOID
done
写一个脚本,完成以下功能:
说明:此脚本能够为指定网卡创建别名,则指定地址;使用格式如:mkethalias.sh -v|--verbose -i ethX
1.-i选项用于指定网卡;指定完成后,要判断其是否存在,如果不存在,就退出;
2.如果用户指定的网卡存在,则让用户为其指定一个别名,此别名可以为空:如果不空,请确保其事先不存在,否则,要报错,并让用户重新输入;
3.在用户输入了一个正确的别名后,请用户输入地址和掩码:并将其配置在指定的别名上;
4.如果用户使用了-u 选项:则在配置完成后,显示其配置结果信息,否则,将不显示;
写一个脚本:
1.判断一个指定的bash脚本是否有语法错误:如果有错误,则提醒用户键入Q或者q无视并退出,其他任何键可以通过vim打开这个指定的脚本;
2. 如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出;
./syntax.sh a.sh
bash -n $1
#!/bin/bash
#
until bash -n $1 &> /dev/null;do
read -p "Syntax error,[Qq] to quit,others for editing:" CHOICE
case $CHOICE in
q|Q)
echo "Something wrong,quiting."
exit 5
;;
*)
vim + $1
;;
esac
done
while 特殊用法
使用while循环读取一个文件,并对文件中的每一行做处理。
while read LINE; do
done < /PATH/TO/SOMEPATH
将文件中的内容按照单行读入的方式,保存到LINE中,并可以在循环体中对单行内容做处理。
#!/bin/bash
#
FILE=/etc/passwd
let I=0
while read LINE;do
[ `echo $LINE | awk -F : '{print $3}'` -le 505 ] && continue
[ `echo $LINE | awk -F : '{print $7}'` == '/bin/bash' ] && echo $LINE | awk -F : '{print $1}' && let I++
[ $I -gt 6 ] && break
done < $FILE