Apache、Nginx、php-fpm为PHP设置、添加$_SERVER服务器环境变量

在PHP开发中为了区分线上生产环境还是本地开发环境,

如果我们能通过判断$_SERVER['RUNTIME_ENVIROMENT']'DEV'还是'PRO'来区分该多好,

可惜的是$_SERVER数组里面根本没有RUNTIME_ENVIROMENT这个元素。

一、通过nginx的fastcgi_param来设置

在nginx配置文件中,可以在nginx总体的配置文件nginx.conf中,也可以在单独的网站配置环境中进行设置,如:www.regskynet.com.conf

在配置环境server段location中添加相应的配置信息:

    location ~ .php$ {
        limit_conn conn_zone 15;
        limit_req zone=req_zone burst=25 nodelay;
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        root           $root;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_param  RUNTIME_ENVIROMENT 'PRO';
    }

然后重启重启nginx

service nginx reload

二、通过php主配置文件php-fpm.conf来设置

这个设置必须放在主配置文件php-fpm.conf里,不能放到include指令设置的子配置文件里,否则会报错:「Array are not allowed in the global section」

我的php-fpm.conf位置在/etc/php-fpm.conf

直接在配置文件中添加:

env[RUNTIME_ENVIROMENT] = 'PRO'

添加后重启php-fpm

service php-fpm reload

通过上面2种方式添加$_SERVER变量值后,我们就可以直接在php文件中通过$_SERVER来获取相应的变量值了。

不过据说配置信息通过nginxfastcgi_param来设置的话,当nginx和php交互时,会带来大量的数据传输。

三、通过Apache设置环境变量

SetEnv 变量名 变量值

<VirtualHost *:80>
    ServerAdmin ...
    DocumentRoot ...
    ServerName www.regskynet.com
    ErrorLog ...
    CustomLog ...
    SetEnv RUNTIME_ENVIROMENT PRO
    <Directory "...">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Centos6.x下设置Apache自建https的证书

第一步 – 安装Mod SSL

为了建立自签名证书,我们首先要确保mod_ssl ,Apache模块,它提供了支持SSL加密,安装在我们的VPS。
我们可以安装mod_ssl与yum命令:

#  sudo yum install mod_ssl

#  sudo vim  /etc/httpd/conf/httpd.conf
LoadModule ssl_module /usr/lib64/httpd/modules/mod_ssl.so

第二步 – 创建新证书

现在Apache已准备好使用加密,我们可以继续生成新的SSL证书。
该证书将存储有关您网站的一些基本信息,并且将伴有允许服务器安全处理加密数据的密钥文件。

首先,我们需要创建一个新目录,我们将存储服务器密钥和证书:

#  sudo mkdir /etc/httpd/ssl

现在,我们必须把我们的文件的位置,我们可以创建一个SSL密钥和证书文件openssl :

#  sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt

适当填写提示。 最重要的线是要求一个Common Name 。
您需要输入要与服务器关联的域名。 如果您没有域名,可以输入公共IP地址。

第三步 – 设置证书

我们现在拥有完成的接口的所有必需的组件。 接下来要做的是设置虚拟主机以显示新证书。

使用root权限在文本编辑器中打开Apache的SSL配置文件:

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

内容如下:

Listen 443
<VirtualHost *:443>
        DocumentRoot "/www/test"
        ServerName www.test120.com
        #SSL引擎操作开关
        SSLEngine on
        #指定服务器证书位置
        SSLCertificateFile "/etc/httpd/ssl/apache.crt"
        #服务器私钥文件
        SSLCertificateKeyFile "/etc/httpd/ssl/apache.key"
</VirtualHost>
#   sudo  service httpd restart 

最后 ,访问浏览器

https://www.test120.com/

successful

windows 搭建 apache + php

1. 安装 apache

登录 apache 官网, 不懂英语的我看的一脸懵, 然后偷偷去百度了…
登录https://www.apachelounge.com/download/

未分类

我的电脑是 win10 64 位 所以我选择了这里

解压, 修改 conf 文件夹下的 httpd.conf 文件

打开 J:apacheApache24conf 目录下的 httpd.conf 文件并作以下修改:

ServerRoot(apache 目录)改为 J:apacheApache24

ServerName (服务器名称) 去掉 #,改为 127.0.0.1

DocumentRoot (修改网站根目录地址)自己设置,一般设置为 J:apacheApache24htdocs

