实用 Shell 文档

Shell 文档

ChinaUnix上大神網中人总结的Shell十三问?强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点。每一问都写得非常精彩。

同样是ChinaUnix上,wingger大神整理的Shell基础二十篇。这份文档涉及的内容比较多,我没记错的话应该有很多命令的用法,而且配备实际使用的例子,对初学者帮助甚大。

Shell脚本专家指南也是一本不可多得的好书,我是之前在学校的时候买的这本书。上面都是作者实际工作中的经验总结,你可以从中学到很多其它书上学不到的实践知识。千万不要被专家两个字吓住了,书名的意思是专家给你总结的学习指南。

注:mingxinglai也在他的博客文章shell脚本学习材料种整理了很多实用的资料。

正则表达式

我个人学习正则表达式是从正则表达式30分钟入门教程开始的,这份文档让我了解了正则表达式的一些基础术语和基本的用法。

查看全文

简洁的 Bash Programming 技巧续篇

简洁的 Bash Programming 技巧系列文章专门介绍Bash编程中一些简洁的技巧,帮助大家提高平时 Bash 编程的效率。继上一篇文章发布后,收到很多读者的反响,所以我决定继续将自己学到的一些新的技巧更新在这篇续篇中,当然也希望其它同学也能一起分享你们的技巧。续篇中有部分的内容已经偏离bash编程了,而是命令行下的技巧,题目我暂时不改,请见谅。

1. bash中alias的使用

alias其实是给常用的命令定一个别名,比如很多人会定义一下的一个别名:

alias ll='ls -l'

以后就可以使用ll,实际展开后执行的是ls -l。现在很多发行版都会带几个默认的别名,比如:

alias grep='grep --color=auto'  # 带颜色显示
alias ls='ls --color=auto' # 同上
alias rm='rm -i'  # 删除文件需要确认

alias在某些方面确实提高了很大的效率,但是也是有隐患的,这点可以看我以前的一篇文章终端下肉眼看不见的东西。那么如何不要展开alias,而是用本来的意思呢?答案是使用转义:

\ls
\grep

在命令前面加一个反斜杠后就可以了。

查看全文

简洁的 Bash Programming 技巧

简洁的 Bash Programming 技巧这一系列文章专门介绍Bash编程中一些简洁的技巧,帮助大家提供 Bash 编程的效率,目前该系列已经有三篇文章,有兴趣的同学可以继续阅读其它两篇续篇(一)(二)

下面这几条是我自己在写shell代码的时候,比较喜欢的几种写法,抛砖引玉。

1. 检查命令执行是否成功

第一种写法,比较常见:

echo abcdee | grep -q abcd

if [ $? -eq 0 ]; then
    echo "Found"
else
    echo "Not found"
fi

简洁的写法:

if echo abcdee | grep -q abc; then
    echo "Found"
else
    echo "Not found"
fi

当然你也可以不要if/else,不过这样可读性比较差:

[Sun Nov 04 05:58 AM] [kodango@devops] ~/workspace 
$ echo abcdee | grep -q abc && echo "Found" || echo "Not found"
Found

2. 将标准输出与标准错误输出重定向到/dev/null

第一种写法,比较常见:

grep "abc" test.txt 1>/dev/null 2>&1

常见的错误写法:

grep "abc" test.txt 2>&1 1>/dev/null

查看全文

通过 SSH 访问 VirtualBox Guest

首先在VBox Guest中安装SSH相关软件包:

[kodango@devops ~]$ sudo pacman -S openssh

启动SSH服务,并设置为开机自动启动:

[kodango@devops ~]$ sudo systemctrl start sshd.service
[kodango@devops ~]$ sudo systemctrl enable sshd.service

设置端口转发:
ArchLinux Port Forward

通过SSH连接到指定端口:

Host 'localhost' resolved to 127.0.0.1.
Connecting to 127.0.0.1:3022...
Connection established.
Escape character is '^@]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Sun Oct 21 19:57:26 2012
[kodango@devops ~]$ ls
share

virtualboxservice可以在Windows下以服务的形式启动VBox Guest。

ArchLinux 10.06 安装

电脑里没有一个可以用的Linux操作系统真是不方便,打算在Vbox中安装一个ArchLinux。连续错过了好几个ArchLinux的版本,这冷安装感觉有很多不一样的地方。最明显的莫过于找不到/arch/setup这个脚本了,官方Wiki里面也没有提及,看来是增加了安装的难度。倒是看到在home目录下有一个install.txt文件。

From Installation Guide:

As of the 2012.07.15 installation media release, AIF (the Arch Installation Framework) is no longer included but instead Arch Install Scripts are provided to aid in the installation process. This article summarizes the install process using these scripts. See the Beginners' Guide instead for a walkthrough aimed at new users.

