linux学习之cygwin

个人建议:
如果你在完全使用linux之前,觉得不太适应;
或者在windows里安装虚拟机然后再安装Linux觉得麻烦,也可能机器性能不够好(现在基本已经可以排除这个原因了);
那么,这个软件非常适合你,我在彻底转到linux之前,就是使用的这个软件,直到有一天,我觉得使用这个还不如使用Linux方便的时候,就把电脑系统换成了Ubuntu,当时简直是无缝对接,从此再也没有换回windows.
Get that Linux feeling – on Windows
http://www.cygwin.com
安装之后,下次如果要安装其他的插件,还是使用该setup.exe安装

archlinux突然没有声音了

看到了下面的这篇文章,和我的电脑的情况一样,有缘啊,但最后发现是自己静音了。。。。。
自己的机子是联想Y410p,之前安装完arch系统一直不能播放声音(桌面环境用的是i3-wm),自己又不懂得设置,今天对电脑进行配置,顺带把声音的问题解决了。
ALSA参照arch官网,wiki传送门
高级 Linux 声音体系(Advanced Linux Sound Architecture,ALSA)是Linux中提供声音设备驱动的内核组件,用来代替原来的开放声音系统(Open Sound System,OSSv3)。除了声音设备驱动,ALSA还包含一个用户空间的函数库,以方便开发者通过高级API使用驱动功能,而不必直接与内核驱动交互。
Arch 默认的内核已经通过一套模块提供了 ALSA,不必特别安装。
udev会在系统启动时自动检测硬件,并加载相应的声音设备驱动模块。这时,你的声卡已经可以工作了,只是所有声道默认都被设置成静音了。
解除各声道的静音
目前版本的 ALSA 安装后,所有声道默认是静音的,必须手动解除。
使用 alsamixer 的 ncurses 界面,配置十分简单:
$ alsamixer
此外,还可以在命令行下使用 amixer:
$ amixer sset Master unmute
在 alsamixer 中,下方标有 MM 的声道是静音的,而标有 00 的通道已经启用。
使用 ← 和 → 方向键,选中 Master 和 PCM 声道。按下 m 键解除静音。使用 ↑ 方向键增加音量,直到增益值为0。该值显示在左上方 Item: 字段后。过高的增益值会导致声音失真。
要想得到完整的 5.1 或 7.1 环绕立体声,还得解除 Front、Surround、Center、LFE (subwoofer) 和 Side 这些声道的静音(上述名称是 Intel HD Audio 声卡使用的声道名,可能因设备不同而有所差异)。注意,仅有这些设置,系统不会自动将立体声源(多数音乐)提升(upmix)成环绕立体声。如果需要这些功能,请阅读#Upmixing/Downmixing。
要启用麦克风,切换至 Capture 选项卡,按下 F4,按下 空格 启用其中一个声道即可。
按下 Esc 键退出 alsamixer。
问题是这样的
使用alsamixer设置之后还是没有声音的,就使用第二种方法,出现error:
amixer: Unable to find simple control ‘Master’,0
表示不能设置,或是找不到声卡设备,我还以为安装完没有声卡驱动。
用命令获取声卡的声卡ID和设备ID
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: PCH [HDA Intel PCH], device 0: ALC282 Analog [ALC282 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: PCH [HDA Intel PCH], device 1: ALC282 Digital [ALC282 Digital] Subdevices: 1/1 Subdevice #0: subdevice #0
声卡信息应该是没有问题的。
在amixer配置音频
scontrols ” show all mixer simple controls
$ amixer scontrols Simple mixer control ‘IEC958’,0Simple mixer control ‘IEC958’,1Simple mixer control ‘IEC958’,2
然而并没有“Master”,这种情况应该是默认声卡不对。
-c,–card N ” select the card
$ amixer -c 1 scontrols Simple mixer control ‘Master’,0Simple mixer control ‘Headphone’,0Simple mixer control ‘Speaker’,0Simple mixer control ‘PCM’,0Simple mixer control ‘Mic’,0Simple mixer control ‘Mic Boost’,0Simple mixer control ‘IEC958’,0Simple mixer control ‘IEC958 Default PCM’,0Simple mixer control ‘Beep’,0Simple mixer control ‘Capture’,0Simple mixer control ‘Auto-Mute Mode’,0Simple mixer control ‘Internal Mic Boost’,0
问题就出现在默认声卡不对,解决问题的办法就是修改默认声卡。
在刚才 aplay -l 里面选择声卡1,设备ID为0的声卡
把下列配置添加到系统级别的 /etc/asound.conf 或用户级别的 ~/.asoundrc 文件。如果文件不存在,可以手动创建。其中的各个ID,请根据实际情况调整:
defaults.pcm.card 1 defaults.pcm.device 0 defaults.ctl.card 1
pcm选项决定用来播放音频的设备,而ctl选项决定那个声卡能够由控制工具(如 alsamixer)使用。
上述配置在重启音频程序(如 mplayer)后立即生效。
题外话:
在i3-wm还要自己配声音,我也是醉了,强大如gnome的都给配置好了。

用fbterm在tty下实现输入中文字符

使用fbterm等组件实现Linux终端下中文文本的显示和输入

系统环境:Ubuntu14.04(64bit)

第一步:安装相关软件:

apt-get install fbterm fcitx im-config fcitx-frontend-fbterm

第二步:进行相关配置:

默认情况下非root用户不能运行fbterm命令,因此要执行如下命令

gpasswd -a user viedo

来使普通用户user能成功使用fbterm

然后执行

chmod u+s /usr/bin/fbterm

接着,修改~/.fbtermrc

input-method=fcitx-fbterm

保存。

重启电脑,至此,可以在tty下通过执行fbterm命令来实现中文的显示,可以使用中文输入法在tty输入中文,CTRL+Space实现中英文输入法的切换。

待解决问题:

1:root用户无法使用fcitx,fcitx-fbterm

2:中文输入法切换到英文输入法时终端显示冗余字符

3:fbterm下屏幕唤醒时可能产生错误

4:tty登录时自动使用fbterm

朋友的配置

(#当不在X系统下的时候,启动fbterm 加载输入法 并且加载了tmux。完美解决。
#同时把mplayer设置视频输出为fbdev2
#tmux bind c 建新窗口,v 垂直分pane s水平分,w列出已经打开的窗口,0 1 2 选择不同的窗口。
if [ “$DISPLAY” = “” ]; then
#if [ “$TERM” = “linux” ]; then
SHELL=tmux fcitx-fbterm-helper -l
#export TERM=fbterm
alias tmplayer=’/usr/bin/mplayer -vo fbdev2′
#export TERM=screen-256color
fi

)

5:init3下不能使用fcitx

6:init3下屏幕关闭,唤醒。睡眠,休眠等问题。

总而言之,终端下使用fbterm+fcitx-fbterm来解决中文显示和输入的问题是现在使用的很多的一种方案,虽然配置起来问题多多,最终实现也会有一些小bug,但是已经可以满足基本使用需要了。因此我暂时采用这个方案,另外期待coder们能在这个问题上开发出更好的解决方案来。

利用proxychains在终端使用socks5代理


1.proxychains安装
1
2
3
4
5
6
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure
make && make install
cp ./src/proxychains.conf /etc/proxychians.conf
cd .. && rm -rf proxychains-ng
也可以用brew install proxychains-ng安装。
2.编辑proxychains配置
1 vim /etc/proxychains.conf
3.将socks4 127.0.0.1 9095改为
1 socks5 127.0.0.1 1080
ps: 默认的socks4 127.0.0.1 9095是tor代理,而socks5 127.0.0.1 1080是shadowsocks的代理。
proxychains.conf文件说明了代理配置格式,如下,这里根据自己使用的代理来配置就行了。
1
2
3
4
5
6
7
8
9
10
11
12
13
ProxyList format
94 # type ip port [user pass]
95 # (values separated by ‘tab’ or ‘blank’)
96 #
97 # only numeric ipv4 addresses are valid
98 #
99 #
100 # Examples:
101 #
102 # socks5 192.168.67.78 1080 lamer secret
103 # http 192.168.89.3 8080 justu hidden
104 # socks4 192.168.1.49 1080
105 # http 192.168.39.93 8080
4.使用方法
在需要代理的命令前加上 proxychains4 ,如:
1 proxychains4 wget http://xxx.com/xxx.zip

站点某些链接不需要https,要用http,比如做微信的回调地址时

http://me3-dev.masengine.com/app/index.php/mex/receive_message/index/13
在https server下加入如下配置:

if ($uri !~* “/mex/receive_message/index/”) { rewrite ^/(.*)$//$host/$1 redirect; }
在http server下加入如下配置:

if ($uri ~* “/logging.php$”) { rewrite ^/(.*)$ https://$host/$1 redirect; }

最近在VPS上尝试配置安装一个网站,VPS安装了LNMP(Linux+Nginx+MySQL+php)在配置重定规则的时候经常遇到一些问题,直接用Apache的规则到Nginx下没起作用。原来Apache 重写的规则到nginx上还有一些不太一样的地方。

这里只是简单记录一些学习示例,高手略过,新手可以看一下。

Nginx Rewrite规则相关指令
Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。一个简单的Nginx Rewrite规则语法如下:

rewrite ^/b/(.*)\.html /play.php?video=$1 break;

如果加上if语句,示例如下:

if (!-f $request_filename)

rewrite ^/img/(.*)$ /site/$host/images/$1 last;

Nginx与Apache的Rewrite规则实例对比

简单的Nginx和Apache 重写规则区别不大,基本上能够完全兼容。例如:

Apache Rewrite 规则:

RewriteRule ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 [L]

RewriteRule ^/ceshi/$ /zl/ceshi.php [L]

RewriteRule ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 [L]

RewriteRule ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 [L]

Nginx Rewrite 规则:

rewrite ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 last;

rewrite ^/ceshi/$ /zl/ceshi.php last;

rewrite ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 last;

rewrite ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 last;

由以上示例可以看出,Apache的Rewrite规则改为Nginx的Rewrite规则,其实很简单:Apache的RewriteRule指令换成Nginx的rewrite指令,Apache的[L]标记换成Nginx的last标记,中间的内容不变。

如果Apache的Rewrite规则改为Nginx的Rewrite规则后,使用nginx -t命令检查发现nginx.conf配置文件有语法错误,那么可以尝试给条件加上引号。例如一下的Nginx Rewrite规则会报语法错误:

rewrite ^/([0-9]{5}).html$ /x.jsp?id=$1 last;

加上引号就正确了:
rewrite “^/([0-9]{5}).html$” /x.jsp?id=$1 last;

Apache与Nginx的Rewrite规则在URL跳转时有细微的区别:

Apache Rewrite 规则:
RewriteRule ^/html/tagindex/([a-zA-Z]+)/.*$ /$1/ [R=301,L]

Nginx Rewrite 规则:
rewrite ^/html/tagindex/([a-zA-Z]+)/.*$ http://$host/$1/ permanent;

以上示例中,我们注意到,Nginx Rewrite 规则的置换串中增加了“http://$host”,这是在Nginx中要求的。

另外,Apache与Nginx的Rewrite规则在变量名称方面也有区别,例如:

Apache Rewrite 规则:
RewriteRule ^/user/login/$ /user/login.php?login=1&forward=http://%{HTTP_HOST} [L]

Nginx Rewrite 规则:
rewrite ^/user/login/$ /user/login.php?login=1&forward=http://$host   last;

Apache与Nginx Rewrite 规则的一些功能相同或类似的指令、标记对应关系:

Apache的RewriteCond指令对应Nginx的if指令;
Apache的RewriteRule指令对应Nginx的rewrite指令;
Apache的[R]标记对应Nginx的redirect标记;
Apache的[P]标记对应Nginx的last标记;
Apache的[R,L]标记对应Nginx的redirect标记;
Apache的[P,L]标记对应Nginx的last标记;
Apache的[PT,L]标记对应Nginx的last标记;

允许指定的域名访问本站,其他域名一律跳转到http://www.aaa.com

Apache Rewrite 规则:
RewriteCond %{HTTP_HOST}    ^(.*?)\.domain\.com$
RewriteCond %{HTTP_HOST}    !^qita\.domain\.com$
RewriteCond %{DOCUMENT_ROOT}/market/%1/index.htm -f
RewriteRule ^/wu/$ /market/%1/index.htm [L]

Nginx的if指令不支持嵌套,也不支持AND、OR等多条件匹配,相比于Apache的RewriteCond,显得麻烦一些,但是,我们可以通过下一页的Nginx配置写法来实现这个示例:

Nginx Rewrite 规则:
if ($host ~* ^(.*?)\.domain\.com$) set $var_wupin_city $1;
set $var_wupin ‘1′;

if ($host ~* ^qita\.domain\.com$)

set $var_wupin ‘0′;

if (!-f $document_root/market/$var_wupin_city/index.htm)

set $var_wupin ‘0′;

if ($var_wupin ~ ‘1′)

rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;
}

 

rewrite 的语法

 

语法: rewrite regex replacement flag

默认: none

作用域: server, location, if

This directive changes URI in accordance with the regular expression and the replacement string. Directives are carried out in order of appearance in the configuration file.

这个指令根据表达式来更改URI,或者修改字符串。指令根据配置文件中的顺序来执行。

Be aware that the rewrite regex only matches the relative path instead of the absolute URL. If you want to match the hostname, you should use an if condition, like so:

注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句。

rewrite只是会改写路径部分的东东,不会改动用户的输入参数,因此这里的if规则里面,你无需关心用户在浏览器里输入的参数,rewrite后会自动添加的因此,我们只是加上了一个?号和后面我们想要的一个小小的参数 ***https=1就可以了。

nginx的rewrite规则参考:

  1. ~ 为区分大小写匹配
  2. ~* 为不区分大小写匹配
  3. !~和!~*分别为区分大小写不匹配及不区分大小写不匹
  1. -f和!-f用来判断是否存在文件
  2. -d和!-d用来判断是否存在目录
  3. -e和!-e用来判断是否存在文件或目录
  4. -x和!-x用来判断文件是否可执行
  1. last 相当于Apache里的[L]标记,表示完成rewrite,呵呵这应该是最常用的
  2. break 终止匹配, 不再匹配后面的规则
  3. redirect 返回302临时重定向 地址栏会显示跳转后的地址
  4. permanent 返回301永久重定向 地址栏会显示跳转后的地址
  1. $args
  2. $content_length
  3. $content_type
  4. $document_root
  5. $document_uri
  6. $host
  7. $http_user_agent
  8. $http_cookie
  9. $limit_rate
  10. $request_body_file
  11. $request_method
  12. $remote_addr
  13. $remote_port
  14. $remote_user
  15. $request_filename
  16. $request_uri
  17. $query_string
  18. $scheme
  19. $server_protocol
  20. $server_addr
  21. $server_name
  22. $server_port
  23. $uri

结合QeePHP的例子

  1. if (!-d $request_filename) {
  2. rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=$1&action=$2&$3 last;
  3. rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller=$1 last;
  4. break;

多目录转成参数
abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2

  1. if ($host ~* (.*)\.domain\.com) {
  2. set $sub_name $1;
  3. rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;
  4. }

目录对换
/123456/xxxx -> /xxxx?id=123456

  1. rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;

例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:

  1. if ($http_user_agent ~ MSIE) {
  2. rewrite ^(.*)$ /nginx-ie/$1 break;
  3. }

目录自动加“/”

  1. if (-d $request_filename){
  2. rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
  3. }

禁止htaccess

  1. location ~/\.ht {
  2. deny all;
  3. }

禁止多个目录

  1. location ~ ^/(cron|templates)/ {
  2. deny all;
  3. break;
  4. }

禁止以/data开头的文件
可以禁止/data/下多级目录下.log.txt等请求;

  1. location ~ ^/data {
  2. deny all;
  3. }

禁止单个目录
不能禁止.log.txt能请求

  1. location /searchword/cron/ {
  2. deny all;
  3. }

禁止单个文件

  1. location ~ /data/sql/data.sql {
  2. deny all;
  3. }

给favicon.ico和robots.txt设置过期时间;
这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志

  1. location ~(favicon.ico) {
  2. log_not_found off;
  3. expires 99d;
  4. break;
  5. }
  6. location ~(robots.txt) {
  7. log_not_found off;
  8. expires 7d;
  9. break;
  10. }

设定某个文件的过期时间;这里为600秒,并不记录访问日志

  1. location ^~ /html/scripts/loadhead_1.js {
  2. access_log   off;
  3. root /opt/lampp/htdocs/web;
  4. expires 600;
  5. break;
  6. }

文件反盗链并设置过期时间
这里的return 412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求
“rewrite ^/ http://leech.divmy.com/leech.gif;”显示一张防盗链图片
“access_log off;”不记录访问日志,减轻压力
“expires 3d”所有文件3天的浏览器缓存

  1. location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
  2. valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;
  3. if ($invalid_referer) {
  4. rewrite ^/ http://leech.divmy.com/leech.gif;
  5. return 412;
  6. break;
  7. }
  8. access_log   off;
  9. root /opt/lampp/htdocs/web;
  10. expires 3d;
  11. break;
  12. }

只充许固定ip访问网站,并加上密码

  1. root  /opt/htdocs/www;
  2. allow   208.97.167.194;
  3. allow   222.33.1.2;
  4. allow   231.152.49.4;
  5. deny    all;
  6. auth_basic “C1G_ADMIN”;
  7. auth_basic_user_file htpasswd;

将多级目录下的文件转成一个文件,增强seo效果
/job-123-456-789.html 指向/job/123/456/789.html

  1. rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;

将根目录下某个文件夹指向2级目录
如/shanghaijob/ 指向 /area/shanghai/
如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/

  1. rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

上面例子有个问题是访问/shanghai 时将不会匹配

  1. rewrite ^/([0-9a-z]+)job$ /area/$1/ last;
  2. rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

这样/shanghai 也可以访问了,但页面中的相对链接无法使用,
如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。

那我加上自动跳转也是不行咯
(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果

  1. if (-d $request_filename){
  2. rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
  3. }

知道原因后就好办了,让我手动跳转吧

  1. rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;
  2. rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

文件和目录不存在的时候重定向:

  1. if (!-e $request_filename) {
  2. proxy_pass http://127.0.0.1;
  3. }

域名跳转

  1. server
  2. {
  3. listen       80;
  4. server_name  jump.88dgw.com;
  5. index index.html index.htm index.php;
  6. root  /opt/lampp/htdocs/www;
  7. rewrite ^/ http://www.88dgw.com/;
  8. access_log  off;
  9. }

多域名转向

  1. server_name  www.7oom.com/  www.divmy.com/;
  2. index index.html index.htm index.php;
  3. root  /opt/lampp/htdocs;
  4. if ($host ~ “c1gstudio\.net”) {
  5. rewrite ^(.*) http://www.7oom.com$1/ permanent;
  6. }

三级域名跳转

  1. if ($http_host ~* “^(.*)\.i\.c1gstudio\.com$”) {
  2. rewrite ^(.*) http://top.88dgw.com$1/;
  3. break;
  4. }

域名镜向

  1. server
  2. {
  3. listen       80;
  4. server_name  mirror.c1gstudio.com;
  5. index index.html index.htm index.php;
  6. root  /opt/lampp/htdocs/www;
  7. rewrite ^/(.*)  last;
  8. access_log  off;
  9. }

某个子目录作镜向

  1. location ^~ /zhaopinhui {
  2. rewrite ^.+ http://zph.divmy.com/ last;
  3. break;
  4. }

discuz ucenter home (uchome) rewrite

  1. rewrite ^/(space|network)-(.+)\.html$ /$1.php?rewrite=$2 last;
  2. rewrite ^/(space|network)\.html$ /$1.php last;
  3. rewrite ^/([0-9]+)$ /space.php?uid=$1 last;

discuz 7 rewrite

  1. rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2 last;
  2. rewrite ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3 last;
  3. rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3 last;
  4. rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3 last;
  5. rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3 last;
  6. rewrite ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2 last;

给discuz某版块单独配置域名

  1. server_name  bbs.c1gstudio.com news.c1gstudio.com;
  2. location = / {
  3. if ($http_host ~ news\.divmy.com$) {
  4. rewrite ^.+ http://news.divmy.com/forum-831-1.html last;
  5. break;
  6. }
  7. }

discuz ucenter 头像 rewrite 优化

  1. location ^~ /ucenter {
  2. location ~ .*\.php?$
  3. {
  4. #fastcgi_pass  unix:/tmp/php-cgi.sock;
  5. fastcgi_pass  127.0.0.1:9000;
  6. fastcgi_index index.php;
  7. include fcgi.conf;
  8. }
  9. location /ucenter/data/avatar {
  10. log_not_found off;
  11. access_log   off;
  12. location ~ /(.*)_big\.jpg$ {
  13. error_page 404 /ucenter/images/noavatar_big.gif;
  14. }
  15. location ~ /(.*)_middle\.jpg$ {
  16. error_page 404 /ucenter/images/noavatar_middle.gif;
  17. }
  18. location ~ /(.*)_small\.jpg$ {
  19. error_page 404 /ucenter/images/noavatar_small.gif;
  20. }
  21. expires 300;
  22. break;
  23. }
  24. }

jspace rewrite

  1. location ~ .*\.php?$
  2. {
  3. #fastcgi_pass  unix:/tmp/php-cgi.sock;
  4. fastcgi_pass  127.0.0.1:9000;
  5. fastcgi_index index.php;
  6. include fcgi.conf;
  7. }
  8. location ~* ^/index.php/
  9. {
  10. rewrite ^/index.php/(.*) /index.php?$1 break;
  11. fastcgi_pass  127.0.0.1:9000;
  12. fastcgi_index index.php;
  13. include fcgi.conf;
  14. }

另外这里还有一个工具可以直接把apache规则转化为nginx规则

http://www.anilcetin.com/convert-apache-htaccess-to-nginx/

参考:

http://wiki.nginx.org/NginxChsHttpRewriteModule

http://blog.csdn.net/cnbird2008/archive/2009/08/04/4409620.aspx

http://www.divmy.com/

使用shadowsocks翻墙

1,安装Shadowsocks
2,获取免费的Shadowsocks账号(http://freehide.co.uk/free-shadowsocks/或是https://www.ss-link.com/my/free)或是购买(https://shadowsocks.com/或是https://www.ss-link.com/my/free)
3,使用Shadowsocks客户端添加代理
4,如果用chrome翻墙,则安装端口代理插件:SwitchyOmega
5,代理使用SOCKS5协议,服务器为127.0.0.1,端口为1080
6,代理使用自动切换,增加Rule List URL:http://www.woodbunny.com/gfwlist.txt

linux 查看文件夹下的文件个数(当前目录的文件数)

ls -l |grep “^-“|wc -l

find ./company -type f | wc -l

查看某文件夹下文件的个数,包括子文件夹里的。

ls -lR|grep “^-“|wc -l

查看某文件夹下文件夹的个数,包括子文件夹里的。

ls -lR|grep “^d”|wc -l

说明:

ls -l

长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)

grep “^-”

这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

wc -l

统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于

一行信息对应一个文件,所以也就是文件的个数。

Linux查看文件夹大小

du -sh 查看当前文件夹大小

du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序

du -sk filename 查看指定文件大小

emma 中文乱码解决方法(现在使用的Navicate)

ubuntu mysql  emma中文乱码问题解决

emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python)。

apt-get安装emma

sudo apt-get install emma

 

ubuntu的apt-get 安装emma是在/usr/share/emma目录下面。

cd /usr/share/emma/emmalib

sudo vim __init__.py

找到

“db_encoding”: “latin1”

改为

“db_encoding”: “utf8”

保存退出。

如果你已经安装完毕并且运行过emma,程序就会创建 ~/.emma/emmarc文件,保存配置。所以可以更改这里的配置文件,或者像下面直接修改emma的python源文件。
vim ~/.emma/emmarc
找到
db_encoding=latin1
改为
db_encoding=utf8
重新运行emma,此时发现还是乱码,在执行所有的sql语句之前加入这条sql语句,
set names utf8
但每次新用户都要改配置文件,以及执行新sql前都加这个语句,岂不是很费力,直接修改emma的源文件,来实现,新创建的emmrc配置文件就是utf8,和当选择数据库时,自动的执行“set names utf8” 语句。

以后新创建的配置文件默认就会是utf8的解码了,我想在连接数据之后就执行 “set names utf8” 语句,所以

sudo vim /usr/share/emma/emmalib/mysql_host.py

但是我下边这一步没执行成功,写完之后,emma 就没发启动了,

跳到155行左右的_use_db(self, name, do_query=True)函数哪里,改成如下

def _use_db(self, name, do_query=True):

if self.current_db and name == self.current_db.name: return

if do_query:

self.query(“use `%s`” % name, False)

self.query(“set names utf8”,  False)

try:

self.current_db = self.databases[name]

except KeyError:

print “Warning: used an unknown database %r! please refresh host!/n%s” % (name, “”.join(traceback.format_stack()))

个人机设置不用每次sudo输入密码

打开上网客户端、新立得,这些涉及到系统的都要输入密码,对于我们大多数人来说,用Linux无非是做桌面应用,对安全性没必要搞得跟服务器一些。

解决办法一:

在启动时进入安全模式,这时是用root登录的,执行:

chmod 740 /etc/sudoers

然后打开/etc/sudoers这个文件,把最后一行:

%admin ALL=(ALL)
改为
%%admin ALL=(ALL) NOPASSWD: NOPASSWD: ALL

保存退出。

执行:
chmod 0440 /etc/sudoers

reboot your ubuntu.OK!

解决方法二:

Ubuntu默认不能直接用root帐户登录,必须从第一个创建的用户(既安装时创建的那个用户)通过su或sudo来获得root权限。在Ubuntu中对系统进行操作很多时候都要使用这个命令,由此可见对于新来说很有必要来认识这个命令。这或许不太方便,但这样增加了安全性,避免用户由于误操作而损坏系统。

sudo
格式:sudo [其它命令]

sudo既为Super user do的意思。sudo在这个过程中只起一个调用root用户的作用,本次操作完成后,其作用就消失,如果要使用调用root权限操作的命令就必须再次使用sudo。些过程中系统会要求用户输入密码,此密码就是安装系统时你输入你那个密码,注意:这个密码在输入你时候不会像在Windows里输密码那样输入一位密码就有一个*号,这样的目的就是为了使密码更安全,因为不知道你密码有几位这样无疑给密码破译者增加了难度。:)

例:

我们要更改当前目录下upload.tar.gz的权限就要用到sudo。如果还要对当前目录下的另外一个文件eva.tar.gz更改权限就要再次用到sudo。

ownlinux@server:/var/www$ sudo chmod 777 upload.tar.gz
[sudo] password for ownlinux: (此时输入你的密码)
ownlinux@server:/var/www$ sudo chmod 777 eva.tar.gz
[sudo] password for ownlinux:

补充:

通常我们并不以root身份登录,但是当我们执行某些命令 (command)时需要用到root权限,我们通常都是用”sudo command”来执行command。由于使用Ubuntu,所以经常都都用sudo,而使用sudo时,又得输入密码,所以我就寻找sudo不输入密码的方法。前阵子google了一下,很容容易找到一个方法,但是对其不够理解,今天,仔细研究了一下/etc/sudoers这个文件,对于如何实现自己的需求就非常清楚了。网上说看到的资料往往写得不清楚,所以我根据自己的需求好好整理了一下。

假设我的用户名为jay(属于 admin组),使sudo不用密码的方法如下。
运行命令:sudo visudo 或者 sudo vi /etc/sudoers,如果vi来编辑,则保存时记得用”wq!”强制保存,否则会提示只读不能保存的。
就会编辑/etc/sudoers这个文件。 默认情况我们会看到有”%admin ALL=(ALL) ALL”一句话,就是允许admin组在所有主机上执行所有命令,当然是需要passwd的。

1. 如果想把admin组的用户都sudo不用密码那么可以将这一行换为:”%admin ALL=(ALL) NOPASSWD: NOPASSWD ALL”即可。
2. 如果仅仅想让jay用户sudo不需密码,则可添加”jay ALL = NOPASSWD: ALL”这样一行。
3. 如果让jay用户sudo不用密码即可执行某几个命令,可这样写”jay ALL = NOPASSWD: /usr/bin/abc.sh, /usr/sbin/adduser”
4. 欲知其他更多配置方式,请运行”man sudoers”看帮助文档吧。

注意:我自己的一个配置没生效,找原因还找了阵子,写到这里吧。

我添加”jay ALL = NOPASSWD: ALL”这样一行;但是,jay执行sudo时还是需要输入密码,这是为什么?

原来是,我这一行在”%admin ALL=(ALL) ALL”组策略之前前,后面的组配置覆盖了前面的配置,而jay属于admin组,所以需要密码。

这时,只需要将%admin行用#注释掉即可。OK!然后立马就生效了,可能执行sudo时系统都会去读取/etc/sudoers的,所以立即就生效了。

另外,附带公司某服务器的一个/etc/sudoers配置:

复制代码

代码如下:

Defaults env_reset
Defaults syslog=auth
Defaults log_year,logfile=/var/log/sudo.log
User_Alias ABC = abc
Cmnd_Alias DEFAULT=/bin/*,/sbin/ldconfig,/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel,/bin/rpm,/usr/bin/yum,/sbin/service,/sbin/chkconfig,sudoedit /etc/rc.local,sudoedit /etc/hosts,sudoedit /etc/ld.so.conf,/bin/mount,sudoedit /etc/exports,/usr/bin/passwd [!-]*,!/usr/bin/passwd root,/bin/su – [!-]*,!/bin/su – root,!/bin/su root,/bin/bash,/usr/sbin/dmidecode,/usr/sbin/lsof,/usr/bin/du,/usr/bin/python,/usr/sbin/xm,sudoedit /etc/profile,sudoedit /etc/bashrc,/usr/bin/make,sudoedit /etc/security/limits.conf,/etc/init.d/*,/usr/bin/ruby
ABC ALL=(ALL)NOPASSWD:DEFAULT

通过修改/etc/sudoers

sudo vi /etc/sudoers

把/etc/sudoers里面最后一行

%admin ALL=(ALL)

改为

%admin ALL=(ALL) NOPASSWD: NOPASSWD: ALL

然后强制保存 wq 就OK

上面说的并不准确,要注意以下几点。

编辑/etc/sudoers文件使用“超级用户终端”,而不能使用普通的终端。“超级用户终端”启动通过右键“编辑菜单”命令添加。

编辑完之后使用wq!而不是wq退出