首页 开发编程 正文

bash怎么安装php

比如常见的echo(只支持整数)、printf、awk、bc、dc、以及一些Linux下我们常用的编程语言框架如node、perl、python等都可以用来做一些简单的数学运算。...

bash怎么安装php,如何在Linux下使用bash?

老胡的看法:

Linux的bash shell下面有很多支持整数和浮点运算的工具,比如常见的echo(只支持整数)、printf、awk、bc、dc、以及一些Linux下我们常用的编程语言框架如node、perl、python等都可以用来做一些简单的数学运算。这里我重点介绍几个:

使用printf进行数学计算

利用printf的格式化输出特性,可以计算echo无法输出的浮点数。printf可以支持四则运算、乘方、科学计数法等计算。不过无法支持三角函数和对数计算。对于一般的情形来说其实已经够用:

%f表示以浮点数格式输出,.后面的数字表示保留的小数位数。打印的字符串里**表示乘方,e表示科学计数法。

使用bc进行数学计算

bc是BestCalculator的首字母缩写,它是一个支持交互式计算的命令行计算器,同时也支持内联模式的调用。通过scale可以设置输出的小数精度,通过obase设置输出的进制,ibase设置输入的进制,以此来实现更加强大的功能:

使用awk进行数学计算

不得不说awk简直就是字符串处理的神器,除了一般的字符串处理之外,awk也提供了强大的计算功能。awk的计算函数中还支持了sin、cos等三角函数、sqrt开方和对数函数等运算函数。通常为了使用方便,我们在bash中可以先定义一个计算器函数过程:

cal(){ awk "BEGIN { print $*}"; }

之后再使用cal+算术式就可以进行运算了:

使用dc进行数学计算

dc是一个使用逆波兰表示法输入算术式的计算器,同时支持命令行计算和交互式计算,和bc差不多,但是它使用的逆波兰表示法很有意思,也需要一些时间来适应。逆波兰表示法的核心是使用栈式运算,操作数入栈,遇到运算符时最上面的两个操作数进行计算,结果入栈。

比如:

5 + ((1 + 2) * 4) 3

写成逆波兰表达式就是:

5 1 2 + 4 * + 3 -在bash shell中使用其它脚本语言计算

比如node、python、perl、php甚至sqlite都可以利用起来用作整数和浮点运算,以node为例,直接使用js里面的数学表达式就可以:

总结一下,老胡介绍的这几样工具是不是很好玩?想知道更加详细的玩法,多使用man命令查看文档。在老胡介绍这几样神器之前是不是以为bash shell只能进行有限的整数运算?老胡非常强烈的建议好好学一下awk这个神器,我感觉它已经快上天入地无所不能了。另外除了bash shell之外,还可以多了解一下zsh shell,它原生的echo就可以进行浮点运算,其它的功能也非常强大,最新版的macOS选用了它作为默认的shell程序。

如果我的回答对你有点价值,请莫忘点赞加关注,谢谢!欢迎在评论区发表各种意见。

本文为作者原创,严禁转载,违者必究。

服务器被攻击后有哪些应对措施?

一般思路

系统遭受攻击并不可怕,可怕的是面对攻击束手无策,下面就详细介绍下在服务器遭受攻击后的一般处理思路。

1.切断网络

所有的攻击都来自于网络,因此,在得知系统正遭受黑客的攻击后,首先要做的就是断开服务器的网络连接,这样除了能切断攻击源之外,也能保护服务器所在网络的其他主机。

2.查找攻击源

可以通过分析系统日志或登录日志文件,查看可疑信息,同时也要查看系统都打开了哪些端口,运行哪些进程,并通过这些进程分析哪些是可疑的程序。这个过程要根据经验和综合判断能力进行追查和分析。下面的章节会详细介绍这个过程的处理思路。

3.分析入侵原因和途径

既然系统遭到入侵,那么原因是多方面的,可能是系统漏洞,也可能是程序漏洞,一定要查清楚是哪个原因导致的,并且还要查清楚遭到攻击的途径,找到攻击源,因为只有知道了遭受攻击的原因和途径,才能删除攻击源同时进行漏洞的修复。

4.备份用户数据

在服务器遭受攻击后,需要立刻备份服务器上的用户数据,同时也要查看这些数据中是否隐藏着攻击源。如果攻击源在用户数据中,一定要彻底删除,然后将用户数据备份到一个安全的地方。

5.重新安装系统

