wordpress_学习_服务器测评_云运维-centos_配置_学习-阿里云活动-腾讯云活动-站长资料-学派网wordpress_学习_服务器测评_云运维-centos_配置_学习-阿里云活动-腾讯云活动-站长资料-学派网

欢迎光临
我们一直在努力

学派吧-详解linux 删除换行符的方法-linux教程

这篇文章主要介绍了linux 删除换行符的方法小结,需要的朋友可以参考下 今天需要删除文件里面的换行符,比如有一个文件a.txt: 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 1、使用vim删除换行符 vim输入命令:%s/\n//g 2、使用sed命令,例如 sed ':t;N;s/\n//;b t' a.txt 结果:1,2,34,5,61,2,34,5,61,2,34,5,61,2,34,5,61,2,34,5,6 解释一下: :t 定义label "t" b t 转到label "t" 继续执行 N 先读入一行到sed的模板空间,加个换行符(\n),再向sed模板空间追加下一行(之后sed 对模板空间中的内容执行s/\n/,/替换,并显示替换后的内容) 3、使用td命令,例如: cat a.txt | tr '\n' ' ' 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 注意tr最后那个参数是空格,否则会报错 Linux shell 中删除文件的所有换行符 需要做一个小功能,就是把一个文本文件中的所有换行符都去掉。一般肯定是想到使用sed来修改啦。但是我搜了一下,并没有找到sed要怎么输入\n——我知道^M对应的是\r,但是\n却失败了,在命令行中直接被切割掉。  原则上可以用\015这样的方式来指定的,但是我实际操作发现并不行,没有效果。所以最终我只能用直接输入命令来做了(还没验证过写成脚本是否能用)。 假设要替换的文件叫做in.txt,输出文件为out.txt: sed 's/^M//g' file.txt > tmp.txt sed -i 's/\"/\\\"/g' tmp.txt rm -f out.txt; touch out.txt cat tmp.txt | xargs echo -n >> out.txt rm -f tmp.txt 五个步骤分别为: 将Windows格式的换行转换成UNIX格式,也就是删除所有的\r字符。其中^M并不是直接输入这两个字符,而是通过在shell里面按住 Ctrl+V,然后再敲 M 得到的将所有的双引号转义,因为后面的echo需要使用创建一个全空的输出文件删除所有的\n字符并输出最终文件删除中间文件 以上就是详解linux 删除换行符的方法的详细内容,更多请关注学派吧-其它相关文章!

赞(0)adminadminunix 阅读(1588)去评论
Linux中Nginx反向代理下的tomcat集群的详解-linux教程-

Linux中Nginx反向代理下的tomcat集群的详解-linux教程

本篇文章主要介绍了详解Linux中Nginx反向代理下的tomcat集群,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 Nginx具有反向代理(注意和正向代理的区别)和负载均衡等特点。 这次Nginx安装在 192.168.1.108 这台linux 机器上。安装Nginx 先要装openssl库,gcc,PCRE,zlib库等。 Tomcat 安装在192.168.1.168 和 192.168.1.178 这两台机器上。客户端通过访问192.168.1.108 反向代理访问到192.168.1.168 和 192.168.1.178 里Tomcat 部署的工程内容。 1.Linux 下安装Nginx (机器192.168.1.108) 安装openssl库。 yum install -y openssl openssl-devel 需要安装gcc:yum install gcc-c++ 安装 PCRE yum install -y pcre pcre-devel 安装zlib库 yum install -y zlib zlib-devel 装在 /usr/local/ 下 解压 tar -zxvf nginx-1.13.0.tar.gz 进入目录 运行 ./configure 产生makefile 此时目录多出了 makefile 编译make 安装:make install 完成后 local 目录下 多了个 nginx 启动 nginx 进入sbin 目录 执行./nginx 查看启动结果 Window 访问 192.168.1.108 nginx 默认端口为80 关闭 ./nginx -s stop 关闭后此时对应也无法访问 ./nginx -s reload 可以在启动后重新加载配置文件 适合于在启动会修改了配置文件 2.Linux 下安装Tomcat (192.168.1.168 和 192.168.1.178 机器) 安装过程很简单,不述说了。分别在另两台Linux 机器(192.168.1.168 和 192.168.1.178)安装Tomcat ,随便部署个工程nginxTest 一个内容是 1111……. 一个是22222……. 此时访问的是不同的IP地址,还没用Nginx 配置进去当反向代理服务器。 3. Nginx当做反向代理服务器 主要配置nginx.conf 里的内容 a. 配置服务器组,在http{}节点之间添加upstream配置。 192.168.1.168:9090 和 192.168.1.178:9191 是另两台Linux 机器的Tomcat (看上述2) upstream lxstest{ server 192.168.1.168:9090; server 192.168.1.178:9191; } b....

