快速操作Linux终端命令行的快捷键列表

快速操作Linux终端命令行的快捷键列表

操作组合键 说明 注释(自己猜想)
移动光标:
Ctrl + a 光标回到命令行首 a = ahead
Ctrl + e 光标回到命令行尾 e = end
Ctrl + b 光标向行首移动一个字符 b = backwards
Ctrl + f 光标向行尾移动一个字符 f = forwards
Alt + b 光标向行首移动一个单词
Alt + f 光标向行尾移动一个单词
删除命令:
Ctrl + w 向行首删除一个单词 w = word
Alt + d 向行尾删除一个单词 d = delete
Ctrl + k 删除光标处到行尾的字符
Ctrl + u 删除整个命令行文本字符
Ctrl + h 向行首删除一个字符 h = head
Ctrl + d 向行尾删除一个字符 d = delete
查找历史命令:
Ctrl + p 上一个使用的历史命令 p = previous
Ctrl + n 下一个使用的历史命令 n = next
Ctrl + r 快速检索历史命令 r = retrieve
其它:
Ctrl + i 相当于Tab键,命令、文件名自动补全
Ctrl + m 相当Enter键,执行命令
Ctrl + o 相当于Ctrl + m
Ctrl + t 交换光标所在字符和其前的字符
Ctrl + y 粘贴Ctrl+u,Ctrl+k,Ctrl+w删除的文本
Ctrl + s 使终端发呆,静止,可以使快速输出的终端屏幕停下来
Ctrl + q 退出Ctrl+s引起的发呆
Ctrl + z 使正在运行在终端的任务,运行于后台 可用fg恢复
Ctrl + c 中断终端中正在执行的任务
Ctrl + d 在空命令行的情况下可以退出终端 和上面的同命令但不同结果

ubuntu个人机使用到的一些软件

个人目前使用ubuntu,主要是用来进行web开发,在安装完ubuntu后,可以看到默认是有浏览器firefox,办公套件LiBreOffice,电邮客户端Thunderbird Mail,好了接下来说说我为了个人需要安装一些软件,仅供参考。
  • 通迅相关
  1. QQ International 这个不是官方发布的客户端,具体开发者我也不知道是谁,但我在使用ubuntu 13.x 的时候就使用的这个客户端,到目前使用的16.04LTS版都没有出现过问题,应该具备QQ2013的所有功能,办公使用足够了。如果有人需要这个deb包可以留言回复,我会发送文件到你邮箱并协助你安装。注意:需要先安装Wine(sudo apt install wine).

  2. Electronic WeChat 微信客户端,这个也不是腾讯官方发布的客户端,是一个开源项目。具体安装方法在github上面写的非常清楚,当然,如果你有不明白的地方,也可以回复我,我会尽我所能帮助你。


  • 输入法
  1. fcitx ubuntu有自带的ibus,不过我更喜欢使用fcitx,使用它的五笔拼音,打字嗖嗖的。

  • 浏览器
  1. google-chrome-stable安装文档

  2. chromium chromium是开发版,各种新功能都会有,但ubuntu的包却是很落后,刚开始我用的是chromium,后台更换为了chrome。


  • 音乐
  1. 厉害了word我的网易,网易云音乐有专门ubuntu对应版本的包,一般人我不告诉他,16.04LTS亲测能用,一直使用的网易云音乐

  • 虚拟机
  1. VirtualBox 不管是为了在Linux上使用Windows(Linuxer的痛)还是为了统一开发环境使用vagrant,都需要安装VirtualBox。

  • 数据库客户端
  1. emma 最开始我一直使用的emma,界面简洁,查看方便,能使用SQL语句,相对功能会少一些,且apt安装后有个小问题,不支持中文显示,解决方法

  2. navicat for mysql navicat对比其它Linux下Mysql客户端确实强大太多了,常用的各种功能自不在话下,还支持视图,函数,事件等等,下载解压后进入目录,运行脚本启动即可,但navicat也有个小问题,它不是免费的,只有15天试用期,不过你可以到目录.navicat下把user.reg删掉(cd ~/.navicat/),然后重启,你就又有15天的试用期了。


  • markdown编辑器
  1. Haroopad 界面美观,清晰,支持实时预览等很多功能,还有我最舒适的vim操作模式,我只使用了它的markdown语法编辑功能,目前只能导出HTML格式文件,下载后点击安装即可,此文就是通过这个软件编写的。

  2. Atom A hackable text editor for the 21st Century,Atom编辑器功能更强大,放到这个模块下面,其实是不合理的,因为它不仅仅是一个markdown编辑器,更是一个功能强大的文本编辑器,由于我使用的是(G)vim,所以只是把Atom当作写markdown文档的工具在使用,使用Atom的原因是家里电脑使用的是ArchLinux,ArchLinux上没有Haroopda的包,不得已找到了Atom,才发现它也非常强大,有超多第三方插件可供选择使用,除了自带插件,我搜索下载了支持vim的vim-mode,md文件转换为pdf的markdown-pdf,此次更新文件使用Atom修改。


  • 图片编辑工具
  1. GIMP Image Editor 是一个很强大的图片编辑工具,据说是Linux下的PhotoShop,当时我需要制作一个自己博客的logo,此网站的logo就是使用这个软件制作的,最后就找到了这个软件,目前使用了此软件很小一部分功能。

  2. gnome-screeshot 顺带说一下gnome自带的截图工具,我自己在系统设置,键盘,快捷方式里设置了它的快捷键ctrl + alt + a对应gnome-screenshot -a,此后截图就非常方便了。


  • 开发相关
  1. PHP7 Nginx mariaDB就不用说了.

  2. vim-gtk 我之前使用的vim-gnome编辑器,后来在每次关闭vim时,都会提示一个错误,在搜索这个问题时,看到Stack Overflow上别人推荐使用vim-gtk,使用下来一点不差.

  3. Composer PHP 的一个依赖管理工具,安装文档.


  • 科学上网
  1. Shadowsocks科学上网工具,结合浏览器插件SwitchyOmega或是终端代理工具ProxyChains.注意:直接apt install shadowsocks安装的可能不支持rc-md5,可先安装pip(sudo apt install python-pip),然后用pip安装(pip install shadowsocks).

  • 系统设置
  1. 使用monaco字体,参考github一篇文档,clone或下载文件,请仔细阅读README.md,最后找到其中为Ubuntu定制的安装脚本。运行命令./install-font-ubuntu.sh https://github.com/todylu/monaco.ttf/blob/master/monaco.ttf?raw=true,文档里提供的地址已失效。

  2. Unity Tweak Tool设置系统工具,可以在Ubuntu应用商店搜索安装,安装后可以使用第一步里安装好的monaco字体.


  • 其它相关问题
  1. 配置thunderbird,qq企业邮箱服务时要补全为exmali.qq.com

  2. 字的问题,一些字体显示不正确。
    /ect/honts/conf.d/64-language-selector-prefer.conf 有以下内容:

<alias>
      <family>sans-serif</family>
      <prefer>
         <family>Noto Sans CJK JP</family>
         <family>Noto Sans CJK SC</family>
         <family>Noto Sans CJK TC</family>
      </prefer>
   </alias>
   <alias>
      <family>monospace</family>
      <prefer>
         <family>Noto Sans Mono CJK JP</family>
         <family>Noto Sans Mono CJK SC</family>
         <family>Noto Sans Mono CJK TC</family>
      </prefer>
   </alias>

你要做的就是把 JP 换到最后面,然后重启电脑。

vsftpd安装和使用

刚才想安装一个博客相关的插件,结果提示需要使用到ftp进行文件的安装,才想到我服务器没有搭建ftp服务,于是有了这篇文章。这一篇是新写的,不是从以前的云笔记迁移过来的。

首先判断你服务器上是否安装了vsftpd

rmp -q vsftpd

如果提示你没有安装,则使用以下命令安装

yum -y install vsftpd

安装完成之后就启动vsftpd服务

service vsftpd start

到vsftpd的主配置文件里面, /etc/vsftpd/vsftpd.conf

把这个改为NO 默认是YES (改为NO 就是禁止匿名用户登录,不需要注释)

把ftp用户限制在自己的家目录,否则太危险了

默认是注释掉的,把#号去掉 然后重启vsftpd

创建ftp用户,创建的时候ftp用户家目录根据自己要求指定,比如我的是/usr/share/nginx/html目录。

useradd -s /sbin/nologin -d /usr/share/nginx/html  wanlianbo

(注:wanlianbo这个用户只能连接ftp无法登录系统,默认家目录是在/usr/share/nginx/html 文件夹下面)

给wanlianbo这个用户设置密码

passwd wanlianbo

给这个用户加上之前设定的家目录写的权限,不然无法上传文件

chmod o+w /usr/share/nginx/html

重启vsftpd服务,并且下次自动启动

service vsftpd restart

chkconfig vsftpd on

检查防火墙是否开启,开启需要关闭防火墙

service iptables status

service iptables stop

然后用软件来链接ftp测试一下

我使用的是firefox的一个插件FireFTP,可以在Extension里搜索安装,然后在自定义里把图标显示在菜单栏里。

点击打开后,创建一个连接目标,如下图:

把需要连接的目标机器ip和刚才创建的ftp用户名和密码填入,自己取一个连接名称点击OK即可。如下图:

选中刚才创建的连接,点击connect:

连接时,下面的控制台会输出信息,成功后,就能看到给用户设定的家目录下的文件了:

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&amp;controller=$1&amp;action=$2&amp;$3 last;
  3. rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&amp;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/

科学上网浏览器客户端

http://blog.blianb.com/wp-content/uploads/2017/11/auto_proxy.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 查看指定文件大小