还有就是/etc/rc.conf文件不再存在了,而且引入了systemd作为initscripts的替换。RHEL和Ubuntu是用upstart来替换initscripts。

另外安装iso启动之后的这个命令行补全功能感觉有点陌生,原来是用了zsh。

archiso_prompt

查看全文

sed1line 笔记

这篇是当初看完Chinaunix论坛的帖子“抛砖引玉----翻译加注sed1line”的笔记,最近无聊从Evernote翻出来。本文假设测试文件名为test.txt。

文件空行处理

1. 在文件中的每一行后面添加一个空行。

sed 'G' test.txt

解释: Get命令是将保留空间的内容取出,并添加到当前模式空间的内容之后(添加一行)。当保留空间为空时,效果为往模式空间添加一行空行。

2. 保证文件中的每一行后面都有一行空行。和1不同的是,如果文件中本身包含空行,则合并成一行。

sed '/^$/d;G' test.txt

解释:首先删除空行,再添加一行空行。

3. 删除偶数行

sed 'n;d' test.txt

解释:n的意思读入下一行,并且输出当前行。当n读入下一行之后,用d将其删除。

查看全文

工作半年总结

好像对于这种总结的文章,我一向喜欢用转眼间开头,呵呵。是的,转眼间,四月份入职到今天刚好六个月了。从一个傻兮兮,天真的学生,逐渐一步步的融入到社会这个大染缸中。

前两天和大学同学聚会,地点挑在了玉泉南门的青芝乌。好久不见,上次聚会的时候还有好几个还在学校读书,这次几乎都是工作的了。大家聊起来还是非常感慨,回忆起大一大二熬夜游戏,吵到隔壁同学的场景,觉得哪时候真是无忧无虑。又聊了回会之前寝室里的糗人糗事,欢乐无限。期间也聊了聊近况,唯一意外的是,我的两个室友,一个老婆快生小孩了,一个失恋分手了。人生无常,希望我们的abel同学继续往前走!拿出以前蹲在寝室垃圾堆边上打电话吃饭的勇气!插句话,感慨下民工的辛苦,这么辛苦的工作,加上异地恋妹子不泡才怪。

时隔半年,再次踏进校园,发现学校的生活真是朝气蓬勃,充满希望。瞬间让人可以卸下很多压力。工作总归是辛苦的,这是我半年来最大的感受,终于体会到以前父母嘴里一直唠叨着的一句话,赚钱不容易。

半年做个简略的总结:熬夜比我整个大学加起来都多,变化很多但是改变不容易,邮件成为很重要的一份,我尽然会写sql,周报并不是那么难写,人还是和学校同学一样ws,dota还是可以找到组织。

从事运维工作,确实没有预料到会那么辛苦。说实话,曾经有想过放弃,徘徊过,但是又不想认输,好像被现实打败了一样。归根结底还是有一股学生的蛮劲,想实现自己的价值。觉得最对不起的是老婆,平时没有太多时间陪她。有一段时间几乎天天半夜才回家,确实有点筋疲力竭的感觉。

变化很多,从阿里云实习,到签约淘宝,而实际部门却归属于集团,这期间的变化让我一度没有任何归属感,百技培训取参加却都是淘宝的同学,讲的都是淘宝的技术,虽然可以增加知识面,但另外一方面又觉得格格不入。在阿里云又觉得自己是个局外人。最伤感的还是入职后不久,管云监控那会,一个人坐在华星科技。好在一切都过去了,现在扎根于西湖国际,组内同学也多起来了。

查看全文

通过公钥的方式 SSH 到服务器

在此之前,将自己服务器的公钥拷贝上远程服务器上,加添到~/.ssh/authorized_keys文件中。可以用ssh-keygen -t rsa 或者 ssh-keygen -t dsa命令生成公钥和私钥。这一点不难,最关键的是要留意远程服务器上的文件和目录的权限问题。

Make sure the permissions on the ~/.ssh directory and its contents are proper. When I first set up my ssh key auth, I didn't have the ~/.ssh folder properly set up, and it yelled at me.

  1. Your home directory ~ and your ~/.ssh directory on the remote machine must be writable only by you: rwx------ and rwxr-xr-x are fine, but rwxrwx--- is no good, even if you are the only user in your group (if you prefer numeric modes: 700 or 755, not 775).
  2. Your private key file (on the local machine) must be readable and writable only by you: rw-------, i.e. 600.
  3. Your ~/.ssh/authorized_keys file (on the remote machine) must be readable (at least 400), but you'll need it to be also writable (600) if you will add any more keys to it.
  4. Also, if SELinux is set to enforcing, you may need to run restorecon -R -v ~/.ssh (see e.g. Ubuntu bug 965663 and Debian bug #658675; this is patched in CentOS 6).

参考:http://unix.stackexchange.com/questions/36540/why-am-i-still-getting-a-password-prompt-with-ssh-with-public-key-authentication