Displaying posts categorized under

Linux

ssh 超时断开的解决方法

当用ssh连接*Nix服务器,几分钟没有操作,ssh连接就会被断开。如何才能保持ssh连接不被超时断开呢?有两种方法: 服务器端设置 打开文件 /etc/ssh/sshd_config 找到 ClientAliveInterval 选项, 如果没有的话,添加此选项。如下设置表示每360秒(6分钟)向客户端发送一个是否保持连接的查询信息(该选项默认为0,表示不发送查询信息) ClientAliveInterval 360 客户端设置 打开文件 /etc/ssh/ssh_config 找到 ServerAliveInterval 选项, 如果没有的话,添加此选项。如下设置表示每360秒(6分钟)向服务器端发送一个是否保持连接的查询信息(该选项默认为0,表示不发送查询信息) ServerAliveInterval 360 当你需要连接到多个ssh服务器时,可以使用 客户端设置 的方法,如果你是管理一个ssh服务器,希望所有的ssh客户端不被自动超时断开的话可以使用 服务器端设置 网络书签

使用SOCKS代理服务器转发bzr通信

创建SSH SOCKS 服务器 我们知道设置SSH SOCKS 代理服务器是很简单的,只要你有一个远端服务器的ssh帐号,使用下面的命令就可以轻易的创建一个套接字代理服务器。 ssh -fND 6666 ssh_user@ssh_server 它的用途是将应用程序的端口请求通过ssh加密通道动态的转发到远端ssh服务器。比如,我们可以设置firefox使用SOCKS5代理服务器并将端口按上面的命令设置为6666, 这样当我们用firefox浏览网页时(也就是对80端口的访问请求)就被转发到远端ssh服务器上作请求了。因为所有的访问请求经过ssh加密通道,所以用来对付墙还是很得心应手的。 bzr 不支持SOCKS代理服务器转发 因为经常要用bzr版本控制工具同步在launchpad上的项目,但是直截访问launchpad的速度实在太慢了。我发现我在国外租用的ssh服务器访问launchpad的速度非常快,而本地访问ssh服务器的速度也还不错,所以,自然就想到了能不能把bzr通信转发到ssh服务器。很不幸的发现bzr并不支持SOCKS代理服务转发。难不成我们只能忍受bzrlp的龟速,Google一通之后,发现了 tsocks tsocks 如何工作 它的基本原理是: 在加载应用程序之前, tsocks 先加载其共享库 该函数库覆写了内核的 connect() 函数 这样当应用程序发送连接请求时,该请求就被转发给了代理服务器(然后通过加密通道转发到了ssh服务器) 所有这些是通过设置环境变量 LD—RELOAD``的值为 ``/usr/lib/libtsocks.so 来实现的,tsocks 本身只是一个简单的shell包装(wrapper)脚本,所有的转发任务都是由上述的函数库完成。 安装好tsocks后,编辑文件 /etc/tsocks.conf 将已有的所有内容都注释掉,添加下面两行内容: server = 127.0.0.1 server_port = 6666 #设置为你的SSH SOCKS服务器开放的端口 就是这么简单,以后我们只要在运行bzr程序前,运行tsocks就可以使用创建好的SSH SOCKS服务器了: tsocks bzr pull lp:xxxx 这下bzr的访问速度还真是大大的提高了, 其实我们可以用tsocks来实现所有不直接支持SOCKS代理服务的程序。 参考文章:http://www.plenz.com/tunnel-everything 网络书签

Thinkpad T61 无法检测到路由器

