bash中容易搞混的几种括号运算符

$()

取得括号内运行命令的标准输出,作为当前命令行的命令或参数,其效果和``相同。
举例:mkdir $(date +%F)

$(())

执行整数运算。作用和let相似
举例:var=$((10+20))
另一种整数运算符$[]现已被标记为过时,会在将来版本中移除。

(())

可在其中使用直观的数学比较运算符,比test命令的选项 -lt -gt等要直观。
举例:

root@debian:~# (( 1 > 0 )) && echo yes
yes
root@debian:~# (( 1 > 10 )) && echo yes
root@debian:~#

[[]]

test命令或[的增强版,bash专有扩展,在sh中不支持。可以用扩展正则表达式或通配符来比较字符串。
举例:正则表达式:

root@debian:~# [[ "123456" =~ ^[0-9]+$ ]] && echo yes
yes
root@debian:~# [[ "123456X" =~ ^[0-9]+$ ]] && echo yes
root@debian:~#

举例:通配符:

root@debian:~# [[ 'abc.txt' == abc.* ]] && echo yes
yes
root@debian:~# [[ 'abc.txt' == *.txt ]] && echo yes
yes
root@debian:~# [[ 'abc.txt' == *.jpg ]] && echo yes
root@debian:~#

经测试等号右边的模式不能用引号括起来,否则会识别失败

新装Debian 7 重启后显示 error: file ‘/boot/grub/i386-pc/normal.mod’ not found的解决办法

新机支持EFI bios,且系统是64位,会自动安装EFI版的GRUB,不管你是否启用了EFI引导。解决办法是再次启动安装镜像,并且选择”高级选项(Advanced options)“中的”救援模式(rescue mode)“,选择正确的你所安装的根分区/的设备,并进入命令行模式。
然后:

bash  #我比较喜欢用bash,默认是sh
mount -a #把没挂载的设备都挂上
aptitude -y remove grub-efi-amd64 #删除EFI版的GRUB
aptitude -y install grub-pc #安装传统PC版GRUB
rm -rf /boot/grub/*
grub-install /dev/sdX #重新初始化GRUB到启动磁盘
update-grub #重新生成启动项菜单,等同于grub-mkconfig > /boot/grub/grub.cfg

#然后重启并从硬盘引导就OK了

我的gVim配置

" 语法高亮
syntax on

" 自动缩进
set ai

" 显示行号
set nu

" tab宽度
set tabstop=4

" 不要自动备份文件
set nobackup

" 不自动换行
set nowrap

" 字体名称、高度、字符集
set gfn=Consolas:h11:cANSI:qDRAFT

" 默认文件编码
set fileencoding=utf-8

" 文件编码
set fileencodings=utf-8,cp93

" 不响应鼠标
set mouse=
set ttymouse=

" 不使用系统剪贴版
set clipboard=

RHEL/CENTOS 上配置可写入型tftp的方法

  1. tftp是xinet服务,所以安装tftp服务至少需要安装xinetd和tftp-server两个包。另外tftp包为tftp客户端程序,可用于测试。
  2. 编辑tftp配置文件/etc/xinetd.d/tftp,确保命令选项中有-c,意思是可以上传(创建)新文件,如果没有此参数,则只能覆盖现有文件(如果权限足够的话)。另外disable当然要设为no,否则服务不会启用。
  3. 设置SELinux放行写入操作:setsebool -P tftp_anon_write=1
  4. 设置tftp目录权限,开放所有权限,RHEL6/CENTOS6的目录默认为/var/lib/tftpboot,RHEL5/CENTOS5则为/tftpboot:
chmod 777 /var/lib/tftpboot

RHEL/CENTOS 下启用vsftpd匿名上传可能需要做的操作

1、修改文件系统权限

chmod -R 777 /var/ftp/pub/

2、使用可写入型的SELinux Context值

semanage fcontext -a -t public_content_rw_t '/var/ftp/pub(/.*)?' #semanage来自于policycoreutils-python包
restorecon -R /var/ftp/pub/

3、修改SELinux布尔值放行匿名上传(写入)

setsebool -P allow_ftpd_anon_write=1

4、修改/etc/vsftpd/vsftpd.conf配置文件

anonymous_enable=YES    #启用匿名模式
anon_upload_enable=yes   #允许匿名用户上传文件
anon_mkdir_write_enable=yes  #允许匿名用户创建目录
anon_other_write_enable=yes   #允许匿名用户删除、移动、修改文件权限等其他修改操作
write_enable=YES    #全局可写开关,默认已开启(Debian系默认关闭)
chown_uploads=YES    #可选,对于匿名用户上传的文件,是否指定其所有者(不指定则为ftp)
chown_username=ftp    #如果chown_uploads设为YES,指定哪个用户为匿名上传文件的所有者
chown_upload_mode=644   #貌似效果不如anon_umask
anon_umask=000     #匿名上传文件的umask值,为8进制,必须以0开头,chown_uploads=NO时有效
local_umask=000     #本地用户上传文件的umask值,为8进制,必须以0开头,chown_uploads=YES时有效
no_anon_password=YES  #匿名用户无需密码验证

seccomp_sandbox=NO    #某些发行版上传出现530报错可以尝试这个参数