赞(0)adminadminunix 阅读(1828)去评论
Linux中关于别名与二进制的使用教程-linux教程-

Linux中关于别名与二进制的使用教程-linux教程

这篇文章主要给大家介绍了关于Linux中别名与二进制的使用方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 本文介绍的是关于Linux中别名与二进制使用的相关内容,分享出来给大家参考,下面来看看详细的介绍: 二进制 一般二进制这个名词听上去高深莫测,然而当你了解它之后其实并不复杂,在计算机里处理数据一般都是由二进制处理。 平时我们计数都是以10为进制,比如平时数数:1、2、3、4、5、6、7、8、9,数到10时就会导致个位变成0,十位变成了1,因为9+1要向十位进一,十进制意味着数字的每一位最小为0,最大为9。同理,二进制意味着数字的每一位最小为0,最大为1,十进制的2在二进制如何表示?1+1意味着要进一位,对于二进制来说,1+1=10,注意!这里的10不是十进制的十。当然二进制的减法原理和十进制的减法一样,10-1=1,因为0减1,所以必须借一位才能够完成这个运算。都知道0 和1,占一位有两种状态,如果两位,就是00,01,10,11,4种状态。那么它有几位和几种状态的关系是2的几次方(2^n),比如: 2的0次方是1(任何数的0次方都是1,0的0次方无意义) 2的1次方是2 2的2次方是4 2的3次方是8 2的4次方是16 2的5次方是32 2的6次方是64 2的7次方是128 2的8次方是256 2的9次方是512 2的10次方是1024 N表示二进制的位数 2^N 种组合 最大值是:2^N-1。 当然你如果实在不会算也可以使用bc,Linux下的计算器。 可以支持进制转换。 Linux 别名 1.定义 别名,英文alias。意思就像是我们的小名一样,它也是一个命令的小名。当然在Linux系统中也有一个工具叫alias,可以让我们把一些复杂,命令长度较长,经常使用的一个命令取一个小名也就是别名,这样以后我们如果要输入那些比较复杂或命令较长的命令时,就可以使用它的别名来操作,一样可以达到同样的效果。 例如:我们经常用的一个文件,cd /etc/sysconfig/network-scripts/ 这个命令就特别长,如果每次要进入这个文件都要输这么长,是不是很浪费时间?那么我们可以给它定义一个别名,比如cdnet(当然这个你可以自己选择认为好记得),当然我们可以先检查一下“cdnet”这个别名或者命令有没有重复,我们定义的别名最好不要跟系统已经定义的别名和系统的一些命令起冲突,我们可以输入你要设置的名称,现在我要设置cdnet,你可以输入cdnet然后回车,看下有没有这个命令,提示说找不到这个命令,那么你就可以使用cdnet来定义这个别名,当然我们也可以输入命令“alias”,就可以看到我们已经定义了哪些别名,以后我们添加的永久别名,也会保存在这个里面。现在我们提示没有cdnet这个命令或者别名,我们就可以使用这个用alias cdnet=‘cd /etc/sysconfig/network-scripts/'来给它建立别名,然后你在输入cdnet,跟你输入cd /etc/sysconfig/network-scripts/是完全相同的命令,这样是不是方便多了? 如图所示: 2.保存 当然现在是可以了,但是如果你退出了,就没有了,你要永久保存还需要把这个命令写到文本里面,通常是定义在自己的家目录里,因为每个人的个人习惯是不同的,定义的别名也不同,所以自己创建自己习惯的别名就好了,用ls -a 可以看到一个目录,.bashrc这个目录,我们就需要把刚刚创建的那个别名命令输入到.bashrc这个目录里,输入命令nano .bashrc进入这个文本,把刚创建的命令按它的顺序复制或者在输入一遍,CTRL+o保存,然后退出CTRL+x,一般刚刚定义完别名是不会立马生效的,一般直接exit退出就可以立即生效了,也可以用.来立即生效,输入. .bashrc就生效了,然后可以用alias来查看刚创建的别名。 如图所示: 3.取消 还有如果你需要取消一个别名,或者说不想要这个别名了,可以用unalias这个命令来删除,比如我们刚创的别名,我不想要了,可以输入unalias加上你想要删除的别名,unalias cdnet然后确定,这个你刚刚创的那个别名就没了,你可以在输入alias来查看,还有一个命令是删除所有别名,unalias -a这个命令就是删除所有的别名。当然这个删除肯定也只是临时删除,如果你退出了,就恢复了,如果真的想删除掉,跟刚刚创建时一样的,进入nano .bashrc这个目录,把你不想要的别名直接删掉,然后保存,在退出来就没有了。 如图所示: 使用命令 alias 查看所有别名 unalias 删除别名 alias + 名称=想改别名的命令 修改别名 unalias -a 删除所有别名 nano 文本编辑 ls 查看目录下文件名称 ls -a 查看隐藏名称 cd 切换目录 exit 退出 bc 计算器 scale=3 小数点 ibase=10 代表你输入数字的进制 obase=2 代表你输出数字的进制 总结 以上就是Linux中关于别名与二进制的使用教程的详细内容,更多请关注学派吧-其它相关文章!