运行 bin 目录下的 httpd.exe 就 ok 了 , 我固定到了开始菜单栏
如果需要安装服务 , 请看这里https://blog.csdn.net/hi_xww/article/details/78045518

2. 安装 php

http://www.cnblogs.com/flyingeagle/articles/6583201.html

3. php 扩展 mysql

这里搞了很长时间…
php.ini 搜索 extension_dir
添加 extension_dir = "D:php7ext"

未分类

开启 mysql 扩展, 去掉这两行的注释, 这个地方 我找了好久

未分类

查看 /ext 目录下 是否有 php_mysql.dll , 如果没有可以在这里下载

https://img.vseu.com/php_mysql.dll

Apache/Nginx中Host头攻击的一些差异

1. Host header

服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号。如果所请求的端口是对应的服务的标准端口,则端口号可被省略。
自超文件传输协议版本1.1(HTTP/1.1)开始便是必需字段。
以上是维基百科中对于Host头部的说明。可以看到Host头部并非是用于区别发送到哪台主机的字段。而是用于区分一台主机上不同的虚拟主机。(可以在Apache和Nginx中配置相应Host对应的虚拟主机。

利用PHP可以在 $_SERVER['HTTP_HOST'] 字段中获取到该字段的值

var_dump($_SERVER['HTTP_HOST']);

未分类

当没有配置虚拟主机或者匹配不到对应的Host主机时,webserver就会发送请求到默认的目录中去解析

从而Host头部就变成了一个可控的字段,当一些应用程序没有对$SERVER[‘HTTP_HOST’]字段进行处理,过分信任时,就会产生一些安全问题

未分类

2. Diff of win/linux

这里用的测试环境分别是

  • win10下的 phpstudy
  • ubuntu 18.04中默认安装的nginx和apache2

在1.php中会输出$_SERVER[‘HTTP_HOST’]变量

2.1 Windows

Apache

可以任意修改apache中的值,服务器都会默认接受

未分类

甚至可以插入两个Host头部,在win下会用,将两个头部相连

Host: localhost
Host:123468

未分类

Nginx

nginx中对于任意脏字符都是允许修改的

未分类

但是在插入两个Host头部的时候只会获取到第二个Host值

Host: localhost
Host: 'select user();

未分类

2.2 Linux

但是在linux中又会有些不同

Apache

linux下的apache就有着较为严格的限制,只允许修改对应的ip数字

未分类

插入一些脏字符就会返回400的错误

Host: 192.168.85.145'

未分类

两个头部也是一样的情况,即使头部是合法的

Host: 192.168.85.145
Host: 192.168.85.145

未分类

Nginx

linux下nginx中对于Host的处理类似于win中的就不过多介绍

未分类

从而网上有一些防御手段就变成了设置虚拟主机(virtual host),从而可以确保Host字段不会被更改,因为一旦修改了Host字段就不会解析到对应的目录当中。

3. Virtual Host

但即使配置了虚拟主机之后,所接受的Host字段就是可以信任的么?

在Apache、Nginx中会呈现不同的状态

测试环境为

  • ubuntu 18.04
  • Apache/2.4.29 (Ubuntu)
  • nginx/1.14.0 (Ubuntu)
  • PHP 7.2.10-0ubuntu0.18.04.1

至于虚拟主机配置的部分就不过多介绍,在网上可以找到很多配置的文章

至于域名,可以买一个域名修改解析,或者直接修改host文件

然后在/var/www目录下新建了三个文件夹

  • html 默认主目录
  • apache Apache的虚拟主机目录
  • nginx Nginx的虚拟主机目录

3.1 Apache

可以看到,在配置了虚拟主机之后,访问对应的域名就会访问到对应的目录中

Host: localhost.ba123.top

未分类

当遇到一个不认识的域名的时候,就会解析到默认目录下(当然,假如默认目录下没有1.php这个文件就会返回一个404

Host: localhost.ba123.to

未分类

那想攻击Apache中的虚拟主机时Host字段就不能添加别的脏字符了么?目前找到的可以添加的就只有通过冒号:分割开的端口号

只要是一个合法的端口就可以发起正常的请求

Host: localhost.ba123.top:23333

未分类

但是当想插入一些字符或者端口号过大的时候,都会拒绝请求,返回一个400,更不会允许两个Host头部的请求

Host: localhost.ba123.top:23333'select

未分类

总体来说,Apache对于Host字段的限制还是比较严格的,在开启了虚拟主机之后,几乎比较难以插入脏字符。

3.2 Nginx

在nginx中似乎有着更多的攻击手法

对于未知的主机名,处理方式还是与apache中一致,会解析到默认目录中

Host: localhost.ba123.to'select

未分类

但是这里假如利用冒号:的形式分割之后,冒号后面的port部分会直接被nginx给抛弃,从而可以插入任意的字符

Host: localhost.ba123.top'select sleep(5);

未分类

甚至在nginx中可以传入两个Host头部,Nginx将以第一个为准传送到对应的虚拟主机处理,而PHP-FPM将以第二个为准给$_SERVER[‘HTTP_HOST’]赋值。

Host: localhost.ba123.top
Host:'select sleep(5);

未分类

但是在apache中传入两个Host头部的时候,就会直接返回400

由此可见,在ngin中对于Host的并没有做过多的限制,从而可以比较容易的进行Host头部攻击。

windows上的虚拟主机原谅我确实没怎么遇到过,就没测试了,感兴趣的可以自己测试下。

4. Summary

可以看到Host头部,在不同的情况下会呈现出不同的状态,因此在编写程序的时候一定要将Host这个值设置为不可信任的,对其进行一些正则或者转义的一些过滤。否则极易引发安全问题。

在windows下对于这种头部的限制比较松,apache和nginx都能比较轻松的绕过去。

而在两个服务器相比,Apache对于数据的解析更加严谨,尤其是在linux的环境中,极大的限制了非法的请求。

Nginx则甚至会出现Nginx与PHP-FPM解析不一致的情况,有时这种解析不一样甚至会带来更多的危害。

5. Reference

https://www.leavesongs.com/PENETRATION/some-tricks-of-attacking-lnmp-web-application.html

Error: Apache shutdown unexpectedly

有些时候,开启Apache会报这个错误,而且日志文件里面什么信息都没有。

未分类

通常是因为端口被占用。

如果下载下来之后没有更改任何东西的话,Apache默认Port是80,ssl的端口是443。

那么我们就要先看一下是什么进程占用了80端口和443端口。

win+r

cmd运行命令行

输入netstat -ano 来查看端口连接状态。

我们可以很明显地看到,80和443都被占用了

未分类

那么怎么办?

两个方法:

1.关掉这两个进程

2.改Apache的端口

方法1

先看好PID,这里80端口的PID是10120;443端口的PID是7860

直接在cmd里面输入

taskkill /PID 10120

taskkill /PID 7860

方法2

在control面板,点击Config

先选httpd.conf

ctrl+r把所有的80全改成一个自己喜欢的数字,比如88或者888或者8888。(别改成已被占用的端口号)

再选httpd-ssl.conf

一样的,把所有的443改成另一个数字。

再开启Apache就可以了

如果还是同样的错误

xamppapachebin 的目录下 运行cmd

cmd里面输入 httpd.exe

来看具体的错误。按照报错信息来修改

未分类

maven私有库神坑之:“Downloading: http://repo.maven.apache.org/maven2/”

现象:

即使你配置了私有库,并且在maven setting.xml中配置了mirror,但是,经常会遇到执行mvn命令的时候,会提醒:
Downloading: http://repo.maven.apache.org/maven2/

原因:

所有自定义pom.xml都是继承自super pom:
http://maven.apache.org/ref/3.0.4/maven-model-builder/super-pom.html

super pom中有如下内容:

 <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

因此,当maven项目需要下载一些metadata、pom、jar的时候,会优先去中央仓库下载,导致内网用户各种报错!

解决办法:

在项目pom.xml中添加如下配置:

<repositories>
    <repository>
        <id>central</id>
        <url>http://host:port/content/groups/public</url>
    </repository>
</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://host:port/content/groups/public</url>
    </pluginRepository>
</pluginRepositories>

centos中apache使用问题

以下总结在配置及启动apache2时出现报错的处理方法

一、启动apache遇到错误:httpd: Could not reliably determine the server’s fully qualified domain name

[root@server httpd-2.2.4]# /usr/local/apache/bin/apachectl start
 
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

1)进入apache的安装目录:(视个人安装情况而不同) [root@server ~]# cd /usr/local/apache/conf
 
2)编辑httpd.conf文件,搜索"#ServerName",添加ServerName localhost:80

