分类 Unix 下的文章

批量建立目录

先看看示例吧:

[wind@windphp test]$ mkdir {1..9}
[wind@windphp test]$ ls
1  2  3  4  5  6  7  8  9
[wind@windphp test]$ mkdir {a..z}
[wind@windphp test]$ ls
1  2  3  4  5  6  7  8  9  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z

首先是建立1-9的9个目录, 然后是是a-z的26个目录, 这里的范围是可以自定的, 当然了, 范围要合理, 比如字母范围如果是双数就不行了哦.

如果是乱序的, 就麻烦点了. 如下:

[wind@windphp test]$ mkdir {a,1,5}
[wind@windphp test]$ ls
1  5  a

{}大括号的用法(把文件/目录备份/复制/在文件所在目录下)

先看看示例代码:

[wind@windphp ~]$
[wind@windphp ~]$ mkdir -p test/a
[wind@windphp ~]$ cd test/
[wind@windphp test]$ ls
a
[wind@windphp test]$ mv /home/wind/test/{a,b}
[wind@windphp test]$ ls
b

上述代码将/homw/wind/test/目录下的a目录重命名成b, 再看:

[wind@windphp test]$ touch a.txt
[wind@windphp test]$ cp /home/wind/test/a.txt{,.bak}
[wind@windphp test]$ ls
a.txt  a.txt.bak  b

上述代码将/home/wind/test/目录下的a.txt备份成a.txt.bak, 不过也可以写成:

cp /home/wind/test/{a.txt,a.txt.bak}

这样就更清晰, 好理解了. 至于详细的使用可以自己多试试.

Linux 技巧:让进程在后台可靠运行的几种方法

原文链接: Linux 技巧:让进程在后台可靠运行的几种方法

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。

nohup/setsid/&

场景:
如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?

hangup 名称的来由
在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。

解决方法:

我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
1. nohup

- 阅读剩余部分 -

原子操作

引用百度百科: 原子操作

所谓原子操作是指不会被线程调度机制打断的操作;

这种操作一旦开始, 就一直运行倒结束, 中间不会有任何 context switch (切换到另一个线程).

通俗点讲就是一份资源同时只能被一个进程(线程/...)操作.

linux下nginx+svn

因为没有什么可以定制的, 所以svn直接使用系统自带的包管理软件安装, 以centos系列为例, 命令如下:

yum install subversion

然后是nginx的安装:

mkdir -p /opt/soft
groupadd web
useradd http -g web -s /sbin/nologin
cd /opt/soft
wget http://sourceforge.net/projects/pcre/files/pcre/8.12/pcre-8.12.tar.gz
wget http://www.openssl.org/source/openssl-1.0.0d.tar.gz
tar zxvf pcre-8.12.tar.gz
tar zxvf openssl-1.0.0d.tar.gz
tar zxvf nginx-0.8.54.tar.gz
cd nginx-0.8.54
./configure --prefix=/opt/nginx --user=http --group=web --with-http_stub_status_module --with-http_ssl_module --with-md5=/usr/lib/ --with-pcre=/opt/soft/pcre-8.12 --with-openssl=/opt/soft/openssl-1.0.0d
make
make install

- 阅读剩余部分 -

MFS部署详解

本文算是我学习MFS的笔记吧, 备忘

没有使用FastDFS的原因是它所有的操作都要调用api, 不能指定命名格式, 或许它更适合网盘类?;
虽然现在已经有nginx和apache模块了, 虽然性能要比mfs好点, 考虑得到易用性, 工作量(系统已经成型, 有着自己的命名规范)的问题还是选择了mfs

需要用到的软件, 最新下载地址:

<a href="http://sourceforge.net/projects/moosefs/"
target="_blank">http://sourceforge.net/projects/moosefs/ <a
href="http://sourceforge.net/projects/fuse/"
target="_blank">http://sourceforge.net/projects/fuse/

这里我使用的版本为:

mfs-1.6.20-2.tar.gz
fuse-2.8.5.tar.gz

安装详解商定如下:
首先全部关闭防火墙, 或者让9425, 9421, 9420通过

主控服务器 Master:             192.168.1.160
备份服务器 Metalogger:         192.168.1.161
存储服务器1 Chunk Servers 1:   192.168.1.162
存储服务器2 Chunk Servers 2:   192.168.1.163

路径:
编译路径 /opt/soft
安装路径 /opt/mfs
日志路径 /data/mfs
数据路径 /mnt/mfschunks

用户和组:
组 mfs
用户 mfs

- 阅读剩余部分 -

原来ls也可以这样用

一般人都知道, ls是列表文件, ll是详细列表, ls -a是所有的也包括隐藏文件, 但是很少有人知道 ls -A
其实很简单, 看代码:

freebsd# ls -a
.    ..    bin    etc    include    info    lib    libdata    libexec    man    sbin    share    www
freebsd# ls -A
bin    etc    include    info    lib    libdata    libexec    man    sbin    share    www

看出什么来了吧, ls -A不会显示"."和"..", 他们分别代表当前和上级目录, 这个就人尽皆知了

FreeBSD的错误Enter full pathname of shell or RETURN for /bin/sh

这是我亲身体验的错误, 发生这个错误前我曾非法关机(直接断电源, 惭愧...)
错误界面:

Trying to mount root from ufs:/dev/ad0s1a
/erc/rc.conf : 16 : Syntax error : Unterminated quoted string
Enter full path name of shell or RETURN for /bin/sh:
#

首先我没有去细看错误信息, 当我看到:

Enter full path name of shell or RETURN for /bin/sh:

的时候, 我的第一反应是 path坏鸟, 然后我就动手去改PATH, 可是万恶的bsd一直提示: readonly, 崩溃...

遂baidu, 无果(全都是复制别人的, 还复制错, 甚至我在俩论坛发现一样的帖子, 一样的回答, 不一样的语言, 简体和繁体)
再google, 亦无果;
于是骂娘之余, reboot然后瞅着那个界面半天, 突然发现:

- 阅读剩余部分 -