PHP中 “Fata error Call to undefined function curl_init()解决方法

本文主要讲述在Centos/RHEL linux系统下运行php时候遇到的错误 Fatal error: Call to undefined function curl_init() 的解决方法。 当你在配置完成一个LEMP(Linux,Nginx, MySQL, PHP)的web环境后,PHP在运行的时候有可能会在/var/log/nginx/error.log文件里看到下面的错误:

Fatal error: Call to undefined function curl_init()

根据错误的提示,我们可以基本判断curl扩展模块没有安装或者启用,所以接下里我们可以去执行下面的命令来检测php-curl 模块包是否安装。

Centos/RHEL 系统检测php-curl是否安装

执行下面的命令:

$ rpm -qa |grep php-curl

ubuntu 系统检测php-curl是否安装

执行下面的命令:

$ sudo dpkg -l |grep php-curl

 

如果没有安装,我们只需要安装或者开启curl module 扩展包。

Ubuntu下安装支持PHP的CURL扩展模块

执行下面的apt install 命令为php 7.x 安装curl 扩展模块:

$ sudo  apt install php-curl

命令输出如下:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
java-common libappindicator1 libindicator7
使用'apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
php-common php7.0-common php7.0-curl
下列【新】软件包将被安装:
php-common php-curl php7.0-common php7.0-curl
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 223 个软件包未被升级。
需要下载 880 kB 的归档。
解压缩后会消耗 4,903 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 php-common all 1:35ubuntu6.1 [10.8 kB]
获取:2 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 php7.0-common amd64 7.0.25-0ubuntu0.16.04.1 [840 kB]
获取:3 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 php7.0-curl amd64 7.0.25-0ubuntu0.16.04.1 [27.4 kB]
获取:4 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 php-curl all 1:7.0+35ubuntu6.1 [1,928 B]
已下载 880 kB,耗时 3秒 (289 kB/s)
正在选中未选择的软件包 php-common。
(正在读取数据库 ... 系统当前共安装有 220903 个文件和目录。)
正准备解包 .../php-common_1%3a35ubuntu6.1_all.deb  ...
正在解包 php-common (1:35ubuntu6.1) ...
正在选中未选择的软件包 php7.0-common。
正准备解包 .../php7.0-common_7.0.25-0ubuntu0.16.04.1_amd64.deb  ...
正在解包 php7.0-common (7.0.25-0ubuntu0.16.04.1) ...
正在选中未选择的软件包 php7.0-curl。
正准备解包 .../php7.0-curl_7.0.25-0ubuntu0.16.04.1_amd64.deb  ...
正在解包 php7.0-curl (7.0.25-0ubuntu0.16.04.1) ...
正在选中未选择的软件包 php-curl。
正准备解包 .../php-curl_1%3a7.0+35ubuntu6.1_all.deb  ...
正在解包 php-curl (1:7.0+35ubuntu6.1) ...
正在设置 php-common (1:35ubuntu6.1) ...
正在设置 php7.0-common (7.0.25-0ubuntu0.16.04.1) ...
Creating config file /etc/php/7.0/mods-available/calendar.ini with new version
…
Creating config file /etc/php/7.0/mods-available/tokenizer.ini with new version
正在设置 php7.0-curl (7.0.25-0ubuntu0.16.04.1) ...
Creating config file /etc/php/7.0/mods-available/curl.ini with new version
正在设置 php-curl (1:7.0+35ubuntu6.1) ...

Centos下安装支持PHP的CURL 模块

在centos或者Redhat系统下,可以通过yum install 命令执行下面的命令来安装curl模块:

$ sudo yum install php-curl

或者执行下面的命令:

$ sudo yum install php-common

安装完php-curl 模块后,需要重启下Apache/Nginx 服务

执行下面的命令:

$ sudo service nginx restart

或者

$ sudo /etc/init.d/nginx restart

对于centos7.x 系统,执行下面命令:

$ sudo systemctl  restart nginx

 

99%的人还阅读了:

Linux:用腻了 wget 或 curl,有什么更好的替代品吗?

Mac OS:终端下使用curl命令下载文件

Ubuntu 下curl安装及使用指南

Linux 下curl命令post传递表单数据

参考地址:https://curl.haxx.se/download.html

Linux 下curl命令post传递表单数据

本文将会讲述如何在linux或者unix系统下使用cURL工具或者命令在命令行下发送post请求传递数据。 比如上传一个文件到远程的服务器的特定目录下。如何通过cURL 命令在linux命令行下创建一个post请求来上传文件。

CURL是一个可以用来从本地传递数据请求到远程服务器的非常好用的工具,可以通过多种协议(http,https,ftp等)从远程web服务器上上传或者下载所需要的文件。 可以通过cURL工具来创建post或者get 请求来创建请求或者测试不同的请求操作。

cRURL 命令post传递参数给相应表单字段

当我们只是需要传递相应的值给表单里的特定字段,我们可以使用cURL命令的–data 或者-d选项,命令格式如下:

curl -d "key=value1&key2=value2" "url"

或者

curl --data "key=value1&key2=value2" "url"

对于上述命令,如果只是通过curl post请求传递一个参数值,那么可以不适用双引号,如果是两个以上的参数就必须使用双引号扩起来。

下面我们来看一个实例:

假如我们想向一个登陆页面传递用户名和密码数据,那么我们来看看如何创建cURL post请求来发送数据。

登陆表单的数据如下:

<form  action="login" method="post">

<input type="text"  name="username"  value="user1"/>

<input type="password"  name="password"  value="123"/>

<button type="submit"  value="登陆" />

</form>

那么可以在linux命令行下执行下面的cURL命令创建一个post请求来传递相应的字段值给表单:

curl -d "username=user1&password=123" "www.test.com/login"

如果需要跟踪做了重定向的表单网页,那么需要使用-L 选项,命令如下:

curl -L -d "username=user1&password=123" "www.test.com/login"

cURL保存当前的cookie数据

如果当前已经进行了登录操作,那么可能我们需要保存下当前已经生产的cookie数据,供其它的请求操作来使用,使用curl命令以及-c 选项进行保存当前的cookie信息:

curl -c cookie -d "username=user1&password=123" "www.test.com/login"

命令执行完成后,会在当前目录下生产一个包含cookie信息的文件。

如果需要使用已有的cookie文件来进行post请求操作,那么需要使用curl 的-b选项,执行命令如下:

curl -L -b cookie -d "key3=value3" "url"

通过cURL命令上传文件

如果需要通过cURL 工具上传某个文件到相应表单,可以使用-F 选项,命令格式如下:

curl -F "data=@filename" "url"