[root@server conf]# ls
extra  httpd.conf  magic  mime.types  original
[root@server conf]# vi httpd.conf
#ServerName www.example.com:80
ServerName localhost:80

3)再重新启动apache 即可。

[root@server ~]# /usr/local/apache/bin/apachectl restart

二、重启报错apache2 address already in use:make_sock:could not bind to address [::]:80

此错误为端口被占用,只有进入root用户,才可以查看所有端口被占用的情况。

$su

#netstat -lnp | grep 80

tcp 0      x x.x.x.x:8084        ...   listen   1167/mono

tcp 0      x x.x.x.x:80          ...   listen   1194/inetd

udp 0      x x.x.x.x:2080        ...   listen   14427/drcomauthsvr

查看知道是Inetd占用了80端口

#kill 1194

#exit //退出root用户

$sudo apapche2ctl -k start

启动成功!

三、在安装完apache2之后的默认index.html网页里面输入文字显示乱码,修改AddDefaultCharset 也没有用,即使在网页头部添加meta,指定charset=GB2312|GBK也没有用

注意,亲,此处因为默认文档的字号为h1,大号字体,中文无法显示,此处修改为小号字体即可,本人修改为h5,乱码消失,正常显示中文!

四、在网页运行html文件调用cgi程序时,提示找不到cgi程序以及找到程序后得不到想要的结果。