赞(0)adminadminunix 阅读(1667)去评论
Linux中RedHat下安装Python2.7开发环境的详细教程-学派吧--

Linux中RedHat下安装Python2.7开发环境的详细教程-学派吧-

这篇文章主要为大家详细介绍了Linux RedHat下安装Python2.7、pip、ipython环境、eclipse和PyDev环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Linux RedHat下安装Python2.7、pip、ipython环境、eclipse和PyDev环境 准备工作,源Python2.6备份: 根据which python具体目录而定,进行备份 mv /usr/local/bin/python cd /usr/local/bin/python2.6 或mv /usr/bin/python /usr/bin/python2.6 修改使用python2.6的程序配置,比如yum vim /usr/bin/yum #!/usr/bin/python2.6 查看yum是否正常yum list 1、 安装Python2.7 官网下载源码包:Python-2.7.13.tgz 编译: ./configure –prefix=/usr/local 安装:make && mak install 创建软连接: cd /usr/local/bin ln -sv python2.7 python cp头文件:\cp -a /usr/local/include/python2.7/* /usr/local/include 输入查看: 2、 安装pip 安装python setup.py install 3、 安装ipython 安装python setup.py install 安装pysqlite用于ipython记录历史记录: pip install pysqlite 4、 安装eclipse eclipse依赖于jdk,下载jdk-8u121-linux-x64.tar.gz tar -xf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 配置java环境变量:vim /etc/profile最后加上: JAVA_HOME="/usr/local/jdk1.8.0_121" PATH=${JAVA_HOME}/bin:$PATH CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH tar -xf eclipse-java-neon-3-linux-gtk-x86_64.tar.gz eclipse安装pydev插件: help-install new software add-name:Pydev -location:http://pydev.org/update 只选择PyDev for eclipse develop,然后继续下一步,直到安装完成重启。 配置python:这里是windows截图,在linux上选择相应路径即可。 新建PyDev module,试一下,写个HelloWorld 至此,安装完成,中间安装如果报错,会提示缺少一些开发库,yum安装即可。 以上就是Linux中RedHat下安装Python2.7开发环境的详细介绍的详细内容,更多请关注学派吧-其它相关文章!

赞(0)adminadminunix 阅读(2244)去评论

Linux服务器下MySQL自动备份脚本的使用方法教程-学派吧-

问题说明 如何对 ECS Linux 系统中部署的 MySQL 进行自动备份。 处理办法 在 ECS Linux 系统中搭建了 MySQL 服务,用户可以使用如下脚本实现 MySQL 的定期自动备份。 使用方法如下: 1. 将以下脚本拷贝到本地,上传到服务器上,名称叫 “autoback.sh” #!/bin/bash #-----------------------------------------------# #This is a free GNU GPL version 3.0 or abover #Copyright (C) 2008 06 05 #mysql_backup Dedicated copyright by My #-----------------------------------------------# echo -e [`date +"%Y-%m-%d %H:%M:%S"`] start #system time time=`date +"%y-%m-%d"` #host IP host="127.0.0.1" #database backup user user="root" #database password passwd="yourpasswd" #Create a backup directory mkdir -p /backup/db/"$time" #list database name all_database=`/usr/bin/mysql -u$user -p$passwd -Bse 'show databases'` #in the table from the database backup for i in $all_database do /usr/bin/mysqldump -u$user -p$passwd $i > /backup/db/"$time"/"$i"_"$time".sql done echo -e [`date +"%Y-%m-%d %H:%M:%S"`] end exit 0 脚本中的数据库名和数据库密码以用户需要备份的数据库信息为准,需要用户修改下。 2. 运行 crontab -e,写入以下内容: 30 5 * * * root sh /root/autobackup.sh >/dev/null...

赞(0)adminadminMySQL 阅读(1984)去评论

Linux下MySQL无法访问问题排查的基本步骤-linux教程