例如你想上传一个文件到远程的服务器表单(http://www.test.com/upload),接收文件的表单参数名为img,那么我们可以执行下面的命令:

curl -F “img=@linux.gif" "http://www.test.com/upload"

如果要同时上传多个文件,可以执行下面的命令:

curl -F "img1=@linux1.gif" -F "img2=@linux2.gif" "http://www.test.com/upload"

PHP中通过cURL建立post请求获取数据

因为PHP支持curl中的库,所有可以在php中模拟curl的post请求来抓取到想要的数据。 下面我们通过curl post方式来打开特定页面并获取页面数据,代码如下:

$url = "http://localhost/test.php";
//curl post请求所需要传递的参数值
$post_data = array ("username" => "user1","key" => "test");
$ch = curl_init(); // curl post 请求操作初始化
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// post数据
curl_setopt($ch, CURLOPT_POST, 1);// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
print_r($output); //打印抓取到的页面数据

通过上面的php程序返回的数据是json格式。

更多关于curl的用法可以参看帮助文档,执行下面命令:

$ man curl

99%的人还阅读了:

Linux:用腻了 wget 或 curl,有什么更好的替代品吗?

Mac OS:终端下使用curl命令下载文件

Ubuntu 下curl安装及使用指南

Ubuntu 下curl安装及使用指南

对于linux用户,可能经常会用到curl工具从远程的服务器上通过http,https, SCP, SFTP,SMB或者其它支持的协议来下载或传输文件。 本文将会讲述如何下载到你需要的curl 程序文件,以及如何在ubuntu系统下安装curl工具,并对curl的一些常用的命令做介绍。

Curl 是什么

CURL是Linux系统下常用的功能强大的网络工具,可以通过多种协议(http,https,ftp等)从远程web服务器上上传或者下载所需要的文件。 我们可以通过curl工具来抓取网页来监控可能会遇到的问题。curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。 curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。

curl 工具常用的参数如下

-a/--append 上传文件时,附加到目标文件
-A/--user-agent <string> 设置用户代理发送给服务器

- anyauth 可以使用“任何”身份验证方法

-b/--cookie <name=string/file> cookie字符串或文件读取位置

- basic 使用HTTP基本验证

-B/--use-ascii 使用ASCII /文本传输

-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中

-C/--continue-at <offset> 断点续转

-d/--data <data> HTTP POST方式传送数据

--data-ascii <data> 以ascii的方式post数据

--data-binary <data> 以二进制的方式post数据

--negotiate 使用HTTP身份验证

--digest 使用数字身份验证

--disable-eprt 禁止使用EPRT或LPRT

--disable-epsv 禁止使用EPSV

-D/--dump-header <file> 把header信息写入到该文件中

--egd-file <file> 为随机数据(SSL)设置EGD socket路径

--tcp-nodelay 使用TCP_NODELAY选项

-e/--referer 来源网址

-E/--cert <cert[:passwd]> 客户端证书文件和密码 (SSL)

--cert-type <type> 证书文件类型 (DER/PEM/ENG) (SSL)

--key <key> 私钥文件名 (SSL)

--key-type <type> 私钥文件类型 (DER/PEM/ENG) (SSL)

--pass <pass> 私钥密码 (SSL)

--engine <eng> 加密引擎使用 (SSL). "--engine list" for list

--cacert <file> CA证书 (SSL)

--capath <directory> CA目录 (made using c_rehash) to verify peer against (SSL)

--ciphers <list> SSL密码

--compressed 要求返回是压缩的形势 (using deflate or gzip)

--connect-timeout <seconds> 设置最大请求时间

--create-dirs 建立本地目录的目录层次结构

--crlf 上传是把LF转变成CRLF

-f/--fail 连接失败时不显示http错误

--ftp-create-dirs 如果远程目录不存在,创建远程目录

--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用

--ftp-pasv 使用 PASV/EPSV 代替端口

--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址

--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输

--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输

-F/--form <name=content> 模拟http表单提交数据

-form-string <name=string> 模拟http表单提交数据

-g/--globoff 禁用网址序列和范围使用{}和[]

-G/--get 以get的方式来发送数据

-h/--help 帮助

-H/--header <line>自定义头信息传递给服务器

--ignore-content-length 忽略的HTTP头信息的长度

-i/--include 输出时包括protocol头信息

-I/--head 只显示文档信息

从文件中读取-j/--junk-session-cookies忽略会话Cookie

- 界面<interface>指定网络接口/地址使用

- krb4 <级别>启用与指定的安全级别krb4

-j/--junk-session-cookies 读取文件进忽略session cookie

--interface <interface> 使用指定网络接口/地址

--krb4 <level> 使用指定安全级别的krb4

-k/--insecure 允许不使用证书到SSL站点

-K/--config 指定的配置文件读取

-l/--list-only 列出ftp目录下的文件名称

--limit-rate <rate> 设置传输速度

--local-port<NUM> 强制使用本地端口号

-m/--max-time <seconds> 设置最大传输时间

--max-redirs <num> 设置最大读取的目录数

--max-filesize <bytes> 设置最大下载的文件总量

-M/--manual 显示全手动

-n/--netrc 从netrc文件中读取用户名和密码

--netrc-optional 使用 .netrc 或者 URL来覆盖-n

--ntlm 使用 HTTP NTLM 身份验证

-N/--no-buffer 禁用缓冲输出

-o/--output 把输出写到该文件中

-O/--remote-name 把输出写到该文件中,保留远程文件的文件名

-p/--proxytunnel 使用HTTP代理

--proxy-anyauth 选择任一代理身份验证方法

--proxy-basic 在代理上使用基本身份验证

--proxy-digest 在代理上使用数字身份验证

--proxy-ntlm 在代理上使用ntlm身份验证

-P/--ftp-port <address> 使用端口地址,而不是使用PASV

-Q/--quote <cmd>文件传输前,发送命令到服务器

-r/--range <range>检索来自HTTP/1.1或FTP服务器字节范围

--range-file 读取(SSL)的随机文件

-R/--remote-time 在本地生成文件时,保留远程文件时间

--retry <num> 传输出现问题时,重试的次数

--retry-delay <seconds> 传输出现问题时,设置重试间隔时间

--retry-max-time <seconds> 传输出现问题时,设置最大重试时间

-s/--silent静音模式。不输出任何东西

-S/--show-error 显示错误

--socks4 <host[:port]> 用socks4代理给定主机和端口

--socks5 <host[:port]> 用socks5代理给定主机和端口

--stderr <file>

-t/--telnet-option <OPT=val> Telnet选项设置

--trace <file> 对指定文件进行debug

--trace-ascii <file> Like --跟踪但没有hex输出

--trace-time 跟踪/详细输出时,添加时间戳

-T/--upload-file <file> 上传文件

--url <URL> Spet URL to work with

-u/--user <user[:password]>设置服务器的用户和密码

-U/--proxy-user <user[:password]>设置代理用户名和密码

-v/--verbose

-V/--version 显示版本信息

-w/--write-out [format]什么输出完成后

-x/--proxy <host[:port]>在给定的端口上使用HTTP代理

-X/--request <command>指定什么命令

-y/--speed-time 放弃限速所要的时间。默认为30

-Y/--speed-limit 停止传输速度的限制,速度时间'秒

-z/--time-cond 传送时间设置

-0/--http1.0 使用HTTP 1.0

-1/--tlsv1 使用TLSv1(SSL)

-2/--sslv2 使用SSLv2的(SSL)

-3/--sslv3 使用的SSLv3(SSL)

--3p-quote like -Q for the source URL for 3rd party transfer

--3p-url 使用url,进行第三方传送

--3p-user 使用用户名和密码,进行第三方传送

-4/--ipv4 使用IP4

-6/--ipv6 使用IP6

-#/--progress-bar 用进度条显示当前的传送状态

ubuntu curl 安装

在ubuntu系统下最简单的curl工具安装是通过apt命令或 apt-get 命令, 执行下面的apt命令:

$sudo apt install curl

命令输出如下:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
java-common libappindicator1 libindicator7
使用'apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
libcurl3-gnutls
下列【新】软件包将被安装:
curl
下列软件包将被升级:
libcurl3-gnutls
升级了 1 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 357 个软件包未被升级。
需要下载 138 kB/323 kB 的归档。
解压缩后会消耗 340 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu xenial-security/main amd64 curl amd64 7.47.0-1ubuntu2.5 [138 kB]
已下载 138 kB,耗时 0秒 (915 kB/s)
(正在读取数据库 ... 系统当前共安装有 185776 个文件和目录。)
正准备解包 .../libcurl3-gnutls_7.47.0-1ubuntu2.5_amd64.deb  ...
正在将 libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.5) 解包到 (7.47.0-1ubuntu2.2) 上 ...
正在选中未选择的软件包 curl。
正准备解包 .../curl_7.47.0-1ubuntu2.5_amd64.deb  ...
正在解包 curl (7.47.0-1ubuntu2.5) ...
正在处理用于 libc-bin (2.23-0ubuntu9) 的触发器 ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在设置 libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.5) ...
正在设置 curl (7.47.0-1ubuntu2.5) ...
正在处理用于 libc-bin (2.23-0ubuntu9) 的触发器 ...

当然你也可以直接从curl官方下载源码包进行安装,执行下面的wget命令来下载curl源码文件:

wget http://archive.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.52.1.orig.tar.gz

或者直接下载curl的二进制安装包,执行下面命令:

wget http://security.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.52.1-4ubuntu1.4_amd64.deb

Curl 命令GET请求

当curl命令安装完成后,我们:通过执行下面的命令来查看HTTP的header信息:

$curl -I https://www.bing.com

命令输出如下:

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 119115
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
P3P: CP="NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND"
Set-Cookie: SRCHD=AF=NOFORM; domain=.bing.com; expires=Thu, 23-Jan-2020 09:16:18 GMT; path=/
Set-Cookie: SRCHUID=V=2&GUID=52B6738D04434E1DA43017741146CB8F&dmnchg=1; domain=.bing.com; expires=Thu, 23-Jan-2020 09:16:18 GMT; path=/
Set-Cookie: SRCHUSR=DOB=20180123; domain=.bing.com; expires=Thu, 23-Jan-2020 09:16:18 GMT; path=/
Set-Cookie: _SS=SID=29B9E200E45061CF08A6E980E5E76063; domain=.bing.com; path=/
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
X-MSEdge-Ref: Ref A: 1FEEFC982E894C71AEC43DB3ED5118FF Ref B: BJ1EDGE0210 Ref C: 2018-01-23T09:16:18Z
Set-Cookie: _EDGE_S=F=1&SID=29B9E200E45061CF08A6E980E5E76063; path=/; httponly; domain=bing.com
Set-Cookie: _EDGE_V=1; path=/; httponly; expires=Sun, 17-Feb-2019 09:16:18 GMT; domain=bing.com
Set-Cookie: MUID=3D6BD680705A62C12D1DDD0071ED6374; path=/; expires=Sun, 17-Feb-2019 09:16:18 GMT; domain=bing.com
Set-Cookie: MUIDB=3D6BD680705A62C12D1DDD0071ED6374; path=/; httponly; expires=Sun, 17-Feb-2019 09:16:18 GMT
Date: Tue, 23 Jan 2018 09:16:17 GMT

curl显示页面的全部信息

curl -i http://www.osetc.com

命令输出如下:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
HTTP/1.1 200 OK
Date: Tue, 23 Jan 2018 09:17:38 GMT
Server: Apache/2.2.22 (Unix) PHP/5.2.17p1
X-Powered-By: PHP/5.2.17p1
Link: <http://www.osetc.com/wp-json/>; rel="https://api.w.org/"
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html>
<html lang="en-US" class="no-js no-svg">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="profile" href="http://gmpg.org/xfn/11">
<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
<title>OSETC 技术网 | 专注于Linux/Unix系统技术</title>
……

 

显示GET请求的解析过程

curl -v http://www.osetc.com

ubuntu curl 下载 文件

如果你想通过curl命令来下载远程服务器上的文件,那么你需要使用-o 选项,将远程文件保存到本地,执行下面的命令:

curl -o fio.html    http://www.osetc.com/archives/20394.html

命令输出如下:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 90306    0 90306    0     0  64524      0 --:--:--  0:00:01 --:--:-- 64550

上面的命令将会把远程服务器上的20394.html 文件下载到当前目录并保存为 fio.html.

执行下面命令来查看文件是否下载成功:

root@devops-virtual-machine:~# ls fio.html
fio.html

你也可以使用下面的命令来恢复之前断开的curl下载过程,需要使用curl命令的选线组合:-L -O -C -:

curl -L -O -C - http://www.osetc.com/fio.txt

ubuntu curl 上传文件

如果需要通过curl命令来上传文件到远程的web服务器,可以使用curl命令的 -T选项,执行命令如下:

curl -T "{文件1,文件2}“ ftp://www.osetc.com/upload/

99%的人还阅读了:

Linux:用腻了 wget 或 curl,有什么更好的替代品吗?

Mac OS:终端下使用curl命令下载文件

参考地址:https://curl.haxx.se/download.html

Linux 查看发行版本信息以及内核版本的方法(CentOS/Ubuntu)

本文主要讲述如何在linux系统下查看不同发型版本的版本信息(centos/ubuntu),以及查看linux内核版本号的方法。当前已经存在了很多的linux 版本,那么这些版本直接到底有什么区别,有什么特点,到底哪个linux发行版本更好用呢。

linux 发行版本概念

Linux 主要作为Linux发行版(通常被称为”distro”)的一部分而使用。这些发行版由个人,松散组织的团队,以及商业机构和志愿者组织编写。它们通常包括了其他的系统软件和应用软件,以及一个用来简化系统初始安装的安装工具,和让软件安装升级的集成管理器。大多数系统还包括了像提供GUI界面的XFree86之类的曾经运行于BSD的程序。 一个典型的Linux发行版包括:Linux内核,一些GNU程序库和工具,命令行shell,图形界面的X Window系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公套件,编译器,文本编辑器到科学工具的应用软件。-来自百度百科

linux 版本信息查看命令(centos/ubuntu)

查看linux发行版系统的信息

1# 使用lsb_release –a 命令

