欢迎来到皮皮网网首页

【源码 美团】【mid主图源码】【个股短线公式源码】search源码安装

来源:arp攻击源码 时间:2024-11-25 03:39:02

1.go-iptables功能与源码详解
2.Linux常用命令大全 Linux常用命令全集
3.centos5 源码安装Nginx + mysql + apache + php的源码方法
4.CentOS常用基础命令汇总
5.手把手教你微调百亿大模型:基于Firefly微调Qwen1.5-14b
6.ubuntu平台如何使用命令下载软件

search源码安装

go-iptables功能与源码详解

       介绍iptables之前我们先搬出他的父亲netfilter,netfilter是安装基于 Linux 2.4.x或更新的内核,提供了一系列报文处理的源码能力(过滤+改包+连接跟踪),具体来讲可以包含以下几个功能:

       其实说白了,安装netfilter就是源码操作系统实现了网络防火墙的能力(连接跟踪+过滤+改包),而iptables就是安装源码 美团用户态操作内核中防火墙能力的命令行工具,位于用户空间。源码快问快答,安装为啥计算机系统需要内核态和用户态(狗头)。源码

       既然netfilter是安装对报文进行处理,那么我们就应该先了解一下内核是源码如何进行收发包的,发生报文大致流程如下:

       netfilter框架就是安装作用于网络层中,在一些关键的源码报文收发处理路径上,加一些hook点,安装可以认为是源码一个个检查点,有的在主机外报文进入的位置(PREROUTING ),有的在经过路由发觉要进入本机用户态处理之前(INPUT ),有的在用户态处理完成后发出的地方(OUTPUT ),有的在报文经过路由并且发觉不是本机决定转发走的位置(FOWARD ),有的在路由转发之后出口的位置(POSTROUTING ),每个检查点有不同的规则集合,这些规则会有一定的优先级顺序,如果报文达到匹配条件(五元组之类的)且优先级最高的规则(序号越小优先级越高),内核会执行规则对应的动作,比如说拒绝,放行,记录日志,丢弃。

       最后总结如下图所示,里面包含了netfilter框架中,mid主图源码报文在网络层先后经过的一些hook点:

       报文转发视角:

       iptables命令行工具管理视角:

       规则种类:

       流入本机路径:

       经过本机路径:

       流出本机路径:

       由上一章节我们已经知道了iptables是用户态的命令行工具,目的就是为了方便我们在各个检查点增删改查不同种类的规则,命令的格式大致如下,简单理解就是针对具体的哪些流(五元组+某些特定协议还会有更细分的匹配条件,比如说只针对tcp syn报文)进行怎样的动作(端口ip转换或者阻拦放行):

       2.1 最基本的增删改查

       增删改查的命令,我们以最常用的filter规则为例,就是最基本的防火墙过滤功能,实验环境我先准备了一个centos7的docker跑起来(docker好啊,实验完了直接删掉,不伤害本机),并通过iptables配置一些命令,然后通过主机向该docker发生ping包,测试增删改查的filter规则是否生效。

       1.查询

       如果有规则会把他的序号显示出来,后面插入或者删除可以用 iptables -nvL -t filter --line​

       可以看出filter规则可以挂载在INPUT,FORWARD,OUTPUT检查点上,并且兜底的规则都是ACCEPT,也就是没有匹配到其他规则就全部放行,这个兜底规则是可以修改的。 我们通过ifconfig查看出docker的ip,然后主机去ping一波:​

       然后再去查一下,会发现 packets, bytes ---> 对应规则匹配到的报文的个数/字节数:

       2. 新增+删除 新增一条拒绝的报文,我们直接把docker0网关ip给禁了,这样就无法通过主机ping通docker容器了(如果有疑问,下面有解答,会涉及docker的一些小姿势): iptables -I INPUT -s ..0.1 -j DROP (-I不指定序号的话就是头插) iptables -t filter -D INPUT 1​

       可见已经生效了,拦截了ping包,随后我删除了这条规则,个股短线公式源码又能够ping通了

       3. 修改 通过-R可以进行规则修改,但能修改的部分比较少,只能改action,所以我的建议是先通过编号删除规则,再在原编号位置添加一条规则。

       4. 持久化 当我们对规则进行了修改以后,如果想要修改永久生效,必须使用service iptables save保存规则,当然,如果你误操作了规则,但是并没有保存,那么使用service iptables restart命令重启iptables以后,规则会再次回到上次保存/etc/sysconfig/iptables文件时的模样。

       再使用service iptables save命令保存iptables规则

       5. 自定义链 我们可以创建自己的规则集,这样统一管理会非常方便,比如说,我现在要创建一系列的web服务相关的规则集,但我查询一波INPUT链一看,妈哎,条规则,这条规则有针对mail服务的,有针对sshd服务的,有针对私网IP的,有针对公网IP的,我这看一遍下来头都大了,所以就产生了一个非常合理的需求,就是我能不能创建自己的规则集,然后让这些检查点引用,答案是向上突破指标源码可以的: iptables -t filter -N MY_WEB

       iptables -t filter -I INPUT -p tcp --dport -j MY_WEB

       这就相当于tcp目的端口的报文会被送入到MY_WEB规则集中进行匹配了,后面有陆续新规则进行增删时,完全可以只针对MY_WEB进行维护。 还有不少命令,详见这位大佬的总结:

       回过头来,讲一个关于docker的小知识点,就是容器和如何通过主机通讯的?

       这就是veth-pair技术,一端连接彼此,一端连接协议栈,evth—pair 充当一个桥梁,连接各种虚拟网络设备的。

       我们在容器内和主机敲一下ifconfig:

       看到了吧,容器内的eth0和主机的vetha9就是成对出现的,然后各个主机的虚拟网卡通过docker0互联,也实现了容器间的通信,大致如下:

       我们抓个包看一哈:

       可以看出都是通过docker0网关转发的:

       最后引用一波 朱老板总结的常用套路,作为本章结尾:

       1、规则的顺序非常重要。

       如果报文已经被前面的规则匹配到,IPTABLES则会对报文执行对应的动作,通常是ACCEPT或者REJECT,报文被放行或拒绝以后,即使后面的规则也能匹配到刚才放行或拒绝的报文,也没有机会再对报文执行相应的动作了(前面规则的动作为LOG时除外),所以,针对相同服务的规则,更严格的规则应该放在前面。

       2、当规则中有多个匹配条件时,条件之间默认存在“与”的直播源码开发功能关系。

       如果一条规则中包含了多个匹配条件,那么报文必须同时满足这个规则中的所有匹配条件,报文才能被这条规则匹配到。

       3、在不考虑1的情况下,应该将更容易被匹配到的规则放置在前面。

       4、当IPTABLES所在主机作为网络防火墙时,在配置规则时,应着重考虑方向性,双向都要考虑,从外到内,从内到外。

       5、在配置IPTABLES白名单时,往往会将链的默认策略设置为ACCEPT,通过在链的最后设置REJECT规则实现白名单机制,而不是将链的默认策略设置为DROP,如果将链的默认策略设置为DROP,当链中的规则被清空时,管理员的请求也将会被DROP掉。

       3. go-iptables安装

       go-iptables是组件库,直接一波import " github.com/coreos/go-ip..."​,然后go mod tidy一番,就准备兴致冲冲的跑一波自带的测试用例集,没想到上来就是4个error:

       这还了得,我直接去go-iptables的仓库issue上瞅瞅有没有同道中人,果然发现一个类似问题:

       虽然都是test failures,但是错的原因是不一样的,但是看他的版本是1.8的,所以我怀疑是我的iptables的版本太老了,一个iptables -v看一眼:

       直接用yum update好像不能升级,yum search也没看到最新版本,看来只能下载iptables源码自己编译了,一套连招先打出来:

       不出意外的话,那就得出点意外了:

       那就继续下载源码安装吧,然后发现libmnl 又依赖libnftnl ,所以直接一波大招,netfilter全家桶全安装:

       Finally,再跑一次测试用例就成功了,下面就可以愉快的阅读源码了:

       4. 如何使用go-iptables

       5. go-iptables源码分析

       关键结构体IPTables

       初始化函数func New(opts ...option) (*IPTables, error) ,流程如下:

       几个重要函数的实现:

       其他好像也米有什么,这里面就主要介绍一下,他的命令行执行是怎么实现的:

       6. Reference

