shitou's blog 
Home About Feed | 十人族 MIX BOY 塌客

Category "linux"

09
Sep

一些shell技巧 by shitou

1

 

摘抄一些不错的shell技巧

 

技巧 1:卸载无响应的 DVD 驱动器

网 络新手的经历:按下服务器(运行基于 Redmond 的操作系统)DVD 驱动器上的 Eject 按钮时,它会立即弹出。他然后抱怨说,在大多数企业 Linux 服务器中,如果在那个目录中运行某个进程,弹出就不会发生。作为一名长期的 Linux 管理员,我会重启机器。如果我不清楚正在运行什么,以及为何不释放 DVD 驱动器,我则会弹出磁盘。但这样效率很低。

下面介绍如何找到保持 DVD 驱动器的进程,并轻松弹出 DVD 驱动器:首先进行模拟。在 DVD 驱动器中放入磁盘,打开一个终端,装载 DVD 驱动器:

# mount /media/cdrom
# cd /media/cdrom
# while [ 1 ]; do echo "All your drives are belong to us!"; sleep 30; done

现在打开第二个终端并试着弹出 DVD 驱动器:

# eject

将得到以下消息:

umount: /media/cdrom: device is busy

在释放该设备之前,让我们找出谁在使用它。

# fuser /media/cdrom

进程正在运行,无法弹出磁盘其实是我们的错误。

现在,如果您是根用户,可以随意终止进程:

# fuser -k /media/cdrom

现在终于可以卸载驱动器了:

# eject

fuser 很正常。

 

技巧 2:恢复出现问题的屏幕

尝试以下操作:

# cat /bin/cat

注意!终端就想垃圾一样。输入的所有内容非常零乱。那么该怎么做呢?

输入 reset。但是,输入 reset 与 输入 reboot 或 shutdown 太接近了。吓得手心冒汗了吧 — 特别是在生产机器上执行这个操作时。

放心吧,在进行此操作时,机器不会重启。继续操作:

# reset

现在屏幕恢复正常了。这比关闭窗口后再次登陆好多了,特别是必须经过 5 台机器和 SSH 才能到达这台机器时。

 


技巧 3:屏幕协作

来自产品工程的高级维护用户 David 打电话说:“为什么我不能在您部署的这些新机器上编译 supercode.c”。

您会问他:“您运行的是什么机器?”

David 答道:“ Posh”。(这个虚够的公司将它的 5 台生产服务器以纪念 Spice Girls 的方式命名)。这下您可以大显身手了,另一台机器由 David 操作:

# su - david

转到 posh:

# ssh posh

到达之后,运行以下代码:

# screen -S foo

然后呼叫 David:

“David,在终端运行命令 # screen -x foo”。

这使您和 David 的会话在 Linux shell 中联接在一起。您可以输入,他也可以输入,但彼此可以看到对方所做的事情。这避免了进入其他层次,而且双方都有相同的控制权。这样做的好处是 David 可以观察到您的故障诊断技巧,并能准确了解如何解决问题。

最后大家都能看到问题所在:David 的编译脚本对一个不在此新服务器上的旧目录进行了硬编码。将它装载后再次编译即可解决问题,然后 David 继续工作。您则可以继续之前的娱乐活动。

关于此技巧需要注意的一点是,双方需要以同一用户登录。screen 命令还可以:实现多个窗口和拆分屏幕。请阅读手册页获取更多相关信息。

对于 screen 会话,我还有最后一个技巧。要从中分离并让它打开,请输入 Ctrl-A D (即按住 Ctrl 键并点击 A 键。然后按 D 键)。

然后通过再次运行 screen -x foo 命令可以重新拼接起来。

 

技巧 4:SSH 后门

有很多次,我所在的站点需要某人的远程支持,而他却被公司防火强阻挡在外。很少有人意识到,如果能通过防火墙到达外部,那么也能轻松实现让外部的信息进来。

从本意讲,这称为 “在防火墙上砸一个洞”。我称之为 SSH 后门。为了使用它,必须有一台作为中介的连接到 Internet 的机器。

在本例中,将这样台机器称为 blackbox.example.com。公司防火墙后面的机器称为 ginger。此技术支持的机器称为 tech。图 4 解释了设置过程。


图 4. 在防火墙上砸一个洞
在防火墙上砸一个洞

以下是操作步骤:

  1. 检查什么是允许做的,但要确保您问对了人。大多数人都担心您打开了防火墙,但他们不明白这是完全加密的。而且,必须破解外部机器才能进入公司内部。不过,您可能属于 “敢作敢为” 型的人物。自己进行判断应该选择的方式,但不如意时不抱怨别人。

  2. 使用 -R 标记通过 SSH 从 ginger 连接到 blackbox.example.com。假设您是 ginger 上的根用户,tech 需要根用户 ID 来帮助使用系统。使用 -R 标记将 blackbox 上端口 2222 的说明转发到 ginger 的端口 22 上。这就设置了 SSH 通道。注意,只有 SSH 通信可以进入 ginger:您不会将 ginger 放在无保护的 Internet 上。

    可以使用以下语法实现此操作:

    ~# ssh -R 2222:localhost:22 thedude@blackbox.example.com

    进入 blackbox 后,只需一直保持登录状态。我总是输入以下命令:

    thedude@blackbox:~$ while [ 1 ]; do date; sleep 300; done

    使机器保持忙碌状态。然后最小化窗口。

  3. 现在指示 tech 上的朋友使用 SSH 连接到 blackbox,而不需要使用任何特殊的 SSH 标记。但必须把密码给他们:

    root@tech:~# ssh thedude@blackbox.example.com .

  4. tech 位于 blackbox 上后,可以使用以下命令从 SSH 连接到 ginger:

    thedude@blackbox:~$: ssh -p 2222 root@localhost

  5. Tech 将提示输入密码。应该输入 ginger 的根密码。

  6. 现在您和来自 tech 的支持可以一起工作并解决问题。甚至需要一起使用屏幕!

 