这个命令基本使用与所有其它的linux发型版本(redhat,centos, fedora, Ubuntu,suse等)

# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:     Ubuntu 16.04.3 LTS
Release:  16.04
Codename:      xenial

2# 查看/etc/issue 文件的信息

执行下面命令:

#cat /etc/issue
Ubuntu 16.04.3 LTS \n \l

3#  查看/etc/redhat-release 文件

执行下面命令:

# cat /etc/redhat-release
CentOS release 6.5 (Final)

查看linux系统架构

在日常工作中我们有时会需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,下面将会介绍5个命令来查看系统的架构信息。无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎可以通吃所有 Linux 发行版,例如:RHEL、CentOS、Fedora、Scientific Linux、Debian、Ubuntu、Linux Mint、OpenSUSE 等等。

1# uname 命令

uname -a 命令可以直接显示 Linux 系统架构的命令,安几乎可以工作在所有 Linux/Unix 系统当中。

执行命令:

# uname –a
Linux devops-virtual-machine 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

2# dpkg 命令

dpkg 的命令可用于查看 Debian/ Ubuntu 操作系统是 32 位还是 64 位,此命令只适用于基于 Debian 和 Ubuntu 的 Linux 发行版。

执行下面命令:

#dpkg –print-architecture
amd64

3# getconf命令

getconf 命令主要用于显示系统变量配置,我们也可使用如下参数来查看 Linux 系统架构

执行下面的命令:

#getconf LONG_BIT
64

4# arch 命令

arch 命令主要用于显示操作系统架构类型,与 uname -m 命令非常类似。如果输出 x86_64 则表示为 64 位系统,如果输出 i686 或 i386 则表示为 32 位系统。

执行下面的命令:

#arch
x86_64

5# file 命令

file 命令可以配合 /sbin/init 这个特殊参数来查看系统架构类型(/sbin/init 在 Ubuntu 15.10 里面是链接到/lib/systemd/systemd 的)

执行下面的命令:

#file /sbin/init

linux 内核版本号查看命令

下面我们通过两个方法来介绍如何查看linux系统的内核版本号。

1# 使用命令: uname -a

该命令可以用来 查看系统内核版本号及系统名称

执行命令:

# uname –a
Linux devops-virtual-machine 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

从上面的命令输出,我们可以看到linux的内核版本号为:4.10.0-28

2# 使用命令 cat /proc/version

作用: 查看目录”/proc”下version的信息,也可以得到当前系统的内核版本号及系统名称

# cat /proc/version
Linux version 4.10.0-28-generic (buildd@lgw01-12) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017

另外:

/proc文件系统,它不是普通的文件系统,而是系统内核的映像,也就是说,该目录中的文件是存放在系统内存之中的,它以文件系统的方式为访问系统内核数据的操作提供接口。而我们使用命令“uname -a”的信息就是从该文件获取的,当然用方法二的命令直接查看它的内容也可以达到同等效果.另外,加上参数”a”是获得详细信息,如果不加参数为查看系统名称。

linux发行版本有哪些

发行版为许多不同的目的而制作, 包括对不同计算机结构的支持, 对一个具体区域或语言的本地化,实时应用,和嵌入式系统,甚至许多版本故意地只加入免费软件。已经有超过三百个发行版被积极的开发,最普遍被使用的发行版有大约十二个。

每一款发行版都拥有一大批用户,开发者自愿为相关项目投入精力。Linux发行版可谓是形形色色,它们旨在满足每一种能想得到的需求。下面将会简要介绍述十款常用Linux发行版,并会介绍该发行版的目标用户,以及它与其他发行版相比有什么样的特殊功能。

1. Debian

Debian运行起来极其稳定,这使得它非常适合用于服务器。Debian平时维护三套正式的软件库和一套非免费软件库,这给另外几款发行版(比如Ubuntu和Kali等)带来了灵感。Debian这款操作系统派生出了多个Linux发行版。它有37500多个软件包,这方面唯一胜过Debian的其他发行版只有Gentoo。Debian使用apt或aptitude来安装和更新软件。

Debian这款操作系统无疑并不适合新手用户,而是适合系统管理员和高级用户。Debian支持如今的大多数架构(处理器)。

下载Debian ISO映像文件:http://www.debian.org/distrib/

附有屏幕截图的Debian安装:《Debian 7.0″Wheezy”安装指南

debian linux

2. Gentoo

与Debian一样,Gentoo这款操作系统也包含数量众多的软件包。Gentoo并非以预编译的形式出现,而是每次需要针对每个系统进行编译。连Gentoo社区都觉得Gentoo安装和使用起来很困难;不过它被认为是最佳学习对象,可以进而了解Linux操作系统的内部运作原理。提到Gentoo总有人这么说:”如果你要学用Linux发行版,那就学用该发行版吧;如果你学会了Gentoo,也就学会了Linux。”Gentoo使用portage来安装和更新软件。

Gentoo这款操作系统适合对Linux已经完全驾轻就熟的那些用户。

下载和安装Gentoo:http://www.gentoo.org/main/en/where.xml

gentoo linux

3. Ubuntu

Ubuntu是Debian的一款衍生版,也是当今最受欢迎的免费操作系统。Ubuntu侧重于它在这个市场的应用,在服务器、云计算、甚至一些运行Ubuntu Linux的移动设备上很常见。作为Debian Gnu Linux的一款衍生版,Ubuntu的进程、外观和感觉大多数仍然与Debian一样。它使用apt软件管理工具来安装和更新软件。它也是如今市面上用起来最容易的发行版之一。Ubuntu使用基于apt的程序包管理器。

Ubuntu是新手用户肯定爱不释手的一款操作系统。

下载Ubuntu ISO映像文件:http://www.ubuntu.com/download

附有屏幕截图的Ubuntu安装:《Ubuntu 13.04″Raring Ringtail”安装指南

ubuntu linux

4. Damn Vulnerable Linux

当然,大多数人可能对这款发行版前所未闻,不过该发行版在本文中还是占有一席之地。那么,它有何过人之处呢? Damn Vulnerable Linux恰如其名:其字面意思就是”该死的易受攻击的Linux”。Vulnerable Linux(DVL)根本不是一般意义上的优秀的Linux发行版。它有意捆绑了坏的、配置不当的、过时的、很容易被不法分子攻击的软件。

它的目的在于借机训练Linux管理员。还有什么比给Linux管理员一款坏的发行版去排解问题来得更管用的吗?面对Apache、MySQL、PHP、FTP和SSH等比较旧或破的版本,接受训练的管理员够有得忙了。

Damn Vulnerable Linux堪称旨在训练管理员的实验室。

下载Damn Vulnerable Linux(DVL)ISO映像文件:DVL_1.5_Infectious_Disease.iso

Damn Vulnerable Linux

5. 红帽企业级Linux

这是第一款面向商业市场的Linux发行版。它有服务器版本,支持众多处理器架构,包括x86和x86_64。红帽公司通过课程红帽认证系统管理员/红帽认证工程师(RHCSA/RHCE),对系统管理员进行培训和认证。就全球市场而言,总利润中80%来自支持,另外20%来自培训和认证,不过在印度不是这样。

在印度,红帽的利润中80%来自认证和培训,只有20%来自支持。而Fedora是个平台,而不是开发新产品或新应用程序的测试环境;一旦成为稳定版,就与红帽企业级Linux捆绑在一起,包括支持。红帽提供了非常多的稳定版应用程序,但是众所周知的缺点是,把太多旧程序包打包起来,支持成本确实相当高。不过,如果安全是关注的首要问题,那么红帽企业级Linux的确是款完美的发行版,它使用YUM程序包管理器。

红帽企业级Linux是系统管理员的第一选择,它有众多的程序包,还有非常到位的支持。

由于该发行版是商业化产品,所以不是免费的。不过,你可以下载用于教学用途的测试版。

下载红帽企业级Linux测试版DVD ISO映像文件:RedHat Enterprise Linux(测试版

附有屏幕截图的RHEL 6安装:《RHEL 6安装指南

补充说明:通常认为,开发了该发行版的Marc Ewin将该产品命名为红帽,因为他丢失了似乎很心爱的那顶红色帽子,帽子是他爷爷在他过生日时送的礼物。

redhat linux

6. CentOS

CentOS是一款企业级Linux发行版,它使用红帽企业级Linux中的免费源代码重新构建而成。这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。有些人不想支付一大笔钱,又能领略红帽企业级Linux;对他们来说,CentOS值得一试。此外,CentOS的外观和行为似乎与母发行版红帽企业级Linux如出一辙。 CentOS使用YUM来管理软件包。

非常稳定的程序包;谁要是想在桌面端测试一下服务器的运作原理,都应该试试这款操作系统。

下载CentOS 6.4 DVD ISO映像文件:http://wiki.centos.org/Download

附有屏幕截图的CentOS 6.4安装:《CentOS 6.4安装指南

centos linux

7. Fedora

小巧的Fedora适合那些人:想尝试最先进的技术,等不及程序的稳定版出来。其实,Fedora就是红帽公司的一个测试平台;产品在成为企业级发行版之前,在该平台上进行开发和测试。Fedora是一款非常好的发行版,有庞大的用户论坛,软件库中还有为数不少的软件包。Fedora同样使用YUM来管理软件包。

下载Fedora 18(Spherical Cow)DVD ISO映像文件:http://fedoraproject.org/en/get-fedora

附有屏幕截图的Fedora 18(Spherical Cow)安装:《Fedora 18(Spherical Cow)安装指南

fedora linux

8. Kali Linux

Kali Linux是Debian的一款衍生版。Kali旨在用于渗透测试。它大概在三个月前才发行。Kali的前身是Backtrack。用于Debian的所有Binary软件包都可以安装到Kali Linux上,而Kali的魅力或威力就来自于此。此外,支持Debian的用户论坛为Kali加分不少。Kali随带许多的渗透测试工具,无论是Wifi、数据库还是其他任何工具,都设计成立马可以使用。Kali使用APT来管理软件包。

毫无疑问,Kali Linux是一款渗透测试工具,或者是文明黑客(我不想谈论恶意黑客)青睐的操作系统。

下载Kali Linux DVD ISO映像文件:Kali Linux 6

Kali Linux

9. Arch Linux

Arch是一款采用滚动发行方式的操作系统:只要安装一次就够了;每当发行了某个新版本,就可以升级发行版,不需要重新安装。Pacman是Arch Linux的软件包管理器。Arch Linux既支持X86处理器架构,又支持X86_64架构,安装程序可以从光盘或U盘来运行。Arch旨在从开发者的角度而不是从用户的角度做到力求简单。Arch配置和安装起来超容易。它真是一款面向高手的发行版,让你可以了解Linux系统的每一个细枝末节。

下载Arch Linux ISO映像文件:https://www.archlinux.org/download/

Arch Linux

10. OpenSuse

OpenSuse这款Linux发行版是免费的,并不供商业用途使用,仍然供个人使用。OpenSuse的真正竞争对手是红帽企业级Linux。它使用Yast来管理软件包。有了Yast,使用和管理服务器应用程序就非常容易。此外,Yast安装向导程序可以配置电子邮件服务器、LDAP服务器、文件服务器或Web服务器,没有任何不必要的麻烦。它随带snapper快照管理工具,因而可以恢复或使用旧版的文件、更新和配置。由于让滚动发行版本成为可能的Tumbleweed,可将已安装的操作系统更新到最新版本,不需要任何的新发行版。

SUSE在管理员当中的名气更大,因为它有Yast以及让系统管理员能够自动管理任务的其他此类应用程序,同样水准的其他发行版没有这项功能。

下载OpenSuse 12.3 DVD ISO映像文件:http://software.opensuse.org/123/en

附有屏幕截图的OpenSuse 12.3安装:《OpenSuse 12.3安装指南

OpenSuse

市面上有好几百款发行版,每款发行版在某个方面都与众不同。不可能在此全部罗列,本文只罗列了十款最常见的Linux发行版(世界上只有两种人,一种是懂二进制的,另一种是不懂二进制的)。

linux不同版本的区别,都有什么特点(版本比较)

Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Redhat(RHEL)为代表,后者以Debian为代表。

下面介绍一下各个发行版本的特点:

Redhat,应该称为Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所谓的Redhat Advance Server收费版本)、FedoraCore(由原来的Redhat桌面版本发展而来,免费版本)、CentOS(RHEL的社区克隆版本,免费)。Redhat应该说是在国内使用人群最多的Linux版本,甚至有人将Redhat等同于Linux,而有些老鸟更是只用这一个版本的Linux。所以这个版本的特点就是使用人群数量大,资料非常多,言下之意就是如果你有什么不明白的地方,很容易找到人来问,而且网上的一般Linux教程都是以Redhat为例来讲解的。Redhat系列的包管理方式采用的是基于RPM包的YUM包管理方式,包分发方式是编译好的二进制文件。稳定性方面RHEL和CentOS的稳定性非常好,适合于服务器使用,但是Fedora Core的稳定性较差,最好只用于桌面应用。