问题说明 本文说明云服务器 ECS Linux 上 MySQL 无法访问问题的一般排查步骤。 处理办法 查看 Linux 操作系统是否已经安装了 MySQL $ rpm -qa mysql mysql-4.1.7-4.RHEL4.1 # 说明已经安装了 MySQL 检查状态 检测 MySQL 运行状态: service mysqld status 启动服务: 可以用三种方法来启动 MySQL: 方法一:使用 service 命令启动 MySQL: service mysqld start 方法二:使用 mysqld 脚本来启动 MySQL: /etc/init.d/mysql start 方法三:使用 safe_mysqld 实用程序启动 MySQL 服务,此方法可以使用相关参数: safe_mysqld& //使用&表示将safe_mysqld放在后台执行。 登陆 修改密码 mysqladmin -u root password mysqladmin -u root password 'kaishi' 这里的“密码”为我们欲新设的密码。系统会提示我们输入旧密码(若是 MySQL 刚安装,则默认密码为空) 如果本机可以登陆了,但是其他机器的客户端登陆报错。比如: ERROR 1130 (00000): Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQ L server 则首先查看了 iptables 的设置,确认开放了 3306 端口: iptables -A INPUT -p tcp -m tcp --sport 3306 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT service iptables save 如果还是无法访问,则可能是 MySQL 的权限问题。则可以通过如下步骤排查: 在本机登录 mysql -h localhost -u root -pkaishi...

赞(0)adminadminMySQL 阅读(2014)去评论
关于Linux系统授权MySQL外网访问的教程-学派吧-

关于Linux系统授权MySQL外网访问的教程-学派吧

问题描述 MySQL 无法通过外网连接。 问题原因 在 MySQL 的 bin 目录下执行: 登陆到数据 mysql -uroot -p密码 use mysql; select host,user,password from user; 可以看到 user 为 root,host 为 localhost 的话,说明 MySQL 只允许本机连接,那么外网,本地软件客户端就无法连接了。 解决方案 执行如下命令: update user set host='%' where user ='root'; flush privileges; 查看是否修改正常: 对于设置其他用户远程连接的方法: GRANT ALL PRIVILEGES ON 数据库名.* TO 账户@"%" IDENTIFIED BY "密码"; flush privileges; 可以测试外网连接 MySQL 服务器。关注我们  

linux服务器下如何查看mysql安装信息的详细教程-学派吧--

linux服务器下如何查看mysql安装信息的详细教程-学派吧-

这篇文章主要介绍了linux服务器下查看mysql的安装信息,需要的朋友可以参考下 查看mysql的安装信息: #ps -ef | grep mysql usr/bin/mysql 是指:mysql的运行路径 var/lib/mysql 是指:mysql数据库文件的存放路径 usr/lib/mysql 是指:mysql的安装路径 #whereis mysql #mysqladmin -u root -p variables root是你的数据库帐号 回车后会提示你输入密码,输入上边填写的帐号对应的密码 回车后出来一个大表,找到datadir这一行,后边的值就是数据库所在的路径了。 以上就是linux服务器下如何查看mysql安装信息的详细介绍的详细内容,更多请关注学派吧-

赞(0)adminadminMySQL 阅读(2122)去评论

Linux系统MySQL备份的导入导出的具体操作教程-学派吧

问题描述 如何对 ECS Linux 系统中的 MySQL 进行备份的导入和导出。 处理办法 MySQL 备份的导出 MySQL 备份的导入 MySQL 备份的导出 注意: 如果您使用的是帮助中心的一键环境配置,那么 MySQL 的安装目录是 /alidata/server/mysql。 如果您将 MySQL 安装到其他目录,您需要输入您 MySQL 完整的安装路径。 单库备份您可以在服务器上执行如下命令: /alidata/server/mysql/bin/mysqldump -uroot -p密码 数据库名 > 备份名称.sql mysqldump 默认不会导出事件表,执行此命令会出现警告 — Warning: Skipping the data of table mysql.event. Specify the –events option explicitly. 如果您需要导出 MySQL 事件,您可以执行如下命令: /alidata/server/mysql/bin/mysqldump -uroot -p密码 --events --ignore-table=mysql.event 数据库名 > 备份名称.sql MySQL 备份的导入 如果您需要导入备份的 .sql 文件,可以在 备份名称.sql 文件所在目录中执行如下命令: /alidata/server/mysql/bin/mysql -uroot -p密码 mysql < 备份名称.sql 也可以通过执行如下命令: /alidata/server/mysql/bin/mysql -uroot -p密码 mysql>use 数据库; mysql>source /root/备份名称.sql; 注意:/root/备份名称.sql 为实际备份文件绝对路径 以上就是Linux系统MySQL备份的导入导出的具体分析的详细内容,更多请关注学派吧-其它相关文章!

赞(0)adminadminMySQL 阅读(1793)去评论
linux中关于echo命令的用法实例教程-学派吧-

linux中关于echo命令的用法实例教程-学派吧

linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法,下面这篇文章主要给大家介绍了关于linux中echo命令用法的相关资料,需要的朋友可以参考学习。 前言 对于初学者来说,掌握一些基本命令的常用用法是必须的。本文列举了echo命令的几个常用用法并加以实例说明,以作回顾、参考。 基础 echo命令常用作打印输出字符串,根据echo帮助文件可以获得以下信息: 语法 echo [-neE][arg…] 三个参数: -n : 关闭输出文字时的自动换行 -e : 开启转义字符功能( \ ) -E : (默认)关闭转义字符功能( \ ) 使用-e选项时,如果在字符串中键入以下字符,程序不会将之当成一般字符串输出,而是会使用其转义功能: • \a 发出警告声; • \b 删除前一个字符; • \c 最后不加换行符号并抑制字符后输出; • \f 换行但光标仍旧停留在原来的位置; • \n 换行且光标移至行首; • \r 光标移至行首,但不换行; • \t 水平制表符; • \v 垂直制表符; • \\ 插入\字符; • \0nnn 插入nnn(八进制)所代表的ASCII字符;NNN为0到3位八进制数字 • \xHH 插入HH(十六进制)所代表的ASCII字符;HH为1到2位十六进制数字 实例 1、打印输出一行字符串 2、使用”\b” 选项 相当于退格符 3、使用”\c” 选项 不打印输出\c 以后的字符,并且结果不换行(使用-n 选项只是输出结果不换行) 4、使用”\n” 选项 相当于在\n 后插入新行 5、使用”\r” 选项 回车,光标移至首位,但不换行 6、使用”\0NNN” 选项 返回八进制多代表的ASCII字符 7、使用”\xHH” 选项 返回16进制数所代表的ASCII字符 8、打印输出bash环境变量 延伸: 单引号”; 双引号””; 反向单引号“引用强弱程度比较 从运行结果不难看出,”单引号是强引用,不完成变量替换;“反向单引号是弱引用,可以实现命令和变量替换;””双引号强弱程度据两者中间,只可以实现变量替换 总结 以上就是linux中关于echo命令的用法实例教程的详细内容,更多请关注学派吧-其它相关文章!

赞(0)adminadminunix 阅读(1464)去评论
Linux vsftpd连接报错:500 OOPS: vsftpd的解决办法详解-学派吧--

Linux vsftpd连接报错:500 OOPS: vsftpd的解决办法详解-学派吧-

问题现象 云服务器 ECS Linux 系统用 vsftpd 搭建的 FTP 服务,客户端连接时提示报错 “500 OOPS: vsftpd: refusing to run with writable root inside chroot()” 处理办法 1. 在服务器上修改Vsftpd的配置文件vsftpd.conf vim /etc/vsftpd/vsftpd.conf # 添加一行配置 allow_writeable_chroot=YES 2. 保存退出,重启一下 vsftp 服务即可。 以上就是Linux vsftpd连接报错:500 OOPS: vsftpd的解决办法详解的详细内容,更多请关注学派吧-其它相关文章!

赞(0)adminadminunix 阅读(2635)去评论

学派吧-linux如何利用CSF防火墙屏蔽恶意请求的详细介绍-linux教程

学派吧-本篇文章主要介绍了linux利用CSF防火墙屏蔽恶意请求,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 问题最近不知道为什么,恶意代理的请求数越来越多,明明我返回的都是403Forbidden,但是由于数量实在庞大,还是消耗了我大量的带宽和资源。之前的方法已经没有用了,想了半天还是研究研究防火墙吧,虽然仅仅靠Apache也能对某些IP进行黑名单设置,但是感觉还是有点麻烦的。比如最常见的用iptables,或者是ufw,虽然都能很好的做到管理,但是他们基本都需要一条一条的加,十分麻烦。 网上搜索了下,找到了一个挺方便的小工具–CSF(ConfigServer & Security Firewall),这个工具据说除了能够方便的管理IP blacklist,而且也能稍加配置抵御一定量的DDOS攻击。 安装工具本身可以在csf工具的官网上下载。 下载并解压后可以参考其中的install.txt的说明进行安装,讲的简洁而且详细,注意给权限就行。需要说明的是,这个工具其实也是基于iptables,只是简化了命令而已。 关于ddos的防护 根据readme.txt的描述,进行ddos防护的功能主要是靠/etc/csf/csf.conf中的配置进行控制的,尤其是当中的PORTFLOOD参数,一般都进行如下设置: #Syntax for the PORTFLOOD setting: #PORTFLOOD is a comma separated list of: port;protocol;hit count*;interval seconds #So, a setting of PORTFLOOD = "22;tcp;5;300,80;tcp;20;5" means: #1. If more than 5 connections to tcp port 22 within 300 seconds, then block #that IP address from port 22 for at least 300 seconds after the last packet is #seen, i.e. there must be a "quiet" period of 300 seconds before the block is #lifted #2. If more than 20 connections to tcp port 80 within 5 seconds, then block #that IP address from port 80 for at least 5 seconds after the last packet is #seen, i.e. there must be a "quiet" period...

赞(0)adminadminunix 阅读(1724)去评论
学派吧-Linux下g++编译以及使用静态库和动态库的方法教程-

学派吧-Linux下g++编译以及使用静态库和动态库的方法教程