永远不要认为自己能彻底清除攻击源,因为没有人能比黑客更了解攻击程序,在服务器遭到攻击后,最安全也最简单的方法就是重新安装系统,因为大部分攻击程序都会依附在系统文件或者内核中,所以重新安装系统才能彻底清除攻击源。

6.修复程序或系统漏洞

在发现系统漏洞或者应用程序漏洞后,首先要做的就是修复系统漏洞或者更改程序bug,因为只有将程序的漏洞修复完毕才能正式在服务器上运行。

7.恢复数据和连接网络

将备份的数据重新复制到新安装的服务器上,然后开启服务,最后将服务器开启网络连接,对外提供服务。

二、检查并锁定可疑用户

当发现服务器遭受攻击后,首先要切断网络连接,但是在有些情况下,比如无法马上切断网络连接时,就必须登录系统查看是否有可疑用户,如果有可疑用户登录了系统,那么需要马上将这个用户锁定,然后中断此用户的远程连接。

1.登录系统查看可疑用户

通过root用户登录,然后执行“w”命令即可列出所有登录过系统的用户,如图1所示。

通过这个输出可以检查是否有可疑或者不熟悉的用户登录,同时还可以根据用户名以及用户登录的源地址和它们正在运行的进程来判断他们是否为非法用户。

2.锁定可疑用户

一旦发现可疑用户,就要马上将其锁定,例如上面执行“w”命令后发现nobody用户应该是个可疑用户(因为nobody默认情况下是没有登录权限的),于是首先锁定此用户,执行如下操作:

[root@server ~]# passwd -l nobody

锁定之后,有可能此用户还处于登录状态,于是还要将此用户踢下线,根据上面“w”命令的输出,即可获得此用户登录进行的pid值,操作如下:

[root@server ~]# ps -ef"grep @pts/3

531 6051 6049 0 19:23 ? 00:00:00 sshd: nobody@pts/3

[root@server ~]# kill -9 6051

这样就将可疑用户nobody从线上踢下去了。如果此用户再次试图登录它已经无法登录了。

3.通过last命令查看用户登录事件

last命令记录着所有用户登录系统的日志,可以用来查找非授权用户的登录事件,而last命令的输出结果来源于/var/log/wtmp文件,稍有经验的入侵者都会删掉/var/log/wtmp以清除自己行踪,但是还是会露出蛛丝马迹在此文件中的。

三、查看系统日志

查看系统日志是查找攻击源最好的方法,可查的系统日志有/var/log/messages、/var/log/secure等,这两个日志文件可以记录软件的运行状态以及远程用户的登录状态,还可以查看每个用户目录下的.bash_history文件,特别是/root目录下的.bash_history文件,这个文件中记录着用户执行的所有历史命令。

四、检查并关闭系统可疑进程

检查可疑进程的命令很多,例如ps、top等,但是有时候只知道进程的名称无法得知路径,此时可以通过如下命令查看:

首先通过pidof命令可以查找正在运行的进程PID,例如要查找sshd进程的PID,执行如下命令:

1 2 [root@server ~]# pidof sshd 13276 12942 4284

然后进入内存目录,查看对应PID目录下exe文件的信息:

1 2 [root@server ~]# ls -al /proc/13276/exe lrwxrwxrwx 1 root root 0 Oct 4 22:09 /proc/13276/exe -> /usr/sbin/sshd

这样就找到了进程对应的完整执行路径。如果还有查看文件的句柄,可以查看如下目录:

[root@server ~]# ls -al /proc/13276/fd

通过这种方式基本可以找到任何进程的完整执行信息,此外还有很多类似的命令可以帮助系统运维人员查找可疑进程。例如,可以通过指定端口或者tcp、udp协议找到进程PID,进而找到相关进程:

1 2 3 4 5 6 7 8 9 [root@server ~]# fuser -n tcp 111 111/tcp: 1579 [root@server ~]# fuser -n tcp 25 25/tcp: 2037 [root@server ~]# ps -ef|grep 2037 root 2037 1 0 Sep23 ? 00:00:05 /usr/libexec/postfix/master postfix 2046 2037 0 Sep23 ? 00:00:01 qmgr -l -t fifo -u postfix 9612 2037 0 20:34 ? 00:00:00 pickup -l -t fifo -u root 14927 12944 0 21:11 pts/1 00:00:00 grep 2037

在有些时候,攻击者的程序隐藏很深,例如rootkits后门程序,在这种情况下ps、top、netstat等命令也可能已经被替换,如果再通过系统自身的命令去检查可疑进程就变得毫不可信,此时,就需要借助于第三方工具来检查系统可疑程序,例如前面介绍过的chkrootkit、RKHunter等工具,通过这些工具可以很方便的发现系统被替换或篡改的程序。