Debian,或者称Debian系列,包括Debian和Ubuntu等。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debian最早由Ian Murdock于1993年创建,分为三个版本分支(branch): stable, testing和unstable。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经过unstable中的测试,相对较为稳定,也支持了不少新技术(比如SMP等)。而stable一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。Debian最具特色的是apt-get /dpkg包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式,但在二进制文件发行方式中,APT应该是最好的了。Debian的资料也很丰富,有很多支持的社区,有问题求教也有地方可去。

Ubuntu 严格来说不能算一个独立的发行版本,Ubuntu是基于Debian的unstable版本加强而来,可以这么说Ubuntu就是一个拥有Debian所有的优点,以及自己所加强的优点的近乎完美的Linux桌面系统。根据选择的桌面系统不同,有多个版本可供选择,比如基于unity的Ubuntu,基于Gnome的Ubuntu Gnome,基于KDE的Kubuntu,基于LXDE的Lubuntu以及基于Xfce的Xubuntu等。特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面系统的Linux发行版本。

Gentoo 伟大的Gentoo是Linux世界最年轻的发行版本,正因为年轻,所以能吸取在她之前的所有发行版本的优点,这也是Gentoo被称为最完美的Linux发行版本的原因之一。

FreeBSD,需要强调的是:FreeBSD并不是一个Linux系统!但FreeBSD与Linux的用户群有相当一部分是重合的,二者支持的硬件环境也比较一致,所采用的软件也比较类似,所以可以将FreeBSD视为一个Linux版本来比较。

FreeBSD拥有两个分支:stable和current。顾名思义,stable是稳定版,而current则是添加了新技术的测试版。FreeBSD采用Ports包管理系统,与Gentoo类似,基于源代码分发,必须在本地机器编后后才能运行,但是Ports系统没有Portage系统使用简便,使用起来稍微复杂一些。FreeBSD的最大特点就是稳定和高效,是作为服务器操作系统的最佳选择,但对硬件的支持没有Linux完备,所以并不适合作为桌面系统。

下面给为选择一个Linux发行版本犯愁的朋友一些建议:

如果你只是需要一个桌面系统,而且既不想使用盗版,又不想花大量的钱购买商业软件,那么你就需要一款适合桌面使用的Linux发行版本了,如果你不想自己定制任何东西,不想在系统上浪费太多时间,那么很简单,你就根据自己的爱好在ubuntu、kubuntu以及xubuntu中选一款吧,三者的区别仅仅是桌面程序的不一样。

如果你需要一个桌面系统,而且还想非常灵活的定制自己的Linux系统,想让自己的机器跑得更欢,不介意在Linux系统安装方面浪费一点时间,那么你的唯一选择就是Gentoo,尽情享受Gentoo带来的自由快感吧!

如果你需要的是一个服务器系统,而且你已经非常厌烦各种Linux的配置,只是想要一个比较稳定的服务器系统而已,那么你最好的选择就是CentOS了,安装完成后,经过简单的配置就能提供非常稳定的服务了。

如果你需要的是一个坚如磐石的非常稳定的服务器系统,那么你的唯一选择就是FreeBSD。

如果你需要一个稳定的服务器系统,而且想深入摸索一下Linux的各个方面的知识,想自己定制许多内容,那么我推荐你使用Gentoo。[3]  参考文献:百度百科

linux系统哪个版本更好用?

至于那个linux 发型版本更好用,这也是因人而异,下面我们给出一个统计图,针对不同发行版本系统的使用比例的对比。

linux 不同发行版本市场占有率排名

本文永久链接:http://www.osetc.com/archives/20394.html

Linux 下apache 服务器安装与配置教程(配置文件虚拟主机多站点详解)

本文主要讲述如何在linux系统下安装及配置APACHE web 服务器(httpd),并讲解如何配置针对apache 配置SSL, PHP,HTTPS等,并会详细介绍apache配置文件以及如何来配置虚拟主机,apache web 多站点配置等。

Apache 是什么

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python解释器编译到服务器中。 摘自百度百科

Apache 该怎么读

Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。也是一个基金会的名称、一种武装直升机等等。 所以我们一般讲apache读作“阿帕奇”。

Apache 安装与配置

1# Apache 服务器安装前的准备工作

检查该环境中是否已经存在httpd服务的配置文件,默认存储路径:/etc/httpd/httpd.conf(这是centos预装的Apache的一个ent版本,一般我们安装源代码版的Apache)。如果已经存在/etc/httpd/httpd.conf,请先卸载或者关闭centos系统自带的web服务,执行命令:chkconfig  httpd off,再或者把centos自带的httpd服务的80端口改为其他端口,只要不与我们安装的Apache服务的端口冲突就可以啦。

停止并卸载Linux系统自带的httpd服务,执行下面的命令:

service httpd stop
ps -ef | grep httpd
kill -9 pid号(逐个删除)
rpm -qa |grep httpd
rpm -e httpd软件包

最后我们来查看下apache默认配置文件httpd.conf是否被删除,执行下面的命令:

find / -name httpd.conf

2# 下载apache源码包(httpd-2.4.28.tar.gz或httpd-2.2.34.tar.gz)

执行下面的命令:

Wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.28.tar.gz

或者

Wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.2.34.tar.gz

3# 安装相关软件包apr、apr-util、pcre

在编译安装apache源码包之前,我们需要先安装三个依赖软件包apr、apr-util、pcre, 否则会出现下面的安装错误。

checking for APR... no
configure: error: APR not found.  Please read the documentation.

首先执行下面的wget命令来下载依赖包的源码包:

Wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.2.tar.gzWget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.0.tar.gzWget  https://sourceforge.net/settings/mirror_choices?projectname=pcre&filename=pcre2/10.30/pcre2-10.30.zip

执行下面的命令,编译安装相应软件包:

a)解决apr not found问题

# tar -zxf apr-1.6.2.tar.gz
# ./configure --prefix=/usr/local/apr
# make
# make install

b)解决APR-util not found问题

# tar -zxf apr-util-1.6.0.tar.gz
# ./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config
# make
# make install

c)解决pcre-config for libpcre not found问题

# unzip pcre2-10.30.zip
# cd pcre2-10.30
# ./configure --prefix=/usr/local/pcre
# make
# make install

4# 安装apache 源码包

在安装Apache时,我分别针对不同版本进行了安装,在编译时是不同的,configure后跟的参数不同。

对于httpd-2.2.34版本编译命令如下:

./configure --prefix=/usr/local/apache2 (安装目录参数后面可以不加任何参数,直接安装即可)
make
make install

对于httpd-2.4.28版本编译安装命令如下:

./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre (除了指定Apache的安装目录外,还要安装apr、apr-util、pcre,并指定参数)
make
make install

5#启动apache 服务

执行下面的命令:

# /usr/local/apache2/bin/apachectl start

另外如果想停止或者重启apache服务,可以执行下面的命令:

#/usr/local/apache2/bin/apachectl stop
# /usr/local/apache2/bin/apachectl restart

网站的php程序文件放在/usr/local/apache2/htdocs目录下,下面应该会有一个名为index.php的文件。

6# 验证apache服务器是否配置成功

通过浏览器打开连接http://localhost:80, 如果看到页面中显示“It works!”字样,则代表Apache验证通过。如果网站的index后缀是PHP格式的,则要修改httpd.conf配置文件(/usr/local/apache2/conf),在DirectoryIndex增加 index.php。

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>

如果网站不能访问,那么可能是防火墙开启导致,执行下面的命令,将防火墙关闭,或者开启80端口。

执行下面命令:

# service iptables stop

Apache 服务器配置文件详解

Apache的主配置文件:/etc/httpd/conf/httpd.conf

下面我们来依次介绍httpd.conf文件中每一项说明

1# ServerRoot 配置