缘起 我的笔记本电脑(Thinkpad T61 )的无线连接总是感觉有点古怪,经常会在无线网络中找不到自家的那台贝尔金路由器,但是却能搜出一堆邻居的路由器,而同时家里的其他电脑访问贝尔金路由器又毫无问题。这应该说明贝尔金路由器的工作是正常的,可是在找不到原因的情况下重启几次路由器,Thinkpad T61又突然能找到这台路由器了。最近被它折腾的超烦,路由器重启了N遍,这边的笔记本就是检测不到。忍无可忍,决定彻底的查查原因。试了几次之后发现当我把路由器的频段(Channel)设置从 自动 改为11及以下的设置后,笔记本电脑总能检测到路由器。问题是终于解决了,可是不能使用路由器上的自动频段选择有点不爽,因为路由器的自动频段选择可以避开繁忙的频段而使用周围环境中较少使用的频段,这样无线信号的干扰就会少一点。而且T61无法使用11以上的频段的原因也没有找到。于是戟起google大法,一通搜索之后终于让我的好奇心得到了满足。 排错过程 我的笔记本上装的是Ubuntu9.10,所以下面的命令都仅适用于Linux。 下面的这个简单的命令实际上一招就能展示我反复试验得出的结论: 就是T61上无法访问11以上的频段,只是不幸的是俺是后来才知道的: iwlist f 这条命令的结果是显示本机无线可连接的所有频段。在我的电脑上不存在12,13,14这些我的G带宽贝尔金路由器所支持的频段。另外还有一些更高的频段是适用于N带宽路由器的,这里不做讨论。通过搜索了解到,Wifi的IEEE802.11的规范中有regdomain这样的地域规范,就是不同地区所能使用的频段数是不同的。对于G带宽来说美国支持1到11, 欧洲多了12, 13, 而亚洲则另外可以使用14. 所以考虑是不是我的笔记本电脑的无线网卡驱动默认了美国的规范,看能不能改成欧洲或亚洲的。网上介绍了N种办法,因为我的Ubuntu9.10 使用CRDA程序来向内核模块通知domain regulatory的信息(即,地域设置规范),最简单的方法就是: sudo aptitude install iw 安装iw 无线网管理程序,然后在 /etc/rc.local 中添加一行如下代码,并重启电脑: iw reg set CN 就是把地域设置为中国。遗憾的是重启电脑后, iwlist f 仍然没有看到久违的12,13,14频段。 lspci 列出了T61使用的是intel 4965 AGN无线模组。再根据该型号来查,原来这个无线模组可能在硬件中设置了美国区,也就是只能使用1到11的频段。至此,我的调查算基本完成,虽然调查并没有为我提供更好的方案,但总算是头绪清爽了,也或许对其他朋友有帮助。另外,对胆大妄为的兄弟可以提供一个进一步的调查方向,就是无线模组的regdomain是纪录在eeprom里的,是可以被擦写修改的,有兄弟饭吃多了,可以往这个方向上再努把力。 网络书签

sudo !!

我们往往在执行一行命令时忘了输入 sudo, 使用 sudo !! 可以将最后一次输入的命令前添加''sudo''然后执行。 网络书签

文件共享与权限

原文作者:Jerry Peek 中文编译:Tony Gu(digitalsatori) 原文链接:http://www.linux-mag.com/id/1209/ Linux系统是一个多用户系统,其权限管理子系统允许每个用户共享或者保护自己的文件。可是这个出色的系统也的确有让人颇费脑筋的时候。比如:你是否知道,要对一个文件做移除或改名操作,用户需要拥有文件所在目录的写权限?对权限系统的深入了解可以让你的系统更加安全,与他人共享文件更加便利,以及防止文件的意外改动。我们首先学习一下Linux文件权限系统的一些基础知识。 网络书签

命令行工具组合很好很强大

带有图形化界面(GUI)的工具可能比较容易学习。所有的命令和选项一般都会在菜单和对话框中显示出来,使我们很容易就能了解这个工具能干些什么。如果“简便”和“直观”是你选择应用程序的第一要素,那么图形化工具总会是你的不二选择。 但是图形化界面带来简便的同时也带来功能贫乏,不够灵活的缺点。假定你是一个程序员,你需要清理你的Linux文件系统。要求在整个系统中找出所有超过6个月未被访问的目标文件,并在这些目录中运行make clean命令。一个图形化的文件系统浏览器能一次就完成这个任务吗?估计是不可以的。但是,联合多个非图形化的Linux命令行工具,再加之强大的Linux Shell,你可以快捷而轻松的完成这个任务。 来看看在命令行上我们到底能做哪些很强的事情。你也许并不想直接去做那些事情,但你可以了解如何来关联使用这些工具。Shell 和它的命令行程序的“关联”特性(就是允许你根据需要来组合使用各工具完成任务的能力)就是这些“强大工具”之所以强大的精要所在。 网络书签

alias和shell function