五、检查文件系统的完好性

检查文件属性是否发生变化是验证文件系统完好性最简单、最直接的方法,例如可以检查被入侵服务器上/bin/ls文件的大小是否与正常系统上此文件的大小相同,以验证文件是否被替换,但是这种方法比较低级。此时可以借助于Linux下rpm这个工具来完成验证,操作如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 [root@server ~]# rpm -Va ....L... c /etc/pam.d/system-auth S.5..... c /etc/security/limits.conf S.5....T c /etc/sysctl.conf S.5....T /etc/sgml/docbook-simple.cat S.5....T c /etc/login.defs S.5..... c /etc/openldap/ldap.conf S.5....T c /etc/sudoers ..5....T c /usr/lib64/security/classpath.security ....L... c /etc/pam.d/system-auth S.5..... c /etc/security/limits.conf S.5..... c /etc/ldap.conf S.5....T c /etc/ssh/sshd_config

对于输出中每个标记的含义介绍如下:

S 表示文件长度发生了变化

M 表示文件的访问权限或文件类型发生了变化

5 表示MD5校验和发生了变化

D 表示设备节点的属性发生了变化

L 表示文件的符号链接发生了变化

U 表示文件/子目录/设备节点的owner发生了变化

G 表示文件/子目录/设备节点的group发生了变化

T 表示文件最后一次的修改时间发生了变化

如果在输出结果中有“M”标记出现,那么对应的文件可能已经遭到篡改或替换,此时可以通过卸载这个rpm包重新安装来清除受攻击的文件。

不过这个命令有个局限性,那就是只能检查通过rpm包方式安装的所有文件,对于通过非rpm包方式安装的文件就无能为力了。同时,如果rpm工具也遭到替换,就不能通过这个方法了,此时可以从正常的系统上复制一个rpm工具进行检测。

php多线程教程?

PHP+shell实现多线程的方法

先写个简单的php代码,这里为了让脚本执行时间更长,方便看效果,sleep一下,呵呵!先看下test.php的代码:ls

PHP代码:

for ($i=0;$i<10;$i++) {

echo $i;

sleep(10);

}

?>

在看下shell脚本的代码,非常简单

#!/bin/bash

for i in 1 2 3 4 5 6 7 8 9 10

do

/usr/bin/php -q /var/www/html/test.php &

done

注意到在请求php代码的那行有一个&符号吗,这个是关键,不加的话是不能进行多线程的,&表示讲服务推送到后台执行,因此,在 shell的每次的循环中不必等php的代码全部执行完在请求下一个文件,而是同时进行的,这样就实现了多线程,下面运行下shell看下效果,这里你将 看到10个test.php进程再跑,再利用linux的定时器,定时请求这个shell,在处理一些需要多线程的任务,例如,批量下载时,非常好用!

php中用WEB服务器实现多线程

假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php,那么这两个文件将是同时执行的.(PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)

有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢?

其实可是通过参数来控制a.php来运行哪一段程序.

下面看一个例子:

//a.php,b.php

PHP代码:--------------------------------------------------------------------------------

function runThread()

{

$fp = fsockopen('localhost', 80, $errno, $errmsg);

fputs($fp, "GET /b.php?act=b\r\n\r\n"); //这里的第二个参数是HTTP协议中规定的请求头

//不明白的请看RFC中的定义

fclose($fp);

}

function a()

{

$fp = fopen('result_a.log', 'w');

fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r\n");

fclose($fp);

}

function b()

{

$fp = fopen('result_b.log', 'w');

fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r\n");

fclose($fp);

}

if(!isset($_GET['act'])) $_GET['act'] = 'a';

if($_GET['act'] == 'a')

{

runThread();

a();

}

else if($_GET['act'] == 'b') b();

?>

--------------------------------------------------------------------------------

打开result_a.log 和 result_b.log 比较一下两个文件的中访问的时间. 大家会发现, 这两个的确是在不同线程中运行的.有些时间完全一样.

上面只是一个简单的例子, 大家可以改进成其它形式.

既然PHP中也能多线程了, 那么问题也来了, 那就是同步的问题. 我们知道 PHP本身是不支持多线程的. 所以更不会有什么像Java 中synchronize的方法了. 那我们该如何做呢.

1. 尽量不访问同一个资源. 以避免冲突. 但是可以同时像数据库操作. 因为数据库是支持并发操作的. 所以在多线程的PHP中不要向同一个文件中写入数据. 如果必须要写的话, 用别的方法进行同步.. 如调用 flock对文件进行加锁等. 或建立临时文件并在另外的线程中等待这个文件的消失 while(file_exits('xxx')); 这样就等于这个临时文件存在时, 表示其实线程正在操作

