linux技巧收集
如何在Linux里面恢复mbr?
====================================
可以使用下面的命令来恢复:
dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1
其中bs(buffer size)是指重写的字节数。为什么不是512呢?主引导扇区是一个扇区(512字节)呀?答案是因为我们用上面的命令是为了修复可能被病毒修改了的主引 导记录MBR,或者想把LILO卸载掉,而不是恢复整个主引导扇区。所以我们只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇 区。boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把512个字节全部写入主引导扇区就可能会把安装了Linux后改变了 的硬盘DPT表也破坏掉。那就坏事了。 ![]()
如何列出一个目录占用的空间
====================================
du或du -s或du -k
du -S | sort -n 可以迅速发现那个目录是最大的。
用df可以看到已安装的文件系统的空间大小及剩余空间大小。
quota -v查看用户的磁盘空间信息,如果你用quota限制了用户空间大小的话。
在使用less 或 more时,如何直接启动编辑器
====================================
在less或者more中打入v键,会立即启动vi编辑器,可以对文件进行编辑
如何察看你当前使用的Linux内核的版本
====================================
可以使用uname -r来查看当前内核版本。如果使用uname -a可以查看包括内核版本,机器硬件信息、网络节点名、操作系统名字等信息
如何显示文件的类型
====================================
用命令 file 可以使你知道某个文件究竟是ELF格式的可执行文件, 还是shell script文件或是其他的什么格式 例如:
#file startx
如何将man page转成HTML格式
====================================
使用 man2html 这个指令,就可以将 man page 转成 HTML 格式了。用法是:
man2html filename > htmlfile.html
例子:
man2html /usr/man/man1/man2html.1 > ~/man2html.html
查看文件内容的特殊方法
====================================
相信最基本的cat和less你已经很熟悉了,如果有特殊的要求呢:
如果你只想看文件的前5行,可以使用head命令,如:
head -5 /etc/passwd
如果你想查看文件的后10行,可以使用tail命令,如:
tail -10 /etc/passwd
tail -f /var/log/messages
参数-f使tail不停地去读最新的内容,这样有实时监视的效果,当你在ppp拨号的过程中用它岂不是很方便!
查看文件中间一段,你可以使用sed命令,如:
sed -n ‘5,10p’ /etc/passwd
这样你就可以只查看文件的第5行到第10行。
linux下文件分割与合并
====================================
$dd if=source of=target.1 bs=1M count=10
$dd if=source of=target.2 bs=1M skip=10
source被分为target.1和target.2两个文件,其中target.1为source的前10M部分;target.2为source的减去10M后的部分。
$cat target.1 target.2 > othersource
source与othersource是同一个文件。
RedHat下如何显示彩色目录列表
====================================
打开/etc/bashrc, 加入如下一行:
alias ls=”ls –color”
下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下:
蓝色–>目录
绿色–>可执行文件
红色–>压缩文件
浅蓝色–>链接文件
灰色–>其他文件
什么是Linux 运行级?
====================================
什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6,具有不同的功能。这些级别在/etc/inittab文件里指定。这个文件是init程序寻找的主要文件,最先运行的服务是那些放在/etc/rc.d 目录下的文件。
不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)
# 缺省的运行级,RHS 用到的级别如下:
# 0 - 停机(千万不要把initdefault 设置为0 )
# 1 - 单用户模式
# 2 - 多用户,但是没有 NFS
# 3 - 完全多用户模式
# 4 - 没有用到
# 5 - X11
# 6 - 重新启动 (千万不要把initdefault 设置为6 )
对各个运行级的详细解释:
0 为停机,机器关闭。
1 为单用户模式,就像Win9x 下的安全模式类似。
2 为多用户模式,但是没有NFS 支持。
3 为完整的多用户模式,是标准的运行级。
4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5 就是X11,进到Xwindow系统了。
6 为重启,运行init 6机器就会重启。
不同的运行级有不同的用处,也应该根据自己的不同情形来设置。例如,如果丢失了root 口令,那么可以让机器启动进入单用户状态来设置。在启动后的 lilo 提示符下输入:
init=/bin/sh rw
就可以使机器进入运行级1 ,并把root文件系统挂为读写。他会跳过所有系统认证,让你使用passwd 程序来改变root口令,然后启动到一个新的运行级。
系统平均负载(Load average)释疑
====================================
在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:
- 它没有在等待I/O操作的结果
- 它没有主动进入等待状态(也就是没有调用’wait’)
- 没有被停止(例如:等待终止)
例如:
[root@www2 init.d]# uptime
7:51pm up 2 days, 5:43, 2 users, load average: 8.13, 5.90, 4.94
命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。
一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对 于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。
如何以树状结构显示系统当前的任务
====================================
运行ps时指定—forest选项,当前运行的进程将会以树状格式显示出来。比如:所有由xserver运行的程序,将会以xserver做为它们的“根”显示出来。
命令格式:
ps afx
其中’a’表示列出所有运行的进程;’x’列出所有的后台进程;’f’是’-forest’的缩写。输出的格式如下:
329 ? SW 0:00 [wdm]
342 ? R 9:57 \_ /usr/X11R6/bin/X :0 vt7 -fbbpp 16 -auth /usr/etc/
343 ? SW 0:00 \_ [wdm]
364 ? S 0:45 \_ /usr/bin/enlightenment
399 ? S 0:00 \_ /usr/bin/ssh-agent sh /home/tuneup/.xse
404 ? S 2:28 \_ gkrellm -wm
787 ? S 0:05 \_ aterm -fg white -tr
788 ttyp0 SW 0:00 \_ [bash]
792 ttyp0 S 0:00 \_ vim todo
注:另外一种得到格式化输出结果的方法是:pstree -pu
列目录时如何显示中文文件名
====================================
我们可以使用–show-control-chars命令选项来显示。
例如:
$ls –show-control-chars
如果使用的是一个比较常用的windows的分区,那么可以通过修改fstab来实现,在fstab中加入类似内容:
/dev/hda1 /mnt/c vfat defaults,codepage=936,iocharset=cp936 0 0
那么以后进入系统后都可以方便地使用/mnt/c访问windows的这个目录并正确显示目录名和文件名。
如何使用iso文件?
====================================
许多Linux发行版本都有.iso的光盘镜像文件,可以用来刻录光盘。我们也可以在Linux系统下直接使用。
#mount -t iso9660 -o loop xxxxx.iso /any/path/if/u/like
查询你的CPU等级
====================================
cat /proc/cpuinfo
如何使用户没有telnet和ftp权限
====================================
若只希望用户没telnet权限,则需要修改/etc/passwd中对应该用户的shell为/bin/true。
若只希望用户没有telnet和ftp权限,则需要修改/etc/passwd中对应该用户的shell为/bin/false。
如何连续执行一个命令
====================================
使用watch命令,可以反复执行命令,如果和ls配合,可以达到观察某文件大小变化的效果。例如:
$watch ls -l file.name
如何防止某个关键文件被修改
====================================
在linux下,有些配置文件是不允许任何人包括root修改的,为了防止被误删除或修改,可以设定该文件的”不可修改位(immutable)”。
例如:
chattr +i /etc/fstab
如果需要修改文件则:
chattr -i /etc/fstab
以后再修改文件。
linux环境下如何undelete
====================================
先在自己的主目录下创建一个名为.trash的子目录,然后在bashrc加入以下指令:
alias rm ‘mv -f !* ~/.trash’
alias undel ‘mv ~/.trash/!* ./!*’
alias cleantrash ‘/bin/rm -rf ~/.trash; mkdir ~/.trash;sync’
alias lrm ‘ls ~/.trash’
若文档是直接用rm命令删除的,理论上 ext2 内 rm 掉的档案还是可以用 debugfs , ext2ed 救回来的.当然… 被 overwrite 掉就没救了。
如何找出磁盘中某个大小范围内的文件
====================================
比如要查找磁盘中大于3M的文件:
find . -size +3000k -exec ls -ld {} ;
如何快速重新执行已经执行过的命令
====================================
使用!可以实现该功能,例如你前面执行了很多命令,现在突然想执行上一次执行的./configure命令,则只需要输入“!./con”即可而无需使用上下键来滚动查找。
而!!则能代替前面一个命令。比如刚执行过一次ifconfig,输入“!!”则等于再执行一次ifconfig。
而且这两个用法可以和其他命令组合,比如你刚执行过ifconfig,然后执行man !!,就等于执行man ifconfig。
当终端出现混乱时,如何让它恢复正常
====================================
当使用stty命令而出现一些混乱或者更糟的是,使用一个程序而使终端设置完全混乱了时怎么办?要回到“现实”,试试下面的命令:
stty sane
如果击键变得混乱时,试着用来把命令括起来,输入的顺序是先按下CTRL再键入j键。
ctty sane
这个命令不会回到先前的设置,但却可以去除一些稀奇古怪的设置。而真正会出现什么设置要依赖于所使用的系统,但它至少会让你能输入字符,并见到结果。从这里开始,你可以把一些组合键设置为你所喜欢的方式。
如何将.gz文件分割为数个1.44mb
====================================
把一个文件分割到软盘:
tar cfvm /dev/fd0 file.tar.gz
把软盘上的文件合并到硬盘:
tar xvfm /dev/fd0
如何一次处理一整个目录
====================================
Linux/UNIX 的很多常用命令如 rm , cp 等都有一个参数—- -r , 是递归的意思, 命令里加了参数 -r 就可以对目标目录及其下所有子目录进行操作,如:
rm -rf /test (f 是 force 意为强行)
该命令完全删除根目录下的子目录 test ,作用类似于 dos 下的 deltree ,当然使用这个命令时要特别小心。再如:
cp -r /test /test1
有类似 dos 下 xcopy /s 的作用。
redhat下如何允许root通过telnet登录?
====================================
方法1:/etc/securetty ( 加入 pts/0 、pts/1、…)
# echo “pts/0″ >> /etc/securetty
方法2:为了在redhat linux系统中激活远程登陆,从文件/etc/pam.d/login中移去下面这一行:
auth required /lib/security/pam_security.so
将/etc/securetty这个文件改名就行啦,该文件是定义root只能在tty1~tty6的终端上登录的,详细的信息可以”man login”。
Linux正常重新启动的方法有很多种,下面介绍几种常用的重新启动方法:
====================================
Ctrl+Alt+Del
#init 6
#shutdown -r now
#reboot
为什么我的linux不允许普通用户登录?
====================================
以root的身份登录系统,检查是不是有/etc/nologin这个文件,删除这个文件,然后再以普通用户的身份登录。相信问题已经解决。
出现这种问题一般是因为系统在关闭的过程中意外中断了操作,如断线或者是插头被拔了之类的意外。而系统在关闭的过程中会自动的产生这个文件,以便通知用户系统正在关闭这就造成普通用户无法登录了。
另外一种原因是系统管理员在对系统进行维护,为了维护的过程中不受其他用户的影响,需要生成这个文件来禁止其他用户登录。但很不幸系统管理维护完以后忘记删除这个文件了。
如何改变当前路径下所有目录和文件的所有权
====================================
改变所有子目录及文件的所有权
#chown -R owner[.group] *
也可以用find命令来实现:
#find . -exec chown owner[.group] {} ;
改变所有子目录及文件的属性
在你要改变属性的目录下,输入命令:
#chmod -R 777 *
就可以改变下面所有子目录及文件的属性,不过使用这个命令的时候要特别小心,要是在根目录下打入这个命令,你所有文件的属性都将改变,这就会引起很大的安全性问题。
如何快速查找文件
====================================
查找文件可以用find,但最好是用locate,速度快,参数少。
$locate filename
它是在一个数据库里面查找,所以,要记得经常用updatedb命令更新数据库。一般地,在crontab中的cron.daily脚本会执行/usr/sbin/logrotate /etc/logrotate.conf命令,让机子在每天深夜更新数据库。
如何将Linux或FreeBSD复制到另一颗硬盘 ?
====================================
Linux上的系统复制很简单,使用cp -ax将partition资料复制过去,重开机後设定lilo就可以了。
FreeBSD也可以用cp来复制文档,但是对于复制整个文档系统并不是好方法。
这里介绍使用dump和restore来做:
创建新的文档系统
假如你的新硬盘为ad1, 而将来的根分区将是ad1s1a, 你可以先创建文档系统:
newfs /dev/ad1s1a
mount /dev/ad1s1a /mnt
cd /mnt
复制:
dump -f- / | restore -f- -r
这是把老的根文档系统复制输出到管道,restore从管道里读数据,写入当前目录所在的文档系统。
按部就班复制其他文档系统
复制完後,也许 要修改新硬盘下的/etc/fstab,安装上新的分区,摘下老硬盘就可以了。
再补充一点,如果你要复制的是另外一台机器,可以用rsh,这样就可以通过网络把一个分区数据传送到另外一台机器,不需要NFS,不需SAMBA等就可以解决问题,而cp就很难作到了。
newfs /dev/ad1s1a
mount /dev/ad1s1a /mnt
cd /mnt
rsh -l yourname thathost ‘dump -f- /’ | restore -f- -r
linux怎么给一个普通用户reboot权限?
====================================
分四种情况讨论:
1.让任何人(包括根本不拥有系统帐号的人)都可以通过控制台reboot
在/etc/inittab文件中保留ca::ctrlaltdel:/sbin/shutdown -t3 -r now
这一行。这样全国人民都可以reboot你的机器,只要你把控制台交出来。
2.让所有系统用户都可以reboot
执行# > /etc/security/console.apps/reboot即可。这就在console.apps目录下生成了一个空文件,文件名就是授权的 application。以上路径是针对Mandrake系统而言的,其他系统我不清楚。不过,真正高雅的Mandraker或许根本就不会去靠 “>”来生成这个文件——他们会使用msec来进行控制的。
3.让指定的用户才可以reboot
假设我们要让用户zhizunbao拥有reboot的权限,我们靠uid/gid来完成控制:
# groupadd reboot
# cd /usr/local
# mkdir reboot
# chown root:reboot reboot/
# chmod 750 reboot/
# cd reboot
# cp /sbin/reboot .
# chmod 4755 reboot
# usermod -G reboot zhizunbao
现在,zhizunbao就可以运行/usr/local/reboot/reboot来重启动机器。
4.在一台不设普通用户的机器上启用口令验证reboot
这实际上是靠添加一个关机帐号来实现的,该帐号的shell就是加了s位的/sbin/halt,并且口令只有少数维护人员知道。我们这里采用的就是第4套方案。
怎样知道自己的机器上有哪些服务在运行
====================================
若一台机器运行有很多不需要的服务,那么被攻击者入侵的可能性就会大大加大,因此作为管理员就应该经常查看系统运行有哪些服务。
首先查看系统运行的进程
若需要查看系统当前运行的所有进程,就需要用如下命令:
# ps auxw
其中参数a表示显示系统中所有用户的的进程;u表示输出进程用户所属信息;x表示也显示没有控制台的进程;若显示行太长而被截断则可以使用f参数;
查看系统监听的服务
# netstat -ln
l表示显示当前系统监听的端口信息;n表示端口按照端口号来显示,而不转换为service文件中定义的端口名;若希望了解各个端口都是由哪些进程监听则可以使用p参数。
若发现不需要的服务,可以使用linuxconf或ntsysv命令来关闭这些服务在系统启动时自启动,然后重新启动系统则这些服务将在运行。
有些服务是由inetd超级服务器来监控的,则需要标记/etc/inetd.conf来关闭这些服务。
查询端口对应的服务
====================================
# lsof -i :端口号
查询此端口对应的服务。
vi 中设置自动缩进
====================================
:set autoindent
:set ai
取消
:set noautoindent
:set noai
如何使linux系统对ping不反应
====================================
在linux里,如果要想使ping 没反应也就是用来忽略icmp包。可以用:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
若想恢复就用:
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
如何实现多网卡bondin
====================================
使用多块网卡虚拟成为一块网卡,具有相同的IP地址。这项技术其实在sun和cisco中已经存在,分别称为Trunking和etherchannel技术,在Linux中,这种技术称为bonding。
因为bonding在内核2.4.x中已经包含了,只需要在编译的时候把网络设备选项中的Bonding driver support选中就可以了。
然后,重新编译核心,重新起动计算机,执行如下命令:
ismod bonding
ifconfig eth0 down
ifconfig eth1 down
ifconfig bond0 ipaddress
ifenslave bond0 eth0
ifenslave bond0 eth1
现在两块网卡已经象一块一样工作了.这样可以提高集群节点间的数据传输.
你最好把这几句写成一个脚本,再由/etc/rc.d/rc.local调用,以便一开机就生效.
bonding对于服务器来是个比较好的选择,在没有千兆网卡时,用两三块100兆网卡作bonding,可大大提高服务器到交换机之间的带宽.但是需要在交换机上设置连接bonding网卡的两个口子映射为同一个虚拟接口。
字符终端关掉喇叭
将/etc/inputrc中的set bell-style none 前的#去掉,或echo “set bell-style none” >> ~/.bashrc