首先查看apache2配置文件,在/etc/apache2/site-enables查看系统默认的cgi-bin目录,可以在这个里面根据需要来修改默认cgi-bin目录。apt安装完后默认的cgi-bin目录是在/usr/lib/cgi-bin/

具体是修改ScriptAlias参数,如果你不知道你的类似site-enables的目录在哪,毕竟各个版本有些不一样,可以直接搜索ScriptAlisa这个参数,因为不管哪个版本,这个参数基本没改动。

如何在 Ubuntu Linux 中使用 RAR 文件

RAR 是一种非常好的归档文件格式。但相比之下 7-zip 能提供了更好的压缩率,并且默认情况下还可以在多个平台上轻松支持 Zip 文件。不过 RAR 仍然是最流行的归档格式之一。然而 Ubuntu 自带的归档管理器却不支持提取 RAR 文件,也不允许创建 RAR 文件。

办法总比问题多。只要安装 unrar 这款由 RARLAB 提供的免费软件,就能在 Ubuntu 上支持提取 RAR 文件了。你也可以安装 rar 试用版来创建和管理 RAR 文件。

提取 RAR 文件

在未安装 unrar 的情况下,提取 RAR 文件会报出“未能提取”错误,就像下面这样(以 Ubuntu 18.04为例):

未分类

Error in RAR extraction in Ubuntu

如果要解决这个错误并提取 RAR 文件,请按照以下步骤安装 unrar:

打开终端并输入:

sudo apt-get install unrar

安装 unrar 后,直接输入 unrar 就可以看到它的用法以及如何使用这个工具处理 RAR 文件。

最常用到的功能是提取 RAR 文件。因此,可以通过右键单击 RAR 文件并执行提取,也可以借助此以下命令通过终端执行操作:

unrar x FileName.rar

结果类似以下这样:

未分类

Using unrar in Ubuntu

如果压缩文件没放在家目录中,就必须使用 cd 命令移动到目标目录下。例如 RAR 文件如果在 Music目录下,只需要使用 cd Music 就可以移动到相应的目录,然后提取 RAR 文件。

创建和管理 RAR 文件

未分类

Using rar archive in Ubuntu Linux

unrar 不允许创建 RAR 文件。因此还需要安装 rar 命令行工具才能创建 RAR 文件。

要创建 RAR 文件,首先需要通过以下命令安装 rar:

sudo apt-get install rar

按照下面的命令语法创建 RAR 文件:

rar a ArchiveName File_1 File_2 Dir_1 Dir_2

按照这个格式输入命令时,它会将目录中的每个文件添加到 RAR 文件中。如果需要某一个特定的文件,就要指定文件确切的名称或路径。

默认情况下,RAR 文件会放置在家目录中。

以类似的方式,可以更新或管理 RAR 文件。同样是使用以下的命令语法:

rar u ArchiveName Filename

在终端输入 rar 就可以列出 RAR 工具的相关命令。