ServerRoot “” 主要用于指定Apache的安装路径,此选项参数值在安装Apache时系统会自动把Apache的路径写入。Windows安装时,该选项的值为Windows安装的路径,Linux安装时该选项值为编译时选择的路径.

Apache 服务器配置文件详解-1-serverroot配置

2# Mutex default:logs

互斥:允许你为多个不同的互斥对象设置互斥机制mutex mechanism和互斥文件目录,或者修改全局默认值

如果互斥对象是基于文件的以及默认的互斥文件目录不在本地磁盘或因为其它原因而不适用,那么取消注释并改变目录。

下面这个命令是改变互斥对象的目录

Apache 服务器配置文件详解-2-Mutex default

3# Listen 配置

Apache 服务器配置文件详解-3-Listen 配置

Listen主要侦听web服务端口状态,默认为:80,即侦听所有的地址的80端口,注意这里也可以写成IP地址的侦听形式,不写即默认的地址:0.0.0.0

4# Dynamic Shared Object (DSO) Support(动态共享对象支持)

Apache 服务器配置文件详解-4-Dynamic Shared Object (DSO) Support

主要用于添加Apache一些动态模块,比如php支持模块。重定向模块,认证模块支持,注意如果需要添加某些模块支持,只需把相关模块前面注释符号取消掉。如图所示,要对Apache添加某个功能模块,把前面的注释符号去掉就行

5# Apache运行用户配置

Apache 服务器配置文件详解-5# Apache运行用户配置

此选项主要用指定Apache服务的运行用户和用户组,默认为:daemon,如图所示下

6# Apache服务默认管理员地址设置

Apache 服务器配置文件详解-6# Apache服务默认管理员地址设置

此选项主要用指定Apache服务管理员通知邮箱地址,选择默认值即可,如果有真实的邮箱地址也可以设置此值

7# Apache的默认服务名及端口设置

Apache 服务器配置文件详解7# Apache的默认服务名及端口设置

此选项主要用指定Apache默认的服务器名以及端口,默认参数值设置为:ServerName localhost:80即可

8# Apache的根目录访问控制设置

Apache 服务器配置文件详解-8# Apache的根目录访问控制设置

此选项主要是针对用户对根目录下所有的访问权限控制,默认Apache对根目录访问都是拒绝访问。后面会继续讲到

9# Apache的默认网站根目录设置及访问控制

Apache 服务器配置文件详解-9# Apache的默认网站根目录设置及访问控制

此区域的配置文件,主要是针对Apache默认网站根目录的设置以及相关的权限访问设置,默认对网站的根目录具有访问权限,此选项默认值即可

10# Apache的默认首页设置

Apache 服务器配置文件详解-10# Apache的默认首页设置

此区域文件主要设置Apache默认支持的首页,默认只支持:index.html首页,如要支持其他类型的首页,需要在此区域添加:如index.php表示支持index.php类型首页

11# Apache关于.ht文件访问配置

Apache 服务器配置文件详解-11# Apache关于.ht文件访问配置

此选项主要是针对.ht文件访问控制,默认为具有访问权限,此区域文件默认即可

12# Apache关于日志文件配置

Apache 服务器配置文件详解-12# Apache关于日志文件配置

此区域文件主要是针对Apache默认的日志级别,默认的访问日志路径,默认的错误日志路径等相关设置,此选项内容默认即可

13# URL重定向,cgi模块配置说明

Apache 服务器配置文件详解-13# URL重定向,cgi模块配置说明1

Apache 服务器配置文件详解-13# URL重定向,cgi模块配置说明1

Apache 服务器配置文件详解-13# URL重定向,cgi模块配置说明1

此区域文件主要包含一些URL重定向,别名,脚本别名等相关设置,以及一些特定的处理程序,比如cgi设置说明。后期会继续说道

14# MIME媒体文件,以及相关http文件解析配置说明

Apache 服务器配置文件详解-14# MIME媒体文件,以及相关http文件解析配置说明

此区域文件主要包含一些mime文件支持,以及添加一些指令在给定的文件扩展名与特定的内容类型之间建立映射关系,比如添加对php文件扩展名映射关系。

15# 服务器页面提示设置

Apache 服务器配置文件详解-15# 服务器页面提示设置

此区域可定制的访问错误响应提示,支持三种方式:1明文 ,2本地重定向 3,外部重定向;另外还包括内存映射或“发送文件系统调用”可被用于分发文件等配置

16# Apache服务器补充设置

Apache 服务器配置文件详解-16# Apache服务器补充设置

此区域主要包括:服务器池管理,多语言错误消息,动态目录列表形式配置,语言设置,用户家庭目录,请求和配置上的实时信息,虚拟主机,Apache Http Server手册,分布式创作和版本控制,多种类默认设置,mod_proxy_html,使其支持HTML4/XHTML1等等补充配置的补充

17# Apache服务器安全连接设置

Apache 服务器配置文件详解-17# Apache服务器安全连接设置

此区域主要是关于服务器安全连接设置,用于使用https连接服务器等设置的地方

-参考资料:http://blief.blog.51cto.com/6170059/1672955

Apache 配置虚拟主机(多站点)

Apache配置虚拟主机的三种方式:基于IP, 基于主机名和基于端口。 下面我们分别来介绍如何通过这三种配置apache虚拟主机的方式来配置多站点虚机主机。

一、基于IP

1#假设服务器有个IP地址为192.168.1.10,使用ifconfig在同一个网络接口eth0上绑定3个IP:

# ifconfig eth0:1 192.168.1.11
# ifconfig eth0:2 192.168.1.12
# ifconfig eth0:3 192.168.1.13

2# 修改hosts文件,添加三个域名与之一一对应:

192.168.1.11   www.test1.com
192.168.1.12   www.test2.com
192.168.1.13   www.test3.com

3# 建立虚拟主机存放网页的根目录,如在/www目录下建立test1、test2、test3文件夹,其中分别存放1.html、2.html、3.html

/www/test1/1.html
/www/test2/2.html
/www/test3/3.html

4#在httpd.conf中将附加配置文件httpd-vhosts.conf包含进来,接着在httpd-vhosts.conf中写入如下配置:

<VirtualHost 192.168.1.11:80>
ServerName www.test1.com
DocumentRoot /www/test1/
<Directory "/www/test1">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow From All
</Directory>
</VirtualHost>




<VirtualHost 192.168.1.12:80>
ServerName www.test1.com
DocumentRoot /www/test2/
<Directory "/www/test2">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow From All
</Directory>
</VirtualHost>

<VirtualHost 192.168.1.13:80>
ServerName www.test1.com
DocumentRoot /www/test3/
<Directory "/www/test3">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow From All
</Directory>
</VirtualHost>

 5# 测试下每个虚拟主机,分别访问www.test1.com、www.test2.com、www.test3.com

二、基于主机名

1# 设置域名映射同一个IP,修改hosts:

192.168.1.10  www.test1.com
192.168.1.10  www.test2.com
192.168.1.10  www.test3.com

2# 跟上面一样,建立虚拟主机存放网页的根目录

/www/test1/1.html
/www/test2/2.html
/www/test3/3.html

3# 在httpd.conf中将附加配置文件httpd-vhosts.conf包含进来,接着在httpd-vhosts.conf中写入如下配置:

为了使用基于域名的虚拟主机,必须指定服务器IP地址(和可能的端口)来使主机接受请求。可以用NameVirtualHost指令来进行配置。 如果服务器上所有的IP地址都会用到, 你可以用*作为NameVirtualHost的参数。在NameVirtualHost指令中指明IP地址并不会使服务器自动侦听那个IP地址。 这里设定的IP地址必须对应服务器上的一个网络接口。

下一步就是为你建立的每个虚拟主机设定<VirtualHost>配置块,<VirtualHost>的参数与NameVirtualHost指令的参数是一样的。每个<VirtualHost>定义块中,至少都会有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容存在于文件系统的什么地方。

如果在现有的web服务器上增加虚拟主机,必须也为现存的主机建造一个<VirtualHost>定义块。其中ServerName和DocumentRoot所包含的内容应该与全局的保持一致,且要放在配置文件的最前面,扮演默认主机的角色。

NameVirtualHost *:80
<VirtualHost *:80>
ServerName *
DocumentRoot /www/
</VirtualHost>

<VirtualHost *:80>
ServerName www.test1.com
DocumentRoot /www/test1/
<Directory "/www/test1">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName www.test2.com
DocumentRoot /www/test2/
<Directory "/www/test2">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName www.test3.com
DocumentRoot /www/test3/
<Directory "/www/test3">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

4# 我们来测试下每个虚拟主机,分别访问www.test1.com、www.test2.com、www.test3.com

三、基于端口

1# 修改配置文件

将原来的

Listen 80

改为

Listen 80
Listen 8080

2# 更改虚拟主机设置:

<VirtualHost 192.168.1.10:80>
DocumentRoot /var/www/test1/
ServerName www.test1.com
</VirtualHost>

<VirtualHost 192.168.1.10:8080>
DocumentRoot /var/www/test2
ServerName www.test2.com
</VirtualHost>

参考资料:http://www.cnblogs.com/hi-bazinga/archive/2012/04/23/2466605.html

Apache 配置php

在LAMP环境里,我们需要安装并配置php,特别是当前流行开源的CMS系统,都是基于php语言开发。下面我们介绍如何在linux系统下来安装并配置PHP环境。

1# 下载php源码包

执行下面的命令:

wget http://museum.php.net/php5/php-5.4.10.tar.gz

2# 解压php-5.4.10.tar.gz源码包

 tar -zxvf php-5.4.10.tar.gz

3# 建立安装目标文件夹(也就是说等下安装的php要安装到这个文件夹里面)

mkdir /usr/local/php

4# 配置
回到原来解压后的文件夹

 ./configure --prefix=/usr/local/php  --with-apxs2=/usr/local/apache/bin/apxs

注意这里有一个-with-apxs2=/usr/local/apache/bin/apxs选项,其中apxs是在安装Apache时产生的,apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。我的理解是通过这个工具把PHP模块动态加载到Apache中

出现错误:configure: error: xml2-config not found. Please check your libxml2 installation.

运行yum install libxml2,然后再运行yum install libxml2-devel安装完毕后,重新运行上面的./configure命令。

5#编译并安装

make
make   test
make install

6# 配置文件

cp /usr/local/src/php-5.3.16/php.ini-development  /usr/local/php/lib/php.ini

把原来位于源代码里面的php.ini-development拷贝到/usr/local/php/lib/php.ini下,并且重命名为php.ini