学派吧下面小编就为大家带来一篇php.cn/wiki/1497.html” target=”_blank”>Linux下g++编译与使用静态库和动态库的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库(*.a)与动态库(*.so)的生成与使用方式是不同的。刚开始可能会不适应,但是用多了应该会习惯这种使用,因为步骤上并没有VS下配置那么繁琐。 下面就分别总结下linux下生成并使用静态库与动态库的方法:(由于是C++项目,所以编译器用的g++,但是与gcc的使用是相通的) 首先是准备工作,把我们需要封装成库文件的函数的头文件与源文件写好,如下: //myAPI.h int ADD(int a, int b); int MINUS(int a, int b); //myAPI.cpp #include "myAPI.h" int ADD(int a, int b){ return a + b; } int MINUS(int a, int b){ return a - b; } 接下来准备一个测试用的主函数源文件: //main.cpp #include "myAPI.h" #include <iostream> int main(){ std::cout << "1 + 1 = " << ADD(1, 1) << std::endl; std::cout << "1 - 1 = " << MINUS(1, 1) << std::endl; return 0; } 最后,先编译我们的 myAPI.cpp 文件生成 myAPI.o 目标文件 g++ -c myAPI.cpp 1.生成静态库并使用 Linux下用生成静态库的命令 ar 处理 myAPI.o 文件生成静态库文件,生成的库文件应遵循规范,及linux下库文件加“lib”前缀。所以针对本例,通过如下一条命令即可生成 libmyAPI.a 静态库: ar crv libmyAPI.a myAPI.o 接下来即可在项目编译过程中利用静态库了,此时 myAPI.cpp 这个库函数的定义文件已经不需要了。main.cpp 编译命令如下(注意,依赖的静态库文件要放在被依赖项后面): g++ main.cpp libmyAPI.a -o output 编译通过后即可运行可执行文件 output , 此时 libmyAPI.a 也已经是不需要的了。执行命令并输出结果如下: ./output 2.生成动态库并使用 linux下编译时通过 -shared 参数可以生成动态库(.so)文件,如下 g++ -shared -fPIC -o libmyAPI.so myAPI.o...

赞(0)adminadminunix 阅读(1389)去评论
学派吧-Linux使用exec函数实现进程替换的代码-Linux教程-

学派吧-Linux使用exec函数实现进程替换的代码-Linux教程

学派吧-这篇文章主要介绍了Linux 进程替换(exec函数)实现代码的相关资料,需要的朋友可以参考下 Linux 进程替换(exec函数)实现代码 # include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> #include<string.h> int main() { pid_t id=fork(); if(id==0) { printf("child is running\n"); sleep(1); char* env[]={"MYENV=/A/B/C/D/AAAA",NULL}; char* argv[]={"ls","-l","-n","-i",NULL}; // execl("/bin/ls","ls","-l","-n","-i",NULL); // execlp("ls","ls","-l","-n","-i",NULL); // execv("/bin/ls",argv); // execvp("ls",argv); // execle("./myenv","myenv",NULL,env); execve("./myenv",argv,env); printf("child id done\n"); //exec成功的话不执行此语句 exit(1); } else { pid_t ret=waitpid(id, NULL,0); if(ret>0) { printf("father wait success\n"); } else{ printf("child quit not normal\n"); } } return 0; } 下图就是execl execlp execv execvp的结果图 下图是execle execve的结果图 以上就是Linux使用exec函数实现进程替换的代码分享的详细内容,更多请学派吧其它相关文章!

赞(0)adminadminunix 阅读(1379)去评论
学派吧-使用Linux的alternatives命令替换选择软件的版本方法详解-linux教程-

学派吧-使用Linux的alternatives命令替换选择软件的版本方法详解-linux教程

学派吧-下面小编就为大家带来一篇使用Linux的alternatives命令替换选择软件的版本方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 上周在安装搜索引擎Elasticsearch时,要求安装比较新的java 版本,我选择了java 1.8.0,安装java 成功后使用java -version 发现使用的版本仍旧是1.6.0, 查询了一些资料,发现可以使用Linux的alternatives命令替换选择软件的版本。 说明: alternatives –install <link> <name> <path> <priority> 其中, install表示安装 link是符号链接 name则是标识符 path是执行文件的路径 priority则表示优先级 一:先来看看目前java的版本 二:使用Linux的alternatives命令安装java 1.8.0 1. 先用alternatives查看目前系统中有哪些java版本 alternatives –config java 2. 使用alternatives命令安装java 1.8.0 alternatives –install /usr/bin/java java /usr/local/java/jre1.8.0_131/bin/java 4 解释: /usr/bin/java 是java命令的路径,用which java查看,对应参数<link> java对应参数<name> /usr/local/java/jre1.8.0_131/bin/java对应<path>,表示java1.8.0 的java命令的路径 数字4 对应 参数<priority> ,因为已经有3个程序提供java了,所以要写4 3.用alternatives –config java 查看安装java 1.8.0 成功没有 划红线的java就是我刚刚安装的,说明安装成功 三:选择java版本 alternatives –config java 看到的结果和二(3)的结果一样,注意最后一句英文:Enter to keep the current selection[+], or type selection number ,翻译过来就是按Enter键来保存当前选择[+],或渐入选择号码。我键入号码4 表示我选择使用java 1.8.0 四:使用java -version查看选择的版本 以上就是使用Linux的alternatives命令替换选择软件的版本方法详解的详细内容,更多请关注学派吧其它相关文章!

