浏览模式: 标准 | 列表 全部文章

[置顶] 自用的linux批处理命令

自用树莓派作为全屏网页展示机的配置

这篇日志被加密了,请输入密码后查看。

Apache服务器利用.htaccess隐藏网页文件扩展名

在网站根目录建立或上传.htaccess文件,内容如下:

  1. <IfModule mod_rewrite.c> 
  2. Options +FollowSymlinks 
  3. RewriteEngine On 
  4. RewriteBase / 
  5. RewriteCond %{REQUEST_FILENAME} !-f 
  6. RewriteCond %{REQUEST_FILENAME} !-d 
  7. RewriteCond %{REQUEST_FILENAME}.php -f 
  8. RewriteRule ^(.+)$ /$1.php [L,QSA] 
  9. </IfModule> 

解决80端口被封LNMP无法安装Let's Encrypt SSL证书

手头有一个国内的固定IP,80端口被封,内网中配置了一台运行lnmp的linux网站服务器,通过路由器端口映射功能,可以访问到443端口(https模式)。

lnmp自带的脚本中就可以增加Let's Encrypt SSL证书,但是该证书需要外网访问到域名才可以签发,但实际上80端口被封杀,压根无法访问到域名。通过google搜索发现也可以通过DNS验证模式来给需要上SSL的域名签名,但是毕竟繁琐。

时刻片刻,我想到了一个很有意思的方法——既然只是80端口被封,那么其它端口是可以正常访问到内网的网站服务器的(路由器上做端口映射)。

准备如下(以下数据都按实际修改):

1、国内的固定IP为1.1.1.1

2、国外买一台便宜的Linux服务器,安装好lnmp,获得固定IP为2.2.2.2

3、需要上SSL的域名为is36.com的子域名ssl.is36.com,is36.com域名放在dnspod.cn解析的,增加3个解析记录如下:

  • ssl.is36.com的A记录默认解析到1.1.1.1
  • ssl.is36.com的A记录国外线路解析到2.2.2.2
  • sslfd.is36.com的A记录默认解析到1.1.1.1

4、在国内的路由器上设置443端口映射到内网服务器443端口,888端口映射到内网服务器80端口.

5、在国内的服务器上新增sslfd.is36.com网站,指定网站目录为ssl.is36.com目录。

6、在国外的服务器上/usr/local/nginx/conf/vhost目录下新增一个sslfd.is36.com.conf文件,内容如下:

  • server
  • {
  •     listen          80;
  •     server_name     ssl.is36.com;
  •     location / {
  •         proxy_pass          http://sslfd.is36.com:888/;
  •         proxy_redirect      off;
  •         proxy_set_header    X-Real-IP       $remote_addr;
  •         proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  •         }
  • }

7、保存好以上配置信息后,执行service nginx reload使生效。

8、回到国内服务器上,执行新增网站ssl.is36.com,指定ssl.is36.com目录,指定增加Let's Encrypt证书,最后就会部署成功。

9、尝试访问https://ssl.is36.com,成功!

总结:本文的解决思路就是通过dnspod国内外分区域访问的方法,让Let's Encrypt的验证服务器(国外线路)访问到我们的国外服务器,国外服务器接收验证请求后利用nginx反向代理获取http://sslfd.is36.com:888/的数据,而http://sslfd.is36.com:888/网站的数据跟ssl.is36.com的网站数据是同一个目录的,自然就会让验证服务器觉得验证成功了!

[php]private public protected 三者之间关系

public 权限是最大的,可以内部调用,实例调用等;

private 私有类型,只有在本类中使用

protected 受保护类型,用于本类和继承类调用

  1. <?  
  2. //父类  
  3. class father{  
  4. public function a(){  
  5. echo "function a";   
  6. }  
  7. private function b(){  
  8. echo "function b";   
  9. }  
  10. protected function c(){  
  11. echo "function c";   
  12. }  
  13. }  
  14. //子类  
  15. class child extends father{  
  16. function d(){   
  17. parent::a();//调用父类的a方法  
  18. }  
  19. function e(){   
  20. parent::c(); //调用父类的c方法  
  21. }   
  22. function f(){   
  23. parent::b(); //调用父类的b方法  
  24. }   
  25.   
  26. }  
  27. $father=new father();  
  28. $father->a();  
  29. $father->b(); //显示错误 外部无法调用私有的方法 Call to protected method father::b()   
  30. $father->c(); //显示错误 外部无法调用受保护的方法Call to private method father::c()   
  31.   
  32. $chlid=new child();  
  33. $chlid->d();  
  34. $chlid->e();//可以调用受保护的方法 
  35. $chlid->f();//显示错误 无法调用父类private的方法 Call to private method father::b()   
  36. ?> 

 