总结

现在你已经知道如何在 Ubuntu 上管理 RAR 文件了,你会更喜欢使用 7-zip、Zip 或 Tar.xz 吗?

在 Linux 下截屏并编辑的最佳工具

有几种获取屏幕截图并对其进行添加文字、箭头等编辑的方法,这里提及的的屏幕截图工具在 Ubuntu 和其它主流 Linux 发行版中都能够使用。

当我的主力操作系统从 Windows 转换到 Ubuntu 的时候,首要考虑的就是屏幕截图工具的可用性。尽管使用默认的键盘快捷键也可以获取屏幕截图,但如果使用屏幕截图工具,可以更方便地对屏幕截图进行编辑。

本文将会介绍在不适用第三方工具的情况下,如何通过系统自带的方法和工具获取屏幕截图,另外还会介绍一些可用于 Linux 的最佳截图工具。

方法 1:在 Linux 中截图的默认方式

你想要截取整个屏幕?屏幕中的某个区域?某个特定的窗口?

如果只需要获取一张屏幕截图,不对其进行编辑的话,那么键盘的默认快捷键就可以满足要求了。而且不仅仅是 Ubuntu ,绝大部分的 Linux 发行版和桌面环境都支持以下这些快捷键:

  • PrtSc – 获取整个屏幕的截图并保存到 Pictures 目录。
  • Shift + PrtSc – 获取屏幕的某个区域截图并保存到 Pictures 目录。
  • Alt + PrtSc –获取当前窗口的截图并保存到 Pictures 目录。
  • Ctrl + PrtSc – 获取整个屏幕的截图并存放到剪贴板。
  • Shift + Ctrl + PrtSc – 获取屏幕的某个区域截图并存放到剪贴板。
  • Ctrl + Alt + PrtSc – 获取当前窗口的 截图并存放到剪贴板。

如上所述,在 Linux 中使用默认的快捷键获取屏幕截图是相当简单的。但如果要在不把屏幕截图导入到其它应用程序的情况下对屏幕截图进行编辑,还是使用屏幕截图工具比较方便。

方法 2:在 Linux 中使用 Flameshot 获取屏幕截图并编辑

未分类

功能概述:

  • 注释 (高亮、标示、添加文本、框选)
  • 图片模糊
  • 图片裁剪
  • 上传到 Imgur
  • 用另一个应用打开截图

Flameshot 在去年发布到 GitHub,并成为一个引人注目的工具。

如果你需要的是一个能够用于标注、模糊、上传到 imgur 的新式截图工具,那么 Flameshot 是一个好的选择。

下面将会介绍如何安装 Flameshot 并根据你的偏好进行配置。

如果你用的是 Ubuntu,那么只需要在 Ubuntu 软件中心上搜索,就可以找到 Flameshot 进而完成安装了。要是你想使用终端来安装,可以执行以下命令:

sudo apt install flameshot

如果你在安装过程中遇到问题,可以按照官方的安装说明进行操作。安装完成后,你还需要进行配置。尽管可以通过搜索来随时启动 Flameshot,但如果想使用 PrtSc 键触发启动,则需要指定对应的键盘快捷键。以下是相关配置步骤:

  • 进入系统设置中的“键盘设置”
  • 页面中会列出所有现有的键盘快捷键,拉到底部就会看见一个 “+” 按钮
  • 点击 “+” 按钮添加自定义快捷键并输入以下两个字段:
    • “名称”: 任意名称均可。
    • “命令”: /usr/bin/flameshot gui
  • 最后将这个快捷操作绑定到 PrtSc 键上,可能会提示与系统的截图功能相冲突,但可以忽略掉这个警告。

配置之后,你的自定义快捷键页面大概会是以下这样:

未分类

方法 3:在 Linux 中使用 Shutter 获取屏幕截图并编辑

未分类

功能概述:

  • 注释 (高亮、标示、添加文本、框选)
  • 图片模糊
  • 图片裁剪
  • 上传到图片网站

Shutter 是一个对所有主流 Linux 发行版都适用的屏幕截图工具。尽管最近已经不太更新了,但仍然是操作屏幕截图的一个优秀工具。