使用Unix/Linux的朋友大多知道alias(别名)的用法,alias 可以简化我们的命令输入,比如: alias ll = 'ls -l' alias la = 'ls -A' 当我们执行了以上的命令后,以后只要在shell中输入ll,shell会自动按照设置执行ls -l命令。 alias(别名)的确简单,好用,效果立现。不过如果我们的要求稍微复杂一点,比如:我们希望创建命令别名可以带可变的命令参数,alias这时候就爱莫能助了,幸好我们有同样简单好用的shell function. 语法: [ function ] name () { command-list; } shell function的作用是当在shell中执行name时,command-list所代表的一系列命令将会执行。在上述定义中关键词function可以不用写。 举例: 我有一个叫fancy_writer的很好用编辑工具,但是这个程序名字太长,我希望输入fa就能运行它,当然这样的要求,我们完全可以用alias做到,但是我现在希望fa能接受后面的文件名作为其编辑对象(这对alias也没问题),同时希望程序能在后台执行(这时alias就困难了),而用shell function 就轻松搞定了: function fa() { fancy_writer $1 &; } 将这段小代码写入.bashrc或.profile,这样我们登录shell时就可以使用fa这个shell function了。 另外,与unalias相似,要暂时取消shell function可以使用 unset name 网络书签

插入的U盘,记忆棒,SD卡等设备变成只读设备的原因和处理方法

问题: 将上述这些存储设备插入USB端口或读卡设备后,Ubuntu系统会自动mount这些设备到一个挂载点并在桌面上显示访问图标。但是某些情况下,我们访问这些被挂载的设备,并希望保存文件到设备时,系统提示访问的是“只读”设备。无法写入或直接运行程序。 原因: 插入设备的文件系统有故障,Ubuntu为了保护当前的系统,所以将设备的文件系统设置为只读。 判断方法: 在终端窗口中输入: tail -f /var/log/syslog 然后插拔被检测的设备,你可能会看到类似下面的错误信息 : FAT: Filesystem Panic (dev sdb1) ... "File system has been set read-only" 这就是告诉你设备sdb1的文件系统有问题,问题是...,现在我们将该设备的文件系统自说自话的设成只读了,以保护我们伟大的UBUNTU系统不受感染。 解决方法: 首先通过上面提到的log信息我们了解到是sdb1这个设备有问题, 事实上可以通过输入下面的命令来了解我们的文件系统: sudo fdisk -l 这个命令会显示当前系统检测到的所有文件分区包括连接的外部存储设备。你会看到比如刚才出问题的设备/dev/sdb1. 在处理这个设备之前我们先要卸载(umount),你可以对桌面上的设备图标右击鼠标,点“卸载”,或使用umount命令。 设备卸载后就可以使用以下的命令对上述设备的文件系统进行检查和修复了: sudo dosfsck -v -a /dev/sdb1 这个dosfsck应该跟windows下的chkdsk是类似的,多数情况下设备的文件系统是可修复的,运行完毕后。将设备重新连接到电脑,乌拉,问题解决啦。 网络书签

查找的艺术-find命令

如果你正气急败坏的在屏幕上双击打开一个又一个的文件夹疯狂寻找你两年前保存的关于“如何烹制独一无二的番茄炒蛋”的文章;如果你正盯着电脑上混乱如麻的文件夹,想把分散在各处的叫“菜谱XXX”的文件归并到一处,却无所适从时;如果你... “嗨,这位使用Linux的大厨兄,别忙了,是时候学习一下Linux众多优秀文件管理工具中非常实用,趁手的一个了。find命令可以让您非常从容,优雅的按照您的吩咐来匹配相关的文件或目录(文件夹),并对其实施指定的操作。 find命令语法 find . -name foo -print 这个命令的意思是从当前目录开始搜索带有“foo“的文件并显示出来。 注:在多数的Linux版本中-print可以省略。 find的常用语法: find 起始目录 搜寻条件 如果命令中没有设置起始目录,find会默认使用当前目录作为起始目录。你可以定义多个起始目录,比如: find /usr /home /tmp -name "*.jar" 该命令会在/usr, /home, /tmp三个目录及其子目录下搜索带有“.jar“的文件。如果您对某些要搜索的起始目录及其子目录没有访问权限,在搜索过程中会生成错误消息,比如: find: /root/protected: Permission denied 这样的出错信息会与搜索结果的输出混在一起。我们可以象如下这样过滤掉这些错误信息,以获得“干净”的搜索结果。 注:2>/dev/null 用来将出错信息重定向到空文件,从而不在屏幕上显示 find /usr /home /tmp -name "*.jar" 2>/dev/null 注:在上面的例子中通配符都需要括在引号中或用转义符(\)转义,比如上例也可以表示为: find /usr /home /tmp -name \*.jar find搜寻条件的逻辑及顺序 搜寻条件可以是多个条件组成的复合条件,可以由逻辑运算符and, or , not来连接: and: 逻辑与,在命令中用"-a"表示,是系统的缺省选项,表示只有当所给的条件都满足时,搜寻条件才满足。例如: find /prj/reports -type [...]