技巧 5:随机系统信息收集

在这个技巧中,我将介绍几个其他方法,用于从需要进行验证、故障诊断或给予远程支持的系统收集重要信息。

首先,收集关于处理器的信息。通过以下命令很容易实现:

# cat /proc/cpuinfo 。

这个命令给出关于处理器的速度、数量和型号的信息。在许多情况下使用 grep 可以得到需要的值。

我经常做的检查是确定系统中处理器的数量。因此,如果我买了一台带双核处理器的四核服务器,我可以运行以下命令:

# cat /proc/cpuinfo | grep processor | wc -l 。

然后我看到值应该是 8。如果不是,我会打电话给供应商,让他们给我派送另一台处理器。

我需要的另一条信息是磁盘信息。可以使用 df 命令获得。我总是添加 -h 标记,以便看到以十亿字节或兆字节为单位的输出。# df -h 还会显示磁盘的分区情况。

列表最后是查看系统固件的方式 —— 一个获取 BIOS 级别和 NIC 上的固件信息的方法。

要检查 BIOS 版本,可以运行 dmidecode 命令。遗憾的是,不能轻易使用 grep 获取信息,所以这不是一个很有效的方法。对于我的 Lenovo T61 laptop,输出如下:

#dmidecode | less
...
BIOS Information
Vendor: LENOVO
Version: 7LET52WW (1.22 )
Release Date: 08/27/2007
...

这比重启机器并查看 POST 输出有效得多。

要检查以太网适配器的驱动程序和固件版本,请运行 ethtool:

# ethtool -i eth0
driver: e1000
version: 7.3.20-k2-NAPI
firmware-version: 0.3-0

 

另外: ethtool eth0; 可用于管理网卡的双工,速率等工作模式

 

Tags: shell

2008-09-09 20:27:19, 649 reviews

send to mailbox

Your email:

Related Posts

Shell script to backup all MySQL database

【转载】命令的小总结

MySQL Innodb备份

shell中的数组

( ),{ }的区别

一个小命令

awk同时操作两个文件

shell小技巧

Shell: 统计MySQL InnoDB表的大小

awk多维数组

1 Response

游客

2008-10-20 00:38:01

Thank you for valuable information. http://divorceinfo.com/heowiki/games/html/forumsesso/

 

TOP

Tags

tenerer MooseFS gearman-ruby Gearman MongoDB MochiChat TCP U-ka saegusa IN db command Mai Kuraki Norah Jones log iPhoneException ACG Mac Safari objective-c CouchDB LVS AJAX debian 推荐 AMQP google mail bug gettext Erlang 北京 iptables 架构 tips mysql backup function 我看 postfix 监控 SEO cache Etag memcache thread 进程 线程 无锡 yield file column mixboy xml rss gems ruby shitou shell lighttpd 安全 csrf 公司 nginx linux 模块 apache webserver 朋友 大学 生活 尼古拉斯凯奇 movie 文件同步 笑笑 歌词 auto complete plugin rails music ubuntu blog

Category

  • iPhone[17]
  • Erlang[8]
  • google[9]
  • 生活[41]
  • 音乐[11]
  • 电影[11]
  • linux[24]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[8]
  • ruby[18]
  • ruby on rails[27]
  • 开源[3]

Episode

  • MochiChat
  • iPhoneException
  • shell
  • thread
  • memcache

Recent Comments

  • collectively cartoon valley, virtual http://bii...
  • mess assfilled, soderman http://gerero.centerbl...
  • croydon hoes, unlike http://zewero.centerblog.n...
  • Best Site good looking
  • Wonderfull great site
  • very best job
  • felony okcupid, bins http://biiili.centerblog.n...
  • passage mom tube, animosity http://zewero.cente...
  • this is be cool 8)
  • i'm fine good work

Popular Posts

  • 准备开始学习Erlang了(恶狼, 二郎..)
  • MySQL Innodb备份
  • Lighttpd配置参数
  • iPhone上的HelloWorld终于跑起来了
  • Etag和Expire

Recommended Posts

  • 再次被和谐-_-
  • 十人族: 上线了
  • MooseFS vs. NFS
  • Mochichat新版本上线
  • Gearman
  • MongoDB入门
  • find使用非业余研究
  • MochiChat: 一个基于erlang的web聊天室(beta)
  • /dev/shm和swap的区别
  • gen_tcp的packet参数
  • Beauty - Mai Kuraki
  • awk多维数组
  • We Lost Google.cn
  • Erlang TCP Server例子
  • Mai Kuraki -永远より ながく

Friends' blogs

  • levy
  • sphance
  • andreas

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 88212
  • 今天访问: 8
  • 日志: 187
  • 评论: 517
  • 音乐: 9
  • 用户: 495


 

just DO NOT support IE

close