如果没有了这个文件, 说明其它线程已经释放了这个.

2. 尽量不要从runThread在执行fputs后取这个socket中读取数据. 因为要实现多线程, 需要的用非阻塞模式. 即在像fgets这样的函数时立即返回.. 所以读写数据就会出问题. 如果使用阻塞模式的话, 程序就不算是多线程了. 他要等上面的返回才执行下面的程序. 所以如果需要交换数据最后利用外面文件或数据中完成. 实在想要的话就用socket_set_nonblock($fp) 来实现.

说了这么多, 倒底这个有没有实际的意义呢? 在什么时候需要这种用这种方法呢 ?

答案是肯定的. 大家知道. 在一个不断读取网络资源的应用中, 网络的速度是瓶颈. 如果采多这种形式就可以同时以多个线程对不同的页面进行读取.

本人做的一个能从8848、soaso这些商城网站搜索信息的程序。还有一个从阿里巴巴网站上读取商业信息和公司目录的程序也用到了此技术。 因为这两个程序都是要不断的链接它们的服务器读取信息并保存到数据库。 利用此技术正好消除了在等待响应时的瓶颈。

php模拟实现多线程的三种方法

PHP语言本身是不支持多线程的. 总结了一下网上关于PHP模拟多线程的方法, 总的来说, 都是利用了PHP的好伙伴们本身所具有的多线程能力. PHP的好伙伴指的就是LINUX和APACHE啦, LAMP嘛.

另外, 既然是模拟的, 就不是真正的多线程. 其实只是多进程. 进程和线程是两个不同的概念. 好了, 以下方法都是从网上找来的.

1. 利用LINUX操作系统

for ($i=0;$i<10;$i++) {

echo $i;

sleep(5);

}

?>

上面存成test.php, 然后写一段SHELL代码

#!/bin/bash

for i in 1 2 3 4 5 6 7 8 9 10

do

php -q test.php &

done

2. 利用fork子进程(其实同样是利用LINUX操作系统)

declare(ticks=1);

$bWaitFlag = FALSE; /// 是否等待进程结束

$intNum = 10; /// 进程总数

$pids = array(); /// 进程PID数组

echo ("Startn");

for($i = 0; $i < $intNum; $i++) {

$pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息

if(!$pids[$i]) {

// 子进程进程代码段_Start

$str="";

sleep(5+$i);

for ($j=0;$j<$i;$j++) {$str.="*";}

echo "$i -> " . time() . " $str n";

exit();

// 子进程进程代码段_End

}

}

if ($bWaitFlag)

{

for($i = 0; $i < $intNum; $i++) {

pcntl_waitpid($pids[$i], $status, WUNTRACED);

echo "wait $i -> " . time() . "n";

}

}

echo ("Endn");

?>

3. 利用WEB SERVER, PHP不支持多线程, APACHE可是支持的, 呵呵.

假设我们现在运行的是a.php这个文档. 但是我在程式中又请求WEB服务器运行另一个b.php

那么这两个文档将是同时执行的.(代码同上)

当然啦,也可以把需要多线程处理的部分交给JAVA去处理, 然后在PHP里调用, 哈哈.

system('java multiThread.java');

?>

扩展资料:PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

才能够快速进入这个行业?

很高兴可以回答你的问题,下面我通过以下3点跟你聊一聊,it行业的职位以及如何进入这个行业:

(1)职位介绍

(2)职位选择

(3)总结

职位介绍

一般来说IT行业的职位有如下几点:

产品经理前端工程师后端工程师测试工程师运维工程师全栈工程师

(1)首先产品经理也分为初级、中级、高级,当然了这三个级别,不同的级别所负责的事情就不同了,但是产品经理这个岗位主要就是负责产品前期的需求沟通和产品原型的设计等等工作。以及后期如果有需求变动,也是产品经理负责与程序员沟通的。

(2)前端工程师主要是负责前端页面的开发工作以及和后端工程师一起联调开发功能模块,前端工程师这边也是分为初级、中级、高级三个级别的职位,不同的级别所负责的东西也是不同的,当然了,待遇也是不同的,好的前端,待遇还是很不错的。