Linux常用命令大全 Linux常用命令全集

       Linux常用命令全集 blogs.com/

       3] mhash库

       复制代码

           

       代码如下:

       tar zxvf mhash-0.9.9.9.tar.gz

           cd mhash-0.9.9.9/

           ./configure

           make

           make install

           cd ../

       4]mcrypt库

       注意:因为该库和libmcrypt有依赖性,所以在安装前必须知道libmcrypt,否则的话会出现:

       错误

       复制代码

           

       代码如下:

       checking for libmcrypt – version = 2.5.0…

           *** ‘libmcrypt-config –version’ returned 2.4.0, but LIBMCRYPT (2.5.8)

           *** was found! If libmcrypt-config was correct, then it is best

           *** to remove the old version of LIBMCRYPT. You may also be able to fix the error

           *** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing

           *** /etc/ld.so.conf. Make sure you have run ldconfig if that is

           *** required on your system.

           *** If libmcrypt-config was wrong, set the environment variable LIBMCRYPT_CONFIG

           *** to point to the correct copy of libmcrypt-config, and remove the file config.cache

           *** before re-running configure

           configure: error: *** libmcrypt was not found

       是因为path的问题,所以执行:

       复制代码

           

       代码如下:

       ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la

           ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so

           ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4

           ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8

           ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a

           ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la

           ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so

           ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

           ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

           ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config

       然后再安装:

       复制代码

           

       代码如下:

       tar zxvf mcrypt-2.6.8.tar.gz

           cd mcrypt-2.6.8/

           /sbin/ldconfig

           ./configure

           make

           make install

           cd ../

       二、安装mysql

       复制代码

           

       代码如下:

       /usr/sbin/groupadd mysql

           /usr/sbin/useradd -g mysql xxx

           unzip mysql-5.1..zip

           cd mysql-5.1./

           ./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables

           --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=innobase

           make

           make install

           make clean

           make distclean

           chmod +w /usr/local/webserver/mysql

           chown -R xxx:mysql /usr/local/webserver/mysql

           cp support-files/my-medium.cnf.sh /usr/local/webserver/mysql/my.cnf

           cd ../

       注意:这里编译./configure命令是一行的而不能有换行符,如果是copy的时候,注意要去处该换行符

       在最后一步拷贝的时候,我安装完在support-files下没有my-medium.cnf而只有my-medium.cnf.sh所以将这个文件拷贝过去。

       @张宴原文:

       附:以下为附加步骤,如果你想在这台服务器上运行MySQL数据库,则执行以下两步。如果你只是希望让PHP支持MySQL扩展库,能够连接其他服务器上的MySQL数据库,那么,以下两步无需执行。

       ①、以xxx用户帐号的身份建立数据表:

       复制代码

           

       代码如下:

       /usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/usr/local/webserver/mysql/data --user=xxx

       ②、启动MySQL(最后的表示在后台运行)

       复制代码

           

       代码如下:

       /bin/sh /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/usr/local/webserver/mysql/my.cnf

       3、编译安装PHP(FastCGI模式)

       复制代码

           

       代码如下:

       tar zxvf php-5.2.8.tar.gz

           gzip -cd php-5.2.8-fpm-0.5..diff.gz | patch -d php-5.2.8 -p1

           cd php-5.2.8/

           ./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql

           --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib

           --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem

           --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect

           --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap

           --with-ldap-sasl

           make ZEND_EXTRA_LIBS='-liconv'

           make install

           cp php.ini-dist /usr/local/webserver/php/etc/php.ini

           cd ../

       注意:这里./configure命令是一行的而不能有换行符,如果是copy的时候,注意要去处该换行符

       4、编译安装PHP5扩展模块--可选安装

       复制代码

           

       代码如下:

       tar zxvf memcache-2.2.5.tgz

           cd memcache-2.2.5/

           /usr/local/webserver/php/bin/phpize

           ./configure --with-php-config=/usr/local/webserver/php/bin/php-config

           make

           make install

           make clean

           make distclean

           cd ../

           tar jxvf eaccelerator-0.9.5.3.tar.bz2

           cd eaccelerator-0.9.5.3/

           /usr/local/webserver/php/bin/phpize

           ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config

           make

           make install

           make clean

           make distclean

           cd ../

           tar zxvf PDO_MYSQL-1.0.2.tgz

           cd PDO_MYSQL-1.0.2/

           /usr/local/webserver/php/bin/phpize

           ./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql

           make

           make install

           make clean

           make distclean

           cd ../

           tar zxvf ImageMagick.tar.gz

           cd ImageMagick-6.5.1-2/

           ./configure

           make

           make install

           make clean

           make distclean

           cd ../

           tar zxvf imagick-2.2.2.tgz

           cd imagick-2.2.2/

           /usr/local/webserver/php/bin/phpize

           ./configure --with-php-config=/usr/local/webserver/php/bin/php-config

           make

           make install

           make clean

           make distclean

           cd ../

       5、修改php.ini文件

       STRONG手工修改:/STRONG查找/usr/local/webserver/php/etc/php.ini中的extension_dir = "./"

       修改为extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-/"

       并在此行后增加以下几行,然后保存:

       extension = "memcache.so"

       extension = "pdo_mysql.so"

       extension = "imagick.so"

       再查找output_buffering = Off

       修改为output_buffering = On

       6、配置eAccelerator加速PHP:

       mkdir -p /usr/local/webserver/eaccelerator_cache

       vi /usr/local/webserver/php/etc/php.ini

       按shift+g键跳到配置文件的最末尾,加上以下配置信息:

       复制代码

           

       代码如下:

       [eaccelerator]

           zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-/eaccelerator.so"

           eaccelerator.shm_size=""

           eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"

           eaccelerator.enable="1"

           eaccelerator.optimizer="1"

           eaccelerator.check_mtime="1"

           eaccelerator.debug="0"

           eaccelerator.filter=""

           eaccelerator.shm_max="0"

           eaccelerator.shm_ttl=""

           eaccelerator.shm_prune_period=""

           eaccelerator.shm_only="0"

           eaccelerator.compress="1"

           eaccelerator.compress_level="9"

       修改配置文件:

       vi /etc/sysctl.conf

       kernel.shmmax =

       然后执行以下命令使配置生效:/sbin/sysctl -p

       以下的步骤和张宴步骤中一样配置,不再赘诉