在使用过程中可能会遇到这个工具的一些缺陷。Shutter 在任何一款最新的 Linux 发行版上最常见的问题就是由于缺少了任务栏上的程序图标,导致默认禁用了编辑屏幕截图的功能。 对于这个缺陷,还是有解决方案的。你只需要跟随我们的教程在 Shutter 中修复这个禁止编辑选项并将程序图标在任务栏上显示出来。问题修复后,就可以使用 Shutter 来快速编辑屏幕截图了。

同样地,在软件中心搜索也可以找到进而安装 Shutter,也可以在基于 Ubuntu 的发行版中执行以下命令使用命令行安装:

sudo apt install shutter

类似 Flameshot,你可以通过搜索 Shutter 手动启动它,也可以按照相似的方式设置自定义快捷方式以 PrtSc 键唤起 Shutter。

如果要指定自定义键盘快捷键,只需要执行以下命令:

shutter -f

方法 4:在 Linux 中使用 GIMP 获取屏幕截图

未分类

功能概述:

  • 高级图像编辑功能(缩放、添加滤镜、颜色校正、添加图层、裁剪等)
  • 截取某一区域的屏幕截图

如果需要对屏幕截图进行一些预先编辑,GIMP 是一个不错的选择。

通过软件中心可以安装 GIMP。如果在安装时遇到问题,可以参考https://www.gimp.org/downloads/

要使用 GIMP 获取屏幕截图,需要先启动程序,然后通过 “File-> Create-> Screenshot” 导航。

打开 Screenshot 选项后,会看到几个控制点来控制屏幕截图范围。点击 “Snap” 截取屏幕截图,图像将自动显示在 GIMP 中可供编辑。

方法 5:在 Linux 中使用命令行工具获取屏幕截图

这一节内容仅适用于终端爱好者。如果你也喜欢使用终端,可以使用 “GNOME 截图工具”或 “ImageMagick” 或 “Deepin Scrot”,大部分流行的 Linux 发行版中都自带这些工具。

要立即获取屏幕截图,可以执行以下命令:

GNOME 截图工具(可用于 GNOME 桌面)

gnome-screenshot

GNOME 截图工具是使用 GNOME 桌面的 Linux 发行版中都自带的一个默认工具。如果需要延时获取屏幕截图,可以执行以下命令(这里的 5 是需要延迟的秒数):

gnome-screenshot -d -5

ImageMagick

如果你的操作系统是 Ubuntu、Mint 或其它流行的 Linux 发行版,一般会自带 ImageMagick 这个工具。如果没有这个工具,也可以按照官方安装说明使用安装源来安装。你也可以在终端中执行这个命令:

sudo apt-get install imagemagick

安装完成后,执行下面的命令就可以获取到屏幕截图(截取整个屏幕):

import -window root image.png

这里的 “image.png” 就是屏幕截图文件保存的名称。

要获取屏幕一个区域的截图,可以执行以下命令:

import image.png

Deepin Scrot

Deepin Scrot 是基于终端的一个较新的截图工具。和前面两个工具类似,一般自带于 Linux 发行版中。如果需要自行安装,可以执行以下命令:

sudo apt-get install scrot

安装完成后,使用下面这些命令可以获取屏幕截图。

获取整个屏幕的截图:

scrot myimage.png

获取屏幕某一区域的截图:

scrot -s myimage.png

总结

以上是一些在 Linux 上的优秀截图工具。当然还有很多截图工具没有提及(例如用于 KDE 发行版的 Spectacle),但相比起来还是上面几个工具更为好用。

如果你有比文章中提到的更好的截图工具,欢迎讨论!

Linux中 MySQL 授权远程连接

说明:当别的机子(IP )通过客户端的方式在没有授权的情况下是无法连接 MySQL 数据库的,如果需要远程连接 Linux 系统上的 MySQL 时,必须为其 IP 和 具体用户 进行 授权 。一般 root 用户不会提供给开发者。如:使用 Windows 上的 SQLyog 图形化管理工具连接 Linux 上的 MySQL 数据库,必须先对其进行授权。

1、在虚拟机中使用 root 用户登录 mysql 数据库

mysql -u root -p

说明:root 用户密码一般设置为 root

2、使用 mysql 命令为 root 用户授权 mysql 远程连接服务

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

说明:此命令是为密码为 root 、IP(%)任意的 root 用户授权。(%:模糊查询,所有 IP 都可以,,可指定其他主机 IP;BY 后的 ‘root’ 为密码)

3、将配置写入 mysql 授权表中

mysql> flush privileges;