7# 重启apache
8# 测试
在apache的htdocs下建立一个php文件test.php,里面的内容如下:

<?php
 phpinfo();
 ?>

然后在浏览器里输入http://127.0.0.1/test.php

如果出现php的相关配置,成功,如果什么都没有输入,说明失败,重新以上步骤或者查找原因

如果决定在安装后改变配置选项,只需重复最后的三步configure, make, 以及 make install,然后需要重新启动 Apache 使新模块生效。Apache不需要重新编译。

测试结果如下图:

apache php

Apache 和tomcat 有什么不同

经常在用apachetomcat等这些服务器,可是总感觉还是不清楚他们之间有什么关系,在用tomcat的时候总出现apache,总感到迷惑,到底谁是主谁是次,因此特意在网上查询了一些这方面的资料,总结了一下:

解析一:
apache支持静态页,tomcat支持动态的,比如servlet等,一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由tomcat来处理的。

apche可以支持phpcgiperl,但是要使用java的话,你需要tomcatapache后台支撑,将java请求由apache转发给tomcat处理。

apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。

这两个有以下几点可以比较的:
1、两者都是apache组织开发的
2、两者都有HTTP服务的功能
3、两者都是免费的

不同点:
Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等)
TomcatApache组织在符合J2EE的JSP、Servlet标准下开发的一个JSP服务器

Runtime r=Runtime.getRuntime();
 Process p=null;
try
{
p=r.exec("notepad");
}

catch(Exception ex)
{
System.out.println("fffff");
}

解析二:

APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等动态网页的就不行

如果要在APACHE环境下运行jsp 的话就需要一个解释器来执行jsp网页 而这个jsp解释器就是TOMCAT, 为什么还要JDK呢?因为jsp需要连接数据库的话 就要jdk来提供连接数据库的驱程,所以要运行jsp的web服务器平台就需要APACHE+TOMCAT+JDK

整合的好处是:
如果客户端请求的是静态页面,则只需要Apache服务器响应请求
如果客户端请求动态页面,则是Tomcat服务器响应请求
因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销

C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。

解析三:
apache:侧重于http server
tomcat:侧重于servlet引擎,如果以standalone方式运行,功能上与apache等效 , 支持JSP,但对静态网页不太理想;
apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。
换句话说,apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),而这个桶也可以不放在卡车上。

更多阅读:apache 配置SSL实现HTTPS访问

本文永久链接:http://www.osetc.com/archives/20369.html

 

Linux 下Apache 配置SSL实现HTTPS访问

本文主要讲述如何在linux系统下通过配置ssl模块实现网站的https访问的方法。

Web服务器在默认情况下使用HTTP,这是一个纯文本的协议。正如其名称所暗示的,纯文本协议不会对传输中的数据进行任何形式的加密。而基于HTTP的Web服务器是非常容易配置,它在安全方面有重大缺陷。任何”中间人”,通过精心防止的数据包嗅探器,是能够看到任何经过的数据包内容。更进一步,恶意用户甚至可以在传输路径设置一个假冒的WEB服务器冒名顶替实际的目标Web服务器。在这种情况下,最终用户可能实际上与假冒者服务器,而不是真正的目的服务器进行通信。这样,恶意用户可以通过精心设计的表单欺骗终端用户获取到敏感信息,如用户名密码。

为了处理这些类型的漏洞,大多数供应商往往在他们的web服务器应用HTTPS协议。对于只读类型的网站,用户只能读取内容,并没有实际提交任何信息,HTTP仍然是一个可行的选择。但是,对于保存敏感信息的网站,比如:用户需要登录来获得网站的服务,那么HTTPS是必须的。 HTTPS能够为一个网站提供以下能力。

  • 确保所有经过服务器传输的数据包都是经过加密的。
  • 建立了一个官方数字证书证书,使得假冒服务器无法冒充真正的服务器。

需要建立支持HTTPS的WEB服务器所要做的第一件事就是获得数字证书。数字证书可以在以下任一方法来获得。

  1. 自签名证书被推荐用于测试目的和个人项目。自签名证书,也可以用于服务提供商,不过一般适用于用户互相信任的情形。另外,自签名证书不用花钱购买。
  2. 证书可以由社区为基础的认证供应商如StartSSL和CACERT办法。这些证书也不需要花钱,但建议为个人项目。
  3. 对于全球性商业网站,建议从值得信赖的知名证书颁发机构购买证书。这些证书需要花钱,但他们增加了网络服务提供商的信誉。

1# 准备

在这篇文档中,我们将使用自签名证书。假设CentOS已经安装了Apache Web服务器。我们需要使用OpenSSL生成自签名证书。如果尚未安装OpenSSL,它可以使用yum来安装。

# yum install mod_ssl openssl

安装完毕后,会自动生成 /etc/httpd/conf.d/ssl.conf 文件,下文配置会用到!

2# 生成一个自签名证书

下面的命令可以被用来产生一个自签名的证书。

首先,生成2048位的加密私钥

# openssl genrsa -out server.key 2048

然后,生成证书签名请求(CSR),这里需要填写许多信息,如国家,省市,公司等

# openssl req -new -key server.key -out server.csr

最后,生成类型为X509的自签名证书。有效期设置3650天,即有效期为10年

# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

生成密钥流程如下图,供参考

Linux 下Apache 配置SSL实现HTTPS访问1

创建证书后,将文件复制到对应的目录。

# cp server.crt /etc/pki/tls/certs/
 # cp server.key /etc/pki/tls/private/
 # cp server.csr /etc/pki/tls/private/

3#配置Apache Web服务器

首先,修改下面的配置文件。仅需配置红色部分 SSLCertificateFile 和 SSLCertificateKeyFile

# vim /etc/httpd/conf.d/ssl.conf

### overwrite the following parameters ###
 SSLCertificateFile /etc/pki/tls/certs/server.crt
 SSLCertificateKeyFile /etc/pki/tls/private/server.key

### The following parameter does not need to be modified in case of a self-signed certificate. ###
 ### If you are using a real certificate, you may receive a certificate bundle. The bundle is added using the following parameters ###
 SSLCertificateChainFile /etc/pki/tls/certs/example.com.ca-bundle

然后,重新启动httpd服务使更改生效

# service httpd restart           // 或者  /etc/init.d/httpd restart

Web服务器现在可以使用HTTPS

4# 调整虚拟主机

Apache Web服务器可以配置为多个Web站点。这些站点在httpd的配置文件中以虚拟主机的形式定义。例如,让我们假设我们的Apache Web服务器托管站点为proxy.mimvp.com,网站所有的文件都保存在/var/www/html/virtual-web目录。

对于虚拟主机,典型的HTTP配置是这样的。

# vim /etc/httpd/conf/httpd.conf

NameVirtualHost *:80

<VirtualHost *:80>
 ServerAdmin email@example.com
 DocumentRoot /var/www/html/virtual-web
 ServerName proxy.mimvp.com
 </VirtualHost>

我们可以参考上面的配置创建HTTPS虚拟主机。

# vim /etc/httpd/conf/httpd.conf

NameVirtualHost *:443

<VirtualHost *:443>
 SSLEngine on
 SSLCertificateFile /etc/pki/tls/certs/server.crt
 SSLCertificateKeyFile /etc/pki/tls/private/server.key
 <Directory /var/www/html/virtual-web>
 AllowOverride All
 </Directory>
 ServerAdmin email@example.com
 DocumentRoot /var/www/html/virtual-web
 ServerName proxy.mimvp.com
 </VirtualHost>

需要按照上面的配置,定义每个虚拟主机。添加虚拟主机后,重新启动Web服务。

# service httpd restart

现在的虚拟主机就可以使用HTTPS

实例见米扑代理: https://proxy.mimvp.com

5# 强制Apache Web服务器始终使用https

如果由于某种原因,你需要站点的Web服务器都只使用HTTPS,此时就需要将所有HTTP请求(端口80)重定向到HTTPS(端口443)。 Apache Web服务器可以容易地做到这一点。

a) 强制主站所有Web使用(全局站点)

如果要强制主站使用HTTPS,我们可以这样修改httpd配置文件:

# vim /etc/httpd/conf/httpd.conf

ServerName www.example.com:80
 Redirect permanent / https://www.example.com

重启Apache服务器,使配置生效:

# service httpd restart

b) 强制虚拟主机(单个站点)

如果要强制单个站点在虚拟主机上使用HTTPS,对于HTTP可以按照下面进行配置:

# vim /etc/httpd/conf/httpd.conf

<VirtualHost *:80>
 ServerName proxy.mimvp.com
 Redirect permanent / https://proxy.mimvp.com/
 </VirtualHost>

重启Apache服务器,使配置生效:

# service httpd restart

单个站点全部使用HTTPS,则 http://proxy.mimvp.com 会强制重定向跳转到 https://proxy.mimvp.com

一般情况下,由于浏览器会自动拦截https未被认证的网址,因此建议同时保留 http://proxy.mimvp.com 和 https://proxy.mimvp.com ,或者购买权威的认证服务,让用户浏览器信任https浏览访问。

综上所述,当存在如用户登录,付款交易等交互时推荐HTTPS方式,可以提高服务器的安全性。

证书可以通过各种方式获得,如:自签名、社区提供的甚至商业机构够哦买的。管理员应当谨慎选择将要使用的证书的类型。

参考:http://blog.csdn.net/ithomer/article/details/50433363

本文永久链接:

linux FTP 服务器安装配置及命令使用教程(附:视频讲解)

本文将会讲述如何在linux系统下安装并配置最常用的FTP 服务器(VSFTPD),并通过实例来介绍如何利用FTP命令来上次文件和从ftp服务器上下载文件。

FTP 是什么

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。  -摘自 百度百科

linux FTP 服务器安装(VSFTP 软件包安装)

在linux系统下我们主要使用ftp软件是vsftp,它的进程名为vsftpd,下面我们来介绍如何来安装vsftp 软件包。

1# 检查vsftp软件包是否安装

执行下面的命令:

# rpm -qa |grep vsftp

2# 如果vsftp软件没有安装,执行下面的命令安装

# yum install vsftpd

linux FTP 服务启用

1# 启用vsftpd ftp 服务

执行下面命令:

# chkconfig vsftpd on

linux FTP 服务器启动/停止/重启

1# 启动vsftpd ftp 服务器

执行下面的命令:

# service vsftpd start

对于centos7 或者ubuntu 16.04 系统,执行命令:

# systemctl start vsftpd.service

2# 停止vsftpd ftp 服务器

执行下面的命令:

# service vsftpd stop

对于centos7 或者ubuntu 16.04 系统,执行命令:

# systemctl stop vsftpd.service

3# 重启vsftpd ftp 服务器

# service vsftpd restart

对于centos7 或者ubuntu 16.04 系统,执行命令:

# systemctl restart vsftpd.service

Linux FTP 端口开启(ftp端口号为21)

在linux下的ftp 服务默认使用的端口号为21,我们需要配置防火墙策略,允许对服务器21号端口的访问。

1# 使用vim 编辑器打开/etc/sysconfig/iptables配置文件

执行命令:

# vim /etc/sysconfig/iptables

2# 添加下面的防火墙策略到配置文件里

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

3# 保存并退出配置文件。重启防火墙服务

执行下面命令:

# service iptables restart

测试 FTP 服务器

执行下面命令:

# ftp localhost
# ftp ftp服务器ip地址

linux FTP 服务器配置

Vsftp ftp 软件默认的配置文件为/etc/vsftpd/vsftpd.conf, 我们需要根据实际情况来对配置文件做更改, 下面将会对一些典型的配置案例做介绍:

1# ftp 匿名用户配置

如果想让匿名用户浏览ftp服务器上的文件,但不能上传文件以及创建目录,那么我们可以对配置做下面的更改:

ftpd_banner=Welcom to my FTP Server!!!    //登录时显示的欢迎信息
 dirmessage_enable=YES            //允许为目录配置显示信息,显示每个目录下面message_file文件的内容
 setproctitle_enable=YES            //显示会话状态信息
anonymous_enable=YES            //接受匿名用户
 no_anon_password=YES            //匿名用户登录时不询问口令
 anon_root=目录路径            //匿名用户登录后所在的位置,可以根据自己的实际需求来修改
 write_enable=YES            //可以上传(全局控制)
 file_open_mode=0666            //上传文件的权限,配合umask使用
 anon_upload_enable=NO        //匿名用户可以上传
 anon_mkdir_write_enable=YES        //匿名用户可以建立目录
 anon_other_write_enable=YES        //匿名用户可以重名名、删除等权限
 anon_world_readable_only=YES    //如果设为YES,匿名用户登入者会被允许下载可阅读的文档
 chown_uploads=YES            //所有匿名上传的文件的所属用户将会被更改为chown_username
 chown_username=user            //匿名上传文件所属用户名

2# 允许用户上传文件并在服务器上创建目录的配置

通过vim 编辑vsftpd 配置文件,更改下面的配置:

anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES

保存并退出配置文件,并重启vsftpd 服务器

3# FTP网络连接参数

如果需要对ftp服务器网络连接参数做更改,可以优化下面的网络参数配置:

max_clients=1000            //可接受的最大连接数,可以根据自己的实际情况来修改
 max_per_ip=5                //每个IP地址的最大连接数,可以根据自己的实际情况来修改
 anon_max_rate=51200            //匿名用户的带宽(b/s)
 local_max_rate=5120000        //本地用户的带宽(b/s)
 idle_session_timeout=600        //空闲连接超时时间
 data_connection_timeout=120        //数据传输超时时间
 ACCEPT_TIMEOUT=60            //PAVS请求超时时间
 connect_timeout=60            //PORT模式连接超时时间
 connect_from_port_20=YES        //使用标准的20端口来连接FTP
 listen_address=地址或网段        //绑定到某个IP或网段,其他IP不能访问该FTP
 listen_port=2121            //绑定到某个端口
 ftp_data_port=2020            //数据传输端口
 pasv_max_port=0            //PASV连接模式时可以使用port范围的上界,0表示任意。
 pasv_min_port=0            //PASV连接模式时可以使用port范围的下界,0表示任意。

linux ftp 服务器配置后可能遇到的问题

Ftp 服务器中的默认文件存放路径是在/var/ftp/pub 目录下,服务器配置完毕后,可能会遇到一些小问题,比如:无法登陆,不能创建目录,不能写文件等,造成这种问题的原因主要是权限问题。我们需要对权限做一些更改,如下:

1# 更改pub目录的权限为755, 执行下面命令:

# chmod 755 -R /var/ftp/pub

需要注意的是,pub目录的权限不能设置为777, 否则会报错。

2# 如果匿名用户需要上传文件,那么需要给pub目录的其它组增加写的权限,执行下面命令:

#chmod o+w /var/ftp/pub/

Linux 下通过shell 脚本自动化实现FTP服务器的安装及配置

在实际的工作中,可能需要实现ftp服务器的自动化安装及配置,那么我们就可以使用linux bash shell 脚本来实现其自动化安装配置。下面的脚本仅作为参考使用,具体的设置可以执行更改。

#!/bin/bash
# 设置ftp环境的脚本。ftp的根目录为只读,其下的writable目录为可写
# 可自定义以下四项
# ftp用户名
userName="test"
# ftp密码
password="test"
# ftp根目录,末尾不要加/
ftp_dir="$HOME/ftp"
# 可写目录的目录名
writable="writable"

# 如果没有加sudo,提示错误并退出
if [ "x$(id -u)" != x0 ]; then
echo "Error: please run this script with 'sudo'."
exit 1
fi

# 核心工具,vsftpd。 -y是对所有提示都回答yes
sudo apt-get -y install vsftpd

# db-util是用来生成用户列表数据库的工具
sudo apt-get -y install db-util


# 以下步骤参考https://help.ubuntu.com/community/vsftpd#The_workshop
# 创建用户名和密码的数据库,以单数行为用户名,双数行为密码记录
cd /tmp
printf "$userName\n$password\n" > vusers.txt
db_load -T -t hash -f vusers.txt vsftpd-virtual-user.db
sudo cp -f vsftpd-virtual-user.db /etc/
cd /etc
chmod 600 vsftpd-virtual-user.db
if [ ! -e vsftpd.conf.old ]; then
sudo cp -f vsftpd.conf vsftpd.conf.old
fi


# 创建PAM file。bash的here-document,直接输出这些内容覆盖原文件
(sudo cat <<EOF
auth       required     pam_userdb.so db=/etc/vsftpd-virtual-user
account    required     pam_userdb.so db=/etc/vsftpd-virtual-user
session    required     pam_loginuid.so
EOF
) > pam.d/vsftpd.virtual


# 获取当前的用户名,不能用whoami或$LOGNAME,否则得到的是root
owner=`who am i| awk '{print $1}'`

# 创建vsftpd的配置文件。
(sudo cat <<EOF
listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
local_umask=000
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
hide_ids=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd.virtual
guest_enable=YES
user_sub_token=$USER
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
EOF
) > vsftpd.conf
sudo echo "local_root=$ftp_dir" >> vsftpd.conf

# 虚拟用户需要映射为本地用户,设为自己,避免权限问题,但同时也令自己对ftp根目录不可写
sudo echo "guest_username=$owner" >> vsftpd.conf


# 设置了每个虚拟用户只可以浏览其根及子目录(否则可访问磁盘根目录),
# 这样会被要求根目录不可写,所以创建一个writable的子目录
mkdir "$ftp_dir"
mkdir "$ftp_dir/$writable"
sudo chmod a-w "$ftp_dir"
sudo chown -R $owner:$owner $ftp_dir
sudo /etc/init.d/vsftpd restart
#该脚本出自:blog.csdn.net/hursing

linux ftp 服务器安装及配置视频讲解教程

如果对上面的某些步骤还有不明白的地方,那么可以参考下面的vsftp 视频安装及配置教程。

linux FTP 命令

ls: 显示远端文件列表(ils 显示本地文件列表)。# l 的意思就是local ils比较特殊
cd: 切换远端目录(lcd 切换本地目录)。
get:下载远端文件。
mget:下载远端文件(可以用通配符也就是 *)。
pget:使用多个线程来下载远端文件, 预设为五个。
mirror:下载/上传(mirror -R)/同步 整个目录。
put:上传文件。
mput:上传多个文件(支持通配符)。
mv:移动远端文件(远端文件改名)。
rm:删除远端文件。 参数-r,递归删除文件夹
mrm:删除多个远端文件(支持通配符)。
mkdir:建立远端目录。
rmdir:删除远端目录。
pwd:显示目前远端所在目录(lpwd 显示本地目录)。
du:计算远端目录的大小
set net:limit-rate 10000,10000 限制上传下载各为10KB/s
set ftp:charset gbk 设置远程ftp site用gbk编码
! 执行本地 shell的命令(由于lftp 没有 lls, 故可用 !ls 来替代)
lcd:切换本地目录
lpwd:显示本地目录
alias:定义别名
exit:退出ftp

FTP 命令的实例

1# 登陆linux ftp服务器

命令格式:ftp [hostname| ip-address]

执行下面的命令:

ftp 192.168.1.105

然后输入相应的ftp用户名和密码。

2# 从ftp服务器上下载文件

下载文件通常用get和mget这两条命令。

a) 使用get 命令

格式:get [remote-file] [local-file]

将文件从远端主机中传送至本地主机中.例如要下载ftp服务器上的fio.txt 文件到本地目录上

执行下面的命令:

ftp> get fio.txt  fio.txt

b) 使用mget命令

格式:mget [remote-files]

从远端主机接收一批文件至本地主机.例如要获取服务器上/var/pub/目录下的所有文件

执行下面的命令:

ftp> cd /var/pub/
ftp> mget *.*

3#往linux ftp服务器上传文件

a)使用 put命令

格式:put local-file [remote-file]

将本地一个文件传送至远端主机中.例如要把本地的fio.txt上传到到远程ftp服务器的/var/pub 目录里,执行下面的命令

ftp> put fio.txt  /var/pub

b)使用 mput命令

格式:mput local-files

将本地主机中一批文件传送至远端主机.

例如要把本地当前目录下所有txt文件上传到ftp服务器的/var/pub/ 下

ftp> cd /var/pub/
ftp> mput *.txt

4# 断开ftp连接

bye:中断与服务器的连接。

执行下面的命令:

ftp> bye

更多阅读:LFTP : 一个功能强大的命令行FTP程序 

本文永久地址:http://www.osetc.com/archives/20354.html

Windows 下的免费 SSH 客户端工具