CentOS常用基础命令汇总

       1.关机 (系统的关机、重启以及登出 ) 的命令

       shutdown -h now 关闭系统(1)

       init 0 关闭系统(2)

       telinit 0 关闭系统(3)

       shutdown -h hours:minutes 按预定时间关闭系统

       shutdown -c 取消按预定时间关闭系统

       shutdown -r now 重启(1)

       reboot 重启(2)

       logout 注销

       2.查看系统信息的命令

       arch 显示机器的处理器架构(1)

       uname -m 显示机器的处理器架构(2)

       uname -r 显示正在使用的内核版本

       dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)

       hdparm -i /dev/hda 罗列一个磁盘的架构特性

       hdparm -tT /dev/sda 在磁盘上执行测试性读取操作

       cat /proc/cpuinfo 显示CPU info的信息

       cat /proc/interrupts 显示中断

       cat /proc/meminfo 校验内存使用

       cat /proc/swaps 显示哪些swap被使用

       cat /proc/version 显示内核的版本

       cat /proc/net/dev 显示网络适配器及统计

       cat /proc/mounts 显示已加载的文件系统

       lspci -tv 罗列 PCI 设备

       lsusb -tv 显示 USB 设备

       date 显示系统日期

       cal 显示年的日历表

       date . 设置日期和时间 - 月日时分年.秒

       clock -w 将时间修改保存到 BIOS

       3.文件和目录操作命令

       cd /home 进入 '/ home' 目录'

       cd .. 返回上一级目录

       cd ../.. 返回上两级目录

       cd 进入个人的主目录

       cd ~user1 进入个人的主目录

       cd - 返回上次所在的目录

       pwd 显示工作路径

       ls 查看目录中的文件

       ls -F 查看目录中的文件

       ls -l 显示文件和目录的详细资料

       ls -a 显示隐藏文件

       mkdir dir1 创建一个叫做 'dir1' 的目录'

       mkdir dir1 dir2 同时创建两个目录

       mkdir -p /tmp/dir1/dir2 创建一个目录树

       rm -f file1 删除一个叫做 'file1' 的文件'

       rmdir dir1 删除一个叫做 'dir1' 的目录'

       rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容

       rm -rf dir1 dir2 同时删除两个目录及它们的内容

       mv dir1 new_dir 重命名/移动 一个目录

       cp file1 file2 复制一个文件

       cp dir/* . 复制一个目录下的所有文件到当前工作目录

       cp -a /tmp/dir1 . 复制一个目录到当前工作目录

       cp -a dir1 dir2 复制一个目录

       ln -s file1 lnk1 创建一个指向文件或目录的软链接

       ln file1 lnk1 创建一个指向文件或目录的物理链接

       touch file1 创建一个文件

       4.文件搜索命令

       find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录

       find / -user user1 搜索属于用户 'user1' 的文件和目录

       find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件

       find /usr/bin -type f -atime + 搜索在过去天内未被使用过的执行文件

       find /usr/bin -type f -mtime - 搜索在天内被创建或者修改过的文件

       locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令

       whereis file 显示一个二进制文件、源码或man的位置

       which file 显示一个二进制文件或可执行文件的完整路径

       5.查看文件内容

       cat file1 从第一个字节开始正向查看文件的内容

       tac file1 从最后一行开始反向查看一个文件的内容

       more file1 查看一个长文件的内容

       less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作

       head -2 file1 查看一个文件的前两行

       tail -2 file1 查看一个文件的最后两行 5.挂载命令

       mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 (注:确定目录 '/ mnt/hda2' 已经存在)

       umount /dev/hda2 卸载一个叫做hda2的盘 (先从挂载点 '/ mnt/hda2' 退出)

       fuser -km /mnt/hda2 当设备繁忙时强制卸载

       umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件(当文件为只读或当磁盘写满时非常有用)

       mount /dev/fd0 /mnt/floppy 挂载一个软盘

       mount /dev/cdrom /mnt/cdrom 挂载一个光盘

       mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom

       mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom

       mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件

       mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT文件系统

       mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备

       mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享

       6.磁盘空间操作的命令

       df -h 显示已经挂载的分区列表

       ls -lSr |more 以尺寸大小排列文件和目录

       du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间'

       du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小

       7.用户和群组相关命令

       groupadd group_name 创建一个新用户组

       groupdel group_name 删除一个用户组

       groupmod -n new_group_name old_group_name 重命名一个用户组

       useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户

       useradd user1 创建一个新用户

       userdel -r user1 删除一个用户 ( '-r' 同时删除除主目录)

       passwd user1 修改一个用户的口令 (只允许root执行)

       chage -E -- user1 设置用户口令的失效期限

       ls -lh 显示权限

       chmod directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限

       chmod directory1 删除群组(g)与其他人(o)对目录的读写执行权限

       chown user1 file1 改变一个文件的所有人属性,为use1。

       chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性都为use1所有

       chgrp group1 file1 改变文件的群组为group1

       chown user1:group1 file1 改变一个文件的所有人和群组属性,所属组为group1,用户为use1。

       find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件

       chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限

       chmod u-s /bin/file1 禁用一个二进制文件的 SUID位

       chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的

       chmod g-s /home/public 禁用一个目录的 SGID 位

       chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件

       chmod o-t /home/public 禁用一个目录的 STIKY 位

       8.打包和解压缩文件的命令

       bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件

       bzip2 file1 压缩一个叫做 'file1' 的文件

       gunzip file1.gz 解压一个叫做 'file1.gz'的文件

       gzip file1 压缩一个叫做 'file1'的文件

       gzip -9 file1 最大程度压缩

       rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包

       rar a file1.rar file1 file2 dir1 打包 'file1', 'file2' 以及目录 'dir1'

       rar x file1.rar 解rar包

       unrar x file1.rar 解rar包

       tar -cvf archive.tar file1 创建一个非压缩的tar包

       tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 'dir1'的包

       tar -tf archive.tar 显示一个包中的内容

       tar -xvf archive.tar 释放一个包

       tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下 (-c是指定目录)

       tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包

       tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包

       tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包

       tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包

       zip file1.zip file1 创建一个zip格式的压缩包

       zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包

       unzip file1.zip 解压一个zip格式压缩包

       9.关于RPM 包的命令

       rpm -ivh package.rpm 安装一个rpm包

       rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告

       rpm -U package.rpm 更新一个rpm包但不改变其配置文件

       rpm -F package.rpm 更新一个确定已经安装的rpm包

       rpm -e package_name.rpm 删除一个rpm包

       rpm -qa 显示系统中所有已经安装的rpm包

       rpm -qa | grep /yangjianxin1/Firefly

       1. 安装环境

       假定读者具备一定的python编程基础,直接跳过python、cuda、git等编程环境和工具的安装教程。

       首先,将Firefly项目代码库clone至本地:

       1. 进入项目目录

       2. 创建相应的虚拟环境

       3. 安装相应的python包

       确保使用源码安装所有包,避免不必要的麻烦。推荐torch版本为1.3,避免使用2.0。

       2. 准备训练集

       Firefly项目提供多个高质量指令数据集,推荐使用moss数据集,数据集下载地址在Github项目地址中。

       训练数据为jsonl格式,每行为一个多轮对话,conversation字段是必需的,可根据实际需求添加或删除其他字段。

       也可使用自定义数据,只需整理成指定格式即可。在项目的data/dummy_data.jsonl文件中存放了调试数据,可用于代码调试。

       3. 配置训练参数

       所有训练参数配置存储在train_args目录,便于统一管理。以微调Qwen1.5-b为例,参数配置文件路径为train_args/qlora/qwen1.5-b-sft-qlora.json,可根据硬件条件调整文件中的训练参数。

       训练参数详细说明如下:

       在微调Qwen1.5-b时,训练配置如下,需根据实际情况调整:

       model_name_or_path:可指定huggingface模型仓库名称或本地模型路径。使用huggingface仓库名称时,训练脚本会自动下载权重、tokenizer和代码等。本地访问较慢时,建议先下载模型至本地,使用本地路径。

       如遇到OOM问题,可调整max_seq_length、per_device_train_batch_size等参数缓解。开启gradient_checkpointing参数可大幅降低显存占用,但会减慢训练速度。

       4. 启动训练

       执行以下脚本启动训练,num_gpus表示训练使用的显卡数量。全球批大小为per_device_train_batch_size * gradient_accumulation_steps * num_gpus。

       在RTX上训练7B模型,每个step大约秒,B模型每个step大约秒。

       5. 合并权重

       训练中仅保存adapter的权重,不保存合并后的模型权重。训练结束后,手动将adapter与base model的权重合并。adapter权重保存至output_dir指定目录,执行script目录下的merge_lora.py脚本获取合并后的模型权重。

       注意:Qwen1.5-b等模型自定义了结构和tokenizer,代码未合并至transformers库中。合并权重后,需复制huggingface模型仓库中的python文件至合并权重目录,否则加载合并模型进行推理时会出错。

       权重合并脚本如下,请根据实际的base model和adapter保存路径,调整save_path、adapter_name_or_path、model_name_or_path等参数。

       6. 模型推理

       完成权重合并后,即可使用模型进行推理。项目提供单轮对话和多轮对话脚本,详情参见script/chat目录。该脚本兼容本项目训练的所有模型。

       生成脚本中的top_p、repetition_penalty、temperature、do_sample等参数对生成效果影响显著,根据使用场景进行调整。

       推理阶段,模型的解码方式对生成效果影响巨大,常用解码方式包括Greedy Search、Beam Search、Top-K Sampling、Top-P Sampling、Contrastive Search等。

       目前主流模型多采用Top-P Sampling,具有随机性,能提高丰富度,降低重复输出,本项目也使用此方式。Contrastive Search也值得尝试,是一种确定性解码算法。

       解码方式值得深入探讨,有兴趣的读者后续可关注。

       单轮对话:

       多轮对话:

       7. 结语

       本文详细介绍了使用Firefly项目微调Qwen1.5-b模型的步骤,希望读者按照本教程逐步操作,顺利完成大模型的训练。

ubuntu平台如何使用命令下载软件

       1. 使用apt-get install来安装应用程序是最常见的一种安装方法,比如要安装buildessential这个软件,使用以下,他会帮我把所有的依赖包都一起安装了。

       sudo apt-get install build-essential

       æ‰§è¡Œä¸Šè¿°å‘½ä»¤ä»¥åŽï¼Œæˆ‘们可以看到一下信息:

       The following extra packages will be installed:表示所有需要再安装的依赖包。

       sudo apt-get install build-essential

       [sudo] password for enadmin:

       Reading package lists... Done

       Building dependency tree

       Reading state information... Done

       The following extra packages will be installed:

       binutils cpp cpp-4.6 dpkg-dev fakeroot g++ g++-4.6 gcc gcc-4.6

       libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl

       libc-bin libc-dev-bin libc6 libc6-dev libdpkg-perl libgomp1 libmpc2 libmpfr4

       libquadmath0 libstdc++6-4.6-dev linux-libc-dev manpages-dev

       Suggested packages:

       binutils-doc cpp-doc gcc-4.6-locales debian-keyring g++-multilib

       g++-4.6-multilib gcc-4.6-doc libstdc++6-4.6-dbg gcc-multilib autoconf

       automake1.9 libtool flex bison gdb gcc-doc gcc-4.6-multilib

       libmudflap0-4.6-dev libgcc1-dbg libgomp1-dbg libquadmath0-dbg

       libmudflap0-dbg binutils-gold glibc-doc libstdc++6-4.6-doc

       The following NEW packages will be installed:

       binutils build-essential cpp cpp-4.6 dpkg-dev fakeroot g++ g++-4.6 gcc

       gcc-4.6 libalgorithm-diff-perl libalgorithm-diff-xs-perl

       libalgorithm-merge-perl libc-dev-bin libc6-dev libdpkg-perl libgomp1 libmpc2

       libmpfr4 libquadmath0 libstdc++6-4.6-dev linux-libc-dev manpages-dev

       The following packages will be upgraded:

       libc-bin libc6

       2 upgraded, newly installed, 0 to remove and not upgraded.

       Need to get .3 MB of archives.

       After this operation, .6 MB of additional disk space will be used.

       Do you want to continue [Y/n]? y

       ä¸‹é¢ç»™å‡ºapt-get的的各种参数:

       apt-get install xxx 安装xxx 。如果带有参数,那么-d 表示仅下载 ,-f 表示强制安装

       apt-get remove xxx 卸载xxx

       apt-get update 更新软件信息数据库

       apt-get upgrade 进行系统升级

       apt-cache search 搜索软件包

       Tips:建议您经常使用“apt-get update”命令来更新您的软件信息数据库 。

       apt-get理论上是要求能够联网,但是如果制作了本地源,就不需要联网,制作本地源可以参考:ubuntu制作本地源。

       2. dpkg安装deb包

       Ubuntu软件包格式为deb,安装方法如下:

       sudo dpkg -i package.deb

       dpkg的详细使用方法,网上有很多,下面简单列了几个:

       dpkg -i package.deb 安装包

       dpkg -r package 删除包

       dpkg -P package 删除包(包括配置文件)

       dpkg -L package 列出与该包关联的文件

       dpkg -l package 显示该包的版本

       dpkg –unpack package.deb 解开 deb 包的内容

       dpkg -S keyword 搜索所属的包内容

       dpkg -l 列出当前已安装的包

       dpkg -c package.deb 列出 deb 包的内容

       dpkg –configure package 配置包

       æ ¹æ®Ubuntu中文论坛上介绍,使用apt-get方法安装的软件,所有下载的deb包都缓存到了/var/cache/apt/archives目录下了,所以可以把常用的deb包备份出来,甚至做成ISO工具包、刻盘,以后安装Ubuntu时就可以在没有网络环境的情况下进行了。下面的命令是拷贝archives这个目录到/var/cache/apt/目录下,替换原有的archives

       enadmin@ubuntu-server:~/ftp$ sudo cp -r archives/ /var/cache/apt/

       3. make install源代码安装。

       å¦‚果要使用make安装的话,那么必须得安装build-essential这个依赖包,安装方法已经在前面说过了。在安装完毕以后,我们就可以进行源码安装。源码安装大致可以分为三步骤:(./configure)–> 编译(sudo make) –> 安装(sudo make install)。

       é…ç½®ï¼šè¿™æ˜¯ç¼–译源代码的第一步,通过 ./configure 命令完成。执行此步以便为编译源代码作准备。常用的选项有 --prefix=PREFIX,用以指定程序的安装位置。更多的选项可通过 --help 查询。也有某些程序无需执行此步。

       ç¼–译:一旦配置通过,可即刻使用 make 指令来执行源代码的编译过程。视软件的具体情况而定,编译所需的时间也各有差异,我们所要做的就是耐心等候和静观其变。此步虽然仅下简单的指令,但有时候所遇到的问题却十分复杂。较常碰到的情形是程序编译到中途却无法圆满结束。此时,需要根据出错提示分析以便找到应对之策。

       å®‰è£…:如果编译没有问题,那么执行 sudo make install 就可以将程序安装到系统中了。

       ä¸‹é¢ä»¥å®‰è£…nagios为例进行说明。

       //1.解压缩

       tar -zxf nagios-4.0.2.tar.gz

       //2.进入目录

       cd nagios-4.0.2

       //3.配置

       ./configure --prefix=/usr/local/nagios

       //4.编译

       make all

       //5.安装

       make install && make install-init && make install-commandmode && make install-config

       ä»¥ä¸Šå°±æ˜¯æºä»£ç å®‰è£…方式。