赞(0)adminadminunix 阅读(1448)去评论

学派吧-Linux不常用却很有用的命令-linux教程

which命令 用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which命令会在环境变量PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 whereis命令 用来定位命令的二进制程序、源代码文件和man手册页等相关文件的路径。 locate/slocate命令 用来查找文件或目录。 type命令 用来显示指定命令的类型,判断给出的命令是内部命令还是外部命令。 getconf命令 Get the configuration value for variable VAR, or for variable PATH_VAR for path PATH. If SPEC is given, give values for compilation environment SPEC. getconf LONG_BIT # 查看当前操作系统的位数 lsb_release命令 LSB是Linux Standard Base的缩写,lsb_release命令用来显示LSB和特定版本的相关信息。如果使用该命令时不带参数,则默认加上-v参数。 uname命令 用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。 以上就是Linux不常用却很有用的命令的详细内容,更多请关注学派吧其它相关文章!

赞(0)adminadminunix 阅读(1526)去评论
学派吧-Zabbix-agent客户端的编译安装-linux教程-

学派吧-Zabbix-agent客户端的编译安装-linux教程

系统环境: CentOS 6.8 官网下载安装包:http://www.zabbix.com/download 本文用的是Zabbix 3.0 LTS 上传至客户端服务器并解压 tar xzvf zabbix-3.0.9.tar.gz 进入解压后的文件夹开始编译安装 ./configure --prefix=/usr/local/zabbix --enable-agent          //指定路径make && make install                             //编译安装 复制安装包中的文件到安装路径下 /root/zabbix-./misc/init.d/fedora/core/zabbix_agentd /etc/init.d//etc/init.d/zabbix_agentd 启动agent服务 groupadd zabbix             //添加zabbix组useradd zabbix -g zabbix           //添加zabiix用户service zabbix_agentd start        //启动服务 配置agent vim /usr/local/zabbix/etc/zabbix_agentd.conf Server=127.0.0.1 >> Server="服务端IP“ //如不在统一网段,需要添加多个IP、网关IPServerActive=127.0.0.1 >> ServerActive="服务端IP”Hostname=Zabbix server >> Hostname="本机IP” 客户端开启端口10050 /sbin/iptables -I INPUT -p tcp --dport -/sbin/iptables -I INPUT -p tcp --dport -j ACCEPT /etc/rc.d/init.d/iptables save service zabbix_agentd restart              服务端web设置 配置—主机—创建主机 查看状态如图ZBX亮起为成功! 以上就是Zabbix-agent客户端的编译安装的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadminunix 阅读(1870)去评论
学派吧-iptables基本概念和原理 -linux教程-

学派吧-iptables基本概念和原理 -linux教程