(3)后端工程师主要是负责后端系统的代码编写,然后负责和前端联调功能以及产品经理那边沟通需求和模块所需的需求,后端工程师也是分为初级中级和高级,三个级别的职位,初级工程师所负责的项目可能比较边缘化,但是终极的话基本就是负责核心的项目开发,高级的话差不多就是架构师或者项目总监的职位,待遇还是非常不错的。

(4)测试工程师主要是负责前后端那边开发的功能交付过来,他们这边按照需求去测一下是否符合需求上面所要求的功能,测试工程师和前面一样也分三个级别,最高级别的话基本上就是负责测试的一个小组,组长主要是负责项目测试的进度把控以及项目测试功能分配。

(5)运维工程师主要是负责公司的网络以及数据库的维护和线上项目环境的搭建等等,运维工程师也和前面一样分为三个等级,一般高级运维的情况下,薪资福利待遇还是挺不错的。

(6)全栈工程师这个职位的话,主要是考验的是你的综合能力,对于技术以及沟通能力要求是特别严格的,你最起码对于所有的技术你都要精通而且可以负责整个项目基本上和项目总监架构师同等级别。

职位选择

对于职位的选择,这里就要看你会什么技能,或者说你对哪些岗位感兴趣,首先你要有一个目标,然后确定好方向之后再去往这个方向去努力,比如说你对编程感兴趣,然后可以去培训一下,或者以应届生的身份进入公司去学习,从一个初级的开发人员慢慢的去努力,去奋斗,慢慢的向这个职位的最高岗位晋升。

总结

总结一下,其实IT行业如果想入门的话,也不是像你想象的那么难,如果你想要进入这个行业,可以从编程这个行业进入,而选择一个培训机构学一个3~6个月,基本上都可以达到初级的水平,这样你就可以顺利的进入到了IT行业,因为我本身的话,也是通过这种方式进入到这个行业的。当然啦,进入之后不代表你就可以永远在这个行业做下,做IT这一行业需要你不断的去学习新的技术,才能够永远的在这个行业待下去,相比于其他行业来说这个行业,虽说薪资高一点,但是加班也是常有的事,所以这个行业的选择还是需要你慎重的考虑一下的。

好了,以上的几点就是我对于这个行业的了解做的分析,希望可以帮到你。

有哪些不错的软件值得一用?

Python编程的软件其实很多,作为一门面向大众的编程语言,许多编辑器都有对应的Python插件,当然,也有专门的Python IDE软件,下面我简单介绍几个不错的Python编程软件,既有编辑器,也有IDE,感兴趣的朋友可以自己下载尝试一下:

1.VS Code:这是一个轻量级的代码编辑器,由微软设计研发,免费、开源、跨平台,轻巧灵活,界面简洁,支持常见的自动补全、语法提示、代码高亮、Git等功能,插件扩展丰富,安装Python插件后,可以直接调试运行Python程序,使用起来非常方便,对于初学者来说,是一个非常不错的Python编程软件:

2.Sublime Text:这也是一个轻量级的代码编辑器,基本功能和VS Code差不多,免费、跨平台,支持编程语言众多,常见的代码高显亮、智能补全等功能都不错,插件扩展功能也不错,本地配置Python解释器路径后,也可以直接编辑运行Python代码,使用起来非常轻巧、灵活,值得一试:

3.Jupyter Notebook:这是一个基于Web浏览器的Python编程环境,比较适用于数据实时分析,界面干净、质朴大方,一行输入一行输出,交互性非常好,还支持Markdown功能,各种插件扩展也非常丰富,使用起来非常清爽,感兴趣的朋友可以尝试一下:

4.Spyder:这是一个专门用于Python开发的IDE环境,免费、跨平台,整体界面风格非常像MATLAB,既可以直接编辑Python源码,还可以直接使用命令行工具,可以实时查看、分析变量和程序,使用起来也非常方便:

5.Visual Studio:这个编程软件应该众所周知,宇宙第一IDE,现在几乎各种编程环境都融入进来了,当然,Python也包含其中,安装Python环境后,也可以直接调试运行Python程序,对VS情有独钟的朋友,可以使用一下这个软件,也非常不错:

6.PyCharm:这是一个专业的Python IDE编程环境,功能非常强大,在业界非常流行,除了常见的智能补全、语法检查、Git等功能外,这个软件还支持代码分析、代码重构、版本控制、单元测试等功能,可以快速创建Django,Flask,Web2Py等Web项目,是一个非常不错的Python编程环境,非常值得学习:

就介绍这6个Python编程软件吧,总的来说,这6个软件使用起来都非常不错,对于初学者来说,完全够用了,感兴趣的朋友,可以尝试一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。

本文转载自互联网,如有侵权,联系删除