如果你的操作系统是 Windows,而你想要连接 Linux 服务器相互传送文件,那么你需要一个简称 SSH 的 Secure Shell 软件。实际上,SSH 是一个网络协议,它允许你通过网络连接到 Linux 和 Unix 服务器。SSH 使用公钥加密来认证远程的计算机。你可以有多种途径使用 SSH,无论是自动连接,还是使用密码认证登录。

本篇文章介绍了几种可以连接 Linux 服务器 SSH 客户端。

让我们开始吧。

Putty

Putty 是最有名的 SSH 和 telnet 客户端,最初由 Simon Tatham 为 Windows 平台开发。Putty 是一款开源软件,有可用的源代码,和一群志愿者的开发和支持。

Putty 非常易于安装和使用,通常大部分的配置选项你都不需要修改。你只需要输入少量基本的参数,就可以开始很简单地建立连接会话。点此下载 Putty。

Bitvise SSH Client

Bitvise SSH 是一款支持 SSH 和 SFTP 的 Windows 客户端。由 Bitvise 开发和提供专业支持。这款 SSH 客户端性能强悍,易于安装、便于使用。Bitvise SSH 客户端拥有功能丰富的图形界面,通过一个有自动重连功能的内置代理进行动态端口转发。

Bitvise SSH 客户端对个人用户使用是免费的,同时对于在组织内部的个人商业使用也一样。你可以在这里下载 Bitvise SSH 客户端

MobaXterm

MobaXterm 是你的远程计算的终极工具箱。在一个 Windows 应用里,它为程序员、网管、IT 管理员及其它用户提供了精心裁剪的一揽子功能,让他们的远程操作变得简约时尚。

MobaXterm 提供了所有重要的远程网络工具 (如SSH、 X11、 RDP、 VNC、 FTP、 MOSH 等等),以及 Windows 桌面上的 Unix 命令(bash、 ls、 cat、sed、 grep、 awk、 rsync等等),而这些都是由一个开箱即用的单一的便携程序所提供。MobaXterm 对个人使用免费,你可以在这里下载 MobaXterm。

DameWare SSH

我认为 DameWare SSH 是最好的免费SSH客户端。(LCTT 译注:似乎 DameWare 已经取消了该软件的下载。)

这个免费工具是一个终端模拟器,可以让你从一个易用的控制台建立多个 telnet 和 SSH 连接。

  • 用一个带标签的控制台界面管理多个会话
  • 将常用的会话保存在 Windows 文件系统中
  • 使用多套保存的证书来轻松登录不同的设备
  • 使用 telnet、SSH1 和 SSH2 协议连接计算机和设备

SmarTTY

SmarTTY 是一款免费的多标签 SSH 客户端,支持使用 SCP 命令随时复制文件和目录。

大多数 SSH 服务器每个连接支持最多10个子会话.SmarTTY 在这方面做得很好:没有烦人的多个窗口,不需要重新登录,仅仅打开一个新的标签页就可以开始了!

Cygwin

Cygwin 是一款 GNU 和开源工具的大杂烩,提供的功能近似于一个 Windows 平台下的 Linux。

Cygwin 包括了一个称为模拟库的 Unix 系统:cygwin.dll,集成了大量的 GNU 和其它的免费软件,以大量的可选包方式组织而成。在这些安装包中,有高质量的编译器和其他软件开发工具、一个X11服务器、一套完整的X11开发套件、GNU emacs 编辑器、Tex 和 LaTeX、openSSH(客户端和服务器),除此之外还有很多,包括在微软 Windows 下需要编译和使用 PhysioToolkit 软件的每一样东西。

读完我们的文章后,不知你中意哪一款 SSH 客户端?你可以留下你的评论,描述你喜欢的系统和选择的原因。当然,如果有另外的 SSH 客户端没有被本文列举出来,你可以帮助我们补充。

via: linux.cn

最实用的 Linux 命令行使用技巧 (必看!)

我们可能每天都会要使用到很多的 Linux 命令行。 我们也会网络上知晓一些使用它们的小技巧,但是如果我们没有时常来进行练习,就有可能会忘掉怎么去使用它们。 所以我就决定把那些你可能会忘记的小提示和小技巧,或者对你而言可能是全新的东西都列表来。

将输出内容以表格的形式显示出来

有时,在你看到命令行执行的输出时,因为字符串过度拥挤(比如说 mount 命令的输出)导致输出内容难以识别。如果我们看到的内容是一张表格会如何呢?其实这是很容易做到的!

mount | column –t:

在此例中,由于内容中留了空格,所以输出的形式就美观了起来。 那如果想要的分隔符是别的什么符号,比如说冒号,又该怎么去做呢? (例如,在 cat/etc/passwd 的输出内容中使用)

这时候只需要使用 -s 参数指定分隔符就行了,像下面这样。

cat /etc/passwd | column -t -s:

重复执行一个命令,直到它运行成功

如果在 Google 上搜索这个功能,你会发现很多人都问到了如何重复执行命令,直到这个命令成功返回并且运行正常。 Google上的建议里就包括 ping 服务器,直到它变得空闲为止,还有就是检查是否有向特定的目录上传了具有特定扩展名的文件,还有就是检查特定的URL是否已经存在,诸如此类的办法。

其实你还可以使用 while true 的循环来实现来实现这个功能:

在上面这个示例中,>/dev/null 2>&1 会让程序的输出重定向到 /dev/ null。标准错误和标准输出都会被包含进去。

这是我认为最酷的Linux命令行技巧之一。

按内存资源的使用量对进程进行排序

ps aux | sort -rnk 4:

按 CPU 资源的使用量对进程进行排序

ps aux | sort -nk 3:

如果想要检查你的机器架构,那就执行 getconf LONG_BIT。

可以同时查看多个日志文件

毫无疑问,你可能已经会使用 tail  命令来查看日志文件了,但可能有时候你还想着能同时查看多个日志文件。 使用 multi-tail 命令就支持支持文本的高亮显示,内容过滤以及更多你可能需要的功能:

如果系统里还没有这个命令,运行 apt-get install multitail 命令就可以把它给装上。

回到你操作过的上一个目录去

只需敲入 cd – 就会返回到你操作过的上一个目录中去。

让非交互式 Shell 会话可进行交互

想要这样做,那就把设置从 ~/.bashrc 改成 ~/.bash_profile 吧。

定时的监视性命令输出

使用 watch 命令(watch df -h),你就可以查看到任何命令的任何输出。例如,你可以查看可用空间以及它的使用量增长情况。

通过利用 watch 命令来操作会变化的数据,你可以尽情想象自己能拿这个来做些什么哦。

在会话关掉以后继续运行程序

如果你在后台运行了什么程序,然后你关掉了的 shell 会话,那么这个后台运行的程序就会被你的 shell 杀掉。关闭 shell 以后怎么让程序继续运行下去呢?

这个可以用 nohup 命令做到 – 该指令表示不做挂断操作:

nohup wget site.com/file.zip

此命令是最容易被遗忘的 Linux 命令行技巧之一,因为我们许多人都会使用另外一个类命令的 screen 环境:

这样会在同一个目录下生成一个名称为 nohup.out 的文件,其中包含了正在运行的程序的输出内容:

命令很酷,对吧?

自动对任何命令回答 Yes 或者 No

如果你想自动化需要向用户说的 Yes 的过程,可以使用 yes 命令来实现:yes | apt-get update。

也许你想做的是自动地说“No”。这个可以使用 yes no | 命令来实现。

创建具有指定大小的文件

可以使用 dd 命令来创建出具有指定大小的文件:dd if=/dev/zero of=out.txt bs=1M count=10。

这样就会创建出一个 10 MB 的文件,填充零作为内容:

以根目录用户来运行最后一个命令

有时,你会忘记在需要 root 权限的命令之前敲入 sudo。这时候你没必要去重写命令; 只要输入 sudo 就行了!

对命令行会话进行记录

如果想要把自己在 shell 屏幕上敲的内容记录下来,可以使用 script 命令将所有敲写的内容保存到一个名为 typescriptscript 的文件中去。

等你敲入 exit 命令以后,所有命令就都会被写入该文件,以便你事后再回过头去查看。

用标签符号替换空格符

可以使用 tr 命令替换任何字符,这个用起来非常方便:cat geeks.txt | tr ‘:[space]:’ ‘\t’ > out.txt.

将文件内容转换为大写或者小写

可以这样实现:cat myfile | tr a-z A-Z> output.txt。

强大的 Xargs 命令

xargs 命令是最重要的 Linux 命令行技巧之一。你可以使用这个命令将命令的输出作为参数传递给另一个命令。例如,搜索 png 文件然后对其进行压缩或者其它操作:

find. -name *.png -type f -print | xargs tar -cvzf images.tar.gz

又或者你的文件中有一个 URL 的列表,而你想要做的是以不同的方式下载或者处理这些 URL,可以这样做:

cat urls.txt | xargs wget

xargs command

请你要记得,第一个命令的输出会在 xargs 命令结尾处传递。

那如果命令需要中间过程的输出,该怎么办呢?这个简单!

只需要使用 {} 并结合 -i 参数就行了。如下所示,替换在第一个命令的输出应该去的地方的参数:

ls /etc/*.conf | xargs -i cp {} /home/likegeeks/Desktop/out

这只是 Linux 命令行技巧其中的几个而已。你可以使用其他命令来做一些更 HAPPY 的事情,比如 awk 命令和 sed 命令!

如果你知道一些我在这里没有提到的任何其它的极客命令,欢迎评论。

 

Linux系统下find命令递归删除查找目录的方法

本文将会讲述如何使用linux系统下的find查找命令来查找目录或文件,并将查找到的所有文件和目录递归删除掉。

Linux find 命令递归删除非空目录

通常情况下我们会想到find命令里的删除操作是使用-delete选项,但是使用该选项只能删除空目录的文件,不能递归删除该目录里的其它文件。如下面的例子:

$ ls dir1
test1

$ find ./ -name "dir1" -type d -delete
find: cannot delete `./dir1': Directory not empty

可以使用下面的Linux find 命令删除非空目录,如:

$ find ./ -name “dir1” -type d -exec rm -rf {} +

或者

$ find ./ -name “dir1” -type d -exec rm -rf  \;

Linux find 命令结合xargs命令实现删除非空目录

删除当前目录下的所有空目录

$ find ./ -type d -empty -print0 |xargs -0 -i {} rm -rf  “{}”

删除当前目录下所有以“dir”开头的目录

$ find ./ -type d -name “dir*” -print0 |xargs -0 -I {} rm -rf “{}”