概述 iptables是linux自带的防火墙软件,用于配置IPv4数据包过滤或NAT(IPv6用ip6tables)。 在linux上,防火墙其实是系统内核的一部分,基于Netfilter构架,基本原理就是在内核网络层数据包流经的不同位置放置一些钩子(hook),利用这些嵌入网络层的hook来对数据抓取、控制或修改,iptables其实只是默认的netfilter控制管理工具,所以使用ps或者top看不到有一个“防火墙”的进程存在,防火墙是不能被卸载也不能关闭的,大家熟知的"service iptables stop"或者“/etc/init.d/iptables stop”命令只不过是清空所有策略和表,并把默认策略改为ACCEPT(允许)而已。 iptables有以下几个重点概念:: table(表):iptables内置4个table,不同的table代表不同的功能,每个table可以包含许多chain,不同类型的table对所能包含的chain和策略中的target的使用做了限定,一些target不能在一些table中使用。用户不能自定义table; chain(链):chain可用包括一系列的策略,通过配置不同的chain可以对不同作用的策略进行分类,iptables内置5个chain对应netfilter的5个hook,用户也可以自定义chain; command(命令):command是对表或链的操作动作,比如添加、删除、修改等等; rule-specification(策略):包括下面的匹配规则和目标; match(匹配规则):定义本条策略适用于那些数据包,匹配规则可以包括协议、源/目的地址、端口等等; target(目标):对匹配上规则的数据包采取的操作,target可以是一个动作或者自定义chain,常见的动作有丢弃(DROP)、允许(ACCEPT)、NAT等等,当target是自定义chain时,数据包进入自定义chain继续匹配; policy(默认策略):内置chain的默认动作,每个chain只能有一个policy,如果数据包匹配某条chain匹配完最后一条策略依然没有匹配上,那么就采用policy的默认动作。policy不匹配规则,而且target只能是丢弃(DROP)或允许(ACCEPT),自定义chain不能定义policy。 表 iptables的4个表分别是: filter(过滤):数据包过滤/拦截,可以包含INPUT、FORWARD、OUTPUT这3个内置chain。 nat(地址转换):IP地址或端口号转换,可以包含PREROUTING、OUTPUT、POSTROUTING 3个内置chain,nat table在会话建立时会记录转换的对应关系,同一会话的回包和后续报文会自动地址转换,这是因为nat使用了ip_conntrack模块。 mangle(包管理):用来修改IP报文,可以包含PREROUTING、OUTPUT、INPUT、FORWARD、POSTROUTING 5个内置chain。 raw:此表的优先级高于ip_conntrack模块和其它的table,主要用于将有会话状态的连接(比如tcp)的数据包排除在会话外。可以包含POSTROUTING、OUTPUT两个内置chain。 看到这里肯定会有这样的疑问,为什么table只能包含一些而不是全部的chain呢?我想这个构架是按需设计而不是按功能设计的,尽管table不是包含所有的chain,但是每种功能的table都包含了实现这种功能所需的chain,即使包含更多的chain也是累赘或者无用的,而且实际上用起来也的确如此,够用了。 还有就是不同table生效优先顺序问题,先后优先级是这样的: raw > mangle > nat > filter 所以,如果有filter禁止ping目的地址2.2.2.2,而nat又有策略将目的地址1.1.1.1转换成2.2.2.2,那么ping 1.1.1.1是ping不通的。 不过一般情况下filter是不会和nat的策略打起架来,比如INPUT chain能做filter,却不能做nat,PREROUTING能做nat却不能做filter,而且PREROUTING只能做目的地址转换,不会对源地址过滤的需求造成麻烦,所以通常是不会相互干扰的。 链 iptables内置的5个chain:PREROUTING、INPUT、OUPUT、FORWARD、POSTROUGING,这5个chain分别与netfilter中数据转发路径上的5个不同的位置挂钩,以匹配筛选不同类型的数据流,如下图所示: 其中: PREROUTING链:应用于所有进入机器的ip包,包括目的地址是本机和目的地址非本机的包。 INPUT链:应用于所有目的是本机的包,也就是目的IP是本机接口地址,所有发给本地socket的数据都经过它。 OUPUT链:应用于所有由本机产生的包,所有应用程序发出的数据都经过它。 FORWARD链:应用于所有经过路由决策被转发的包,也就是目的地址不是本机的数据包。 POSTROUGING链:应用于所有发出机器的IP包,包括本机发出的和从本机转发的数据包。 策略匹配按照重上到下的顺序进行,当测试到某策略匹配时执行target并跳出,不再向下匹配,当测试到最后一条策略仍不匹配时,则采用policy指定的动作,如下图: 除了内置chain外,还可以自定义chain,自定义chain并不能利用netfilter的hook来捕捉数据包,但是可用于策略的分类,比如有3类不同的用户访问主机上的不同服务,如果所有策略都放在INPUT chain中策略会多而难以维护,这个时候就可以定义3个自定义chain,分别配置不同的策略,同时在INPUT chain中添加策略对来访者分类并将目标指向3个自定义chain。 自定义chain大显神威的地方在于动态生成策略,例如VPN服务器上,需要对不同分组的用户区别对待管理,但是用户IP是随机分配的,不能根据IP来区分用户组,这时候可以预先定义好各组chain,利用VPN服务端软件的一些钩子,当用户登陆时自动添加策略引导到自定义chain上来匹配。如果这时候没有自定义chain,那么策略的数量将是(用户数×所属组策略数),每增加一个用户,都要把所属组的全部策略添加一遍,这样大量的时间花费在策略匹配上,性能下降很快。 命令 命令用来操作表和链,可以做这些操作: 清空一个table中包含的所有chain 创建、重命名或删除一个自定义chain,清空一个内置chain或者给内置chain设置policy(默认策略) 在某个chain中追加、删除、修改一条策略 显示策略 由于本文只讲概念和原理,所以暂时不提命令,命令的详细使用方法会在“iptables实用教程(二)”里说明。 以上就是iptables基本概念和原理 的详细内容,更多请关注学派吧其它相关文章!

赞(0)adminadminunix 阅读(1705)去评论

更好的服务器推荐选择

本站主要用于阿里云、腾讯云、华为云服务器活动的推荐及优惠购买方式、并搜集服务器运维的日常解决方案!

联系我们联系我们

登录

找回密码

注册