三种编程命名规则(匈牙利法,小驼峰法,大驼峰法)

1. 匈牙利命名:

开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写。

For example: long lsum = 0;"l"是类型的缩写;

 

2. 小驼峰式:(little camel-case)

第一个单词首字母小写,后面其他单词首字母大写。

For example: string firstName = string.Empty;

 

2. 大驼峰式:(big camel-case)

每个单词的第一个字母都大写;

For example:string FirstName = string.Empty;

mysql 时间戳与日期格式的相互转换

mysql 时间戳与日期格式的相互转换

1、UNIX时间戳转换为日期函数:FROM_UNIXTIME()

  • select FROM_UNIXTIME(1507614043);

输出:2017-10-10 13:40:43

mysql查询当天的记录数:

  • $sql=”select * from 表 Where DATE_FORMAT(FROM_UNIXTIME(列),’%Y-%m-%d’) = DATE_FORMAT(NOW(),’%Y-%m-%d’) order by id desc”; 

2、日期转换为UNIX时间戳函数: UNIX_TIMESTAMP()

  • Select UNIX_TIMESTAMP('2017-10-10 13:40:43');

输出:1507614043 

查看当前时间的时间戳:

  • Select UNIX_TIMESTAMP(NOW());

PHP 时间戳与日期格式的相互转换:

UNIX时间戳转换为日期用函数: date()

  • date('Y-m-d H:i:s', 1507614043); 

日期转换为UNIX时间戳用函数:strtotime()

  • strtotime('2017-10-10 13:40:43');

树莓派Raspberry玩耍过程记录

 最近在淘宝上买了一个最新的树莓派三代B型Element14版(中国造)用来完成一个小型项目。

1、树莓派最新系统

下载地址:https://www.raspberrypi.org/downloads/raspbian/

我选择的是RASPBIAN STRETCH WITH DESKTOP,基于Debian系统,带桌面环境,版本为2017-09-07-raspbian-stretch(http://111.1.62.87/files/5182000004AB280B/vx2-downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip

2、默认没有开启ssh,如何开启?

进入终端界面,切换到boot目录,创建一个ssh文件,然后重启,命令如下:

  • cd /boot
  • sudo touch ssh
  • reboot

3、树莓派开启远程桌面功能(window系统远程桌面连接可以连接)

  • cd /tmp/
  • wget http://mirrordirector.raspbian.org/raspbian/pool/main/x/xfonts-base/xfonts-base_1.0.3_all.deb
  • sudo dpkg -i xfonts-base_1.0.3_all.deb
  • sudo apt-get remove xrdp vnc4server tightvncserver -y
  • sudo apt-get install tightvncserver​ -y
  • sudo apt-get install xrdp -y

4、更新apt-get列表

  • sudo apt-get update

5、安装一个Nginx+PHP+MySQL+PhpMyAdmin玩玩?

  • sudo apt-get install nginx -y
  • sudo apt-get install php5-fpm php5-mysql -y
  • sudo apt-get install mysql-client-core-5.5 -y
  • sudo apt-get install mysql-server mysql-client -y

注意:当在安装的时候提示如下错误,解决方法就是换回官方源即可,参考第6条。

  • mysqsl-server : Depends: mysql-server-5.5 but it is not going to be installed
  • Depends: mysql-client-5.5 but it is not going to be installed

安装完成之后mysql的root用户只能在树莓派系统的root用户下才能进入,当你是pi用户登录时候,输入su和root用户密码后就可以切换到root用户下,然后用mysql -uroot -p即可进入mysql数据库进行操作。

接着开始配置nginx+php+mysql

#修改nginx默认配置文件

  • sudo nano /etc/nginx/sites-available/default 

把index index.html index.htm index.nginx-debian.html;

改为index index.php index.html index.htm index.nginx-debian.html;

因为按照的是php5-fpm模式来跑php,所以继续往下,有关php的部分修改如下

  •         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  •         #
  •         location ~ \.php$ {
  •         #       include snippets/fastcgi-php.conf;
  •         #
  •         #       # With php5-cgi alone:
  •         #       fastcgi_pass 127.0.0.1:9000;
  •         #       # With php5-fpm:
  •                 fastcgi_pass unix:/var/run/php5-fpm.sock;
  •                 fastcgi_index index.php;
  •                 include fastcgi_params;
  •         }

接着按ctrl+x,按y后回车保存成功,测试一下配置文件是否有问题:

  • sudo nginx -s reload

nginx+php-fpm配置后页面显示空白的解决方法:

参考:http://blog.csdn.net/feiniao8651/article/details/52768911

在/etc/nginx/fastcgi_params文件的最后增加两行: 

  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
  • fastcgi_param PATH_INFO                $fastcgi_script_name; 

最后重载nginx和php5-fpm

  • sudo service nginx reload
  • sudo service php5-fpm reload

查看nginx+php+mysql版本号如下:

  • pi@raspberrypi:/ $ nginx -v
  • nginx version: nginx/1.6.2
  • pi@raspberrypi:/ $ php -v
  • PHP 5.6.30-0+deb8u1 (cli) (built: Apr 14 2017 16:20:58) 
  • Copyright (c) 1997-2016 The PHP Group
  • Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
  •     with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
  • pi@raspberrypi:/ $ mysql -V
  • mysql  Ver 15.1 Distrib 10.1.23-MariaDB, for debian-linux-gnueabihf (armv7l) using readline 5.2

nginx默认的网页目录是:/var/www/html

6、默认更新源太慢了,能不能换个更新源?

把源改成aliyun的就会比较快了!命令如下:

  • sudo mv /etc/apt/sources.list /etc/apt/sources.list_bak
  • sudo nano /etc/apt/sources.list

输入下面2条记录后按ctrl+x退出,输入y后回车完成保存

  • deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main contrib non-free rpi
  • deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main contrib non-free rpi

保存之后需要用sudo apt-get update命令更新软件源列表。

注意:如果发现后续在安装软件无法成功的情况下,请恢复官方默认源,好处就是安装成功率会很高,毕竟是官方出品;坏处就是速度会慢一点,毕竟是连接到千里之外。

7、用到树莓派的显示屏作为演示或监视器的时候,禁止长时间无响应屏幕休眠的方法。

电源管理中禁止屏幕休眠,命令具体如下:

  • sudo nano /etc/profile.d/screen.sh

输入如下命令后按ctrl+x,然后按y后回车,最后重启即可:

xset s 0 0

xset dpms 0 0 0

  • sudo reboot

其它一些设置

  • #xset s 300      #设置屏保时间为300秒,时间单位为秒
  • #xset s 0        #关闭屏幕保护
  • #xset dpms 0 0 0 # 三个数值分别为Standby、Suspend、Off,单位秒
  • #xset -dpms      #关闭电源管理

更多相关设置示例:

指令 说明
xset s off 禁用屏幕保护
xset s 3600 3600 设置空闲时间为1小时
xset -dpms 关闭 DPMS
xset s off -dpms 禁用 DPMS 并阻止屏幕进入空闲
xset dpms force off 立即关闭屏幕
xset dpms force standby 强制屏幕进入待命状态
xset dpms force suspend 强制屏幕进入暂停状态

8、修改为上海时区

  • sudo timedatectl set-timezone Asia/Shanghai

9、我需要安装Firefox!

在树莓派下Firefox叫做iceweasel,安装命令如下:

  • sudo apt-get install iceweasel -y

如果希望Firefox支持Flash的话就继续执行以下命令:

  • sudo apt-get install browser-plugin-gnash -y

10、树莓派自动登录、自动运行startx、自动运行程序

参考:http://blog.csdn.net/rocklee/article/details/50083049

设置开机自动运行Firefox命令如下:

  • mkdir -p /home/pi/.config/autostart
  • echo '[Desktop Entry]'>/home/pi/.config/autostart/my.desktop
  • echo 'Type=Application'>>/home/pi/.config/autostart/my.desktop
  • echo 'Exec=firefox'>>/home/pi/.config/autostart/my.desktop

11、禁用Firefox崩溃后的会话恢复功能(默认是启用的)

这样在意外退出或崩溃后,Firefox 也不会恢复上次会话的窗口和标签页:

在 地址栏,输入 about:config,然后按 Enter,到 about:config 页面。

在顶端的过滤器文本框中,输入browser.sessionstore.resume_from_crash。

在结果栏中,双击browser.sessionstore.resume_from_crash并设置为false。

12、修改nginx配置文件使得api目录下可以隐藏PHP文件扩展名

比如访问api/get.php文件可以用api/get访问到。

sudo nano /etc/nginx/sites-available/default

在location ~ \.php$这个节点下方增加如下

        location ^~ /api/ {

   if (!-f $request_filename){

       rewrite "^/api/(.*)$" /api/$1.php;

break;

  }

                fastcgi_pass unix:/var/run/php5-fpm.sock;

                include fastcgi_params;

        }

13、设置树莓派HDMI输出黑屏问题

当把树莓派通过HDMI连接显示器或者电视后,如果树莓派先于显示器或电视启动,则会产生显示器或电视开启后黑屏问题,只能重启树莓派才能正常显示。如何解决这个问题呢?在树莓派系统里编辑/boot/config.txt文件,末尾增加hdmi_ignore_edid=0xa5000080保存后重启即可。

14、树莓派修改系统时间

sudo date --s="2017-10-28 12:00:00"

15、解决No module named cv2的问题

sudo apt-get install python-opencv

16、设置树莓派HDMI输出无法全屏问题

我以输出到1920x1080的电视机为例,用sudo nano /boot/config.txt命令编辑配置文件,以下参数修改如下,去掉前面的#(注释符)

  • disable_overscan=1
  • overscan_left=5
  • overscan_right=5
  • overscan_top=5
  • overscan_bottom=5
  • framebuffer_width=1920
  • framebuffer_height=1080

17、检测Firefox是否运行,没有运行则重启系统

*/1 * * * * sudo /home/pi/chk_firefox

  • #! /bin/bash
  • function check(){
  •   count=`ps -ef |grep $1 |grep -v "grep" |wc -l`
  •   #echo $count
  •   if [ 0 == $count ];then
  •   echo "[ `date +'%Y-%m-%d %T'` ]">>/home/pi/reboot.log
  • sudo reboot
  •   fi
  • }
  • sleep 30
  • check firefox-esr

18、启动chromium浏览器并最大化显示

mkdir -p /home/pi/.config/autostart

echo '[Desktop Entry]'>/home/pi/.config/autostart/my.desktop

echo 'Type=Application'>>/home/pi/.config/autostart/my.desktop

echo 'Exec=/home/pi/start_chrome'>>/home/pi/.config/autostart/my.desktop

 

touch ~/start_chrome && chmod +x ~/start_chrome

nano ~/start_chrome

  • #!/bin/sh
  • sed -i 's/"exited_cleanly":false/"exited_cleanly": true/' /home/pi/.config/chromium/Default/Preferences
  • sed -i 's/"exit_type":"Crashed"/"exit_type": "None"/' /home/pi/.config/chromium/Default/Preferences
  •  
  • chromium-browser --disable-popup-blocking --no-first-run --disable-desktop-notifications --kiosk "http://blog.is36.com"

19、待续……

Linux系统启动自动进入桌面启动Firefox程序并最大化

这里Linux以CentOS为例,安装好gnome桌面环境以及中文字体支持:

  • yum -y groupinstall Desktop
  • yum -y groupinstall "X Window System"
  • yum -y install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts
  • yum groupinstall chinese-support

安装完成后首次用startx或者init 5进入桌面系统,然后安装Firefox

  • yum -y install firefox

我们需要设置Linux自动登录gnome桌面并且启动Firefox程序

修改/etc/gdm/custom.conf

在[daemon]下添加

  • AutomaticLoginEnable=true
  • AutomaticLogin=root

修改/etc/inittab文件,把id:3:initdefault:修改为id:5:initdefault:保存

然后编辑~/.bash_profile文件,在末尾添加firefox后保存

打开Firefox浏览器,设置主页和full screen插件

重启系统,就可以看到系统自动登录->启动Firefox浏览器->打开主页->全屏窗口。

参考资料: 

  1. 如果是开机马上执行的脚本,可以将脚本写到rc.local中;
  2. 如果是用户登录后自动执行脚本,可以将脚本写到相应的用户目录下“~/.bash_profile”,若脚本“~/.bash_profile”不存在,可以直接拷贝“/etc/profile”命名为“~/.bash_profile”;
  3. 如果是要任一用户登录后自动执行脚本,可以将脚本写到“/etc/profile”中。