很久没来博客了,这都拜公司那可恶的Websense所赐,最近时常发现有一些Linux命令莫名其妙的忘记了,也许是少用了,或者是老了:(于是想到索性在这里写一边文章记录一下,以便日后参考。

 

1、乱码文件名文件:

# ll -i (获得文件节点号)

# find ./ -inum 节点号 -print -exec rm {} -rf /; (巧用find删除)

... ...

 

2、find与xargs结合:

# ls | xargs rm -f (用xargs传参长度无限制)

find . -name "*.*" -type f -print | xargs grep "hostnames"

# find . -path "/path/to/what" -prune -o -print (忽略/path/to/what目录)

... ...

 

3、关于samba服务:

# useradd username (必须先建立系统用户)

# smbpasswd -a username (新建用户并设置密码)

# service smb start (启动Smb服务)

# vi /etc/samba/smb.conf (设置共享目录)

... ...

常见问题:无密码登录,无法创建目录

解决办法:

修改 /etc/samba/smb.conf 中的 security=share;然后把共享目录如下设置:
[software]
        comment = Software
        path = /path/to/samba
        public = yes
        writable = yes
        printable = no
        guest ok = yes

最后给目录附权:

# chown -R nobody:nobody /path/to/samba

# chmod -R 755 /path/to/samba

... ...

 

4、SSH无密码远程登录:

# cd ~/.ssh/ (进入Client端用户Homepath下的.ssh目录)

# ssh-keygen -t [rsa|dsa] (生成dsa或者rsa密匙对,ssh会先使用rsa密匙)

# scp id_rsa.pub user@remote-host:/user-homepath/.ssh/ (拷贝公匙到Server端服务器上的user用户目录)

# cat id_rsa.pub >> authorized_keys (进入Server服务器,把公匙加入authorized_keys,或者直接把Client端的id_rsa.pub文件内容添加到Server端的authorized_keys文件最后即可)

# ssh user@remote-host (回到Client端,下次登录不需要密码了)

另外,在 Linux 中非 root 用户的远程登录必须在 Server 端设置正确的文件权限才可:

# chmod 700 ~/.ssh

# chmod 600 ~/.ssh/authorized_keys

... ...

 

5、巧用SSH实现Tunnel加密:

# ssh -T -f -N -Llocal-port:remote-host:host-port user@remote-host (用ssh中的后台运行选项挂起ssh连接,建立端口映射)

# screen ssh -Llocal-port:remote-host:host-port user@remote-host (这里是另一种方法:用screen打开一个带tunnel的ssh连接,这样子就算用户退出登录,该ssh连接仍然会在,可以通过screen -x和exit命令退出,也可以通过pgrep screen | xargs kill来很方便的切断连接,推荐)

# netstat -tunlp (可以查看到是否本地打开了port端口)

... ...

 

6、NFS常用配置:

首先,需要知道的是NFS依赖的是RPC服务,因此先确认portmap/nfsserver服务有没有开启。

# service [nfsserver|portmap] status (查看服务状态)

# vi /etc/exports (编辑Server端的exports文件)

文件内容如下:
/home/test1 192.168.0.*(rw) *(ro)
/home/test2 192.168.0.100(rw)
/home/test3 *.the9.com(rw,all_squash,anonuid=40,anongid=40)

# exportfs -ra (重新读取/etc/exports文件)

# showmount -e server-host (回到Clinet端,查看Server上的的所有mount点)

# mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 server-host:/home/test1 /mnt/nfs/test1 (挂载需要的nfs目录,这里使用tcp协议,也可以使用udp协议,udp协议快但是tcp协议稳定;这里有可能会遇到“mount: *** failed, reason given by server: Permission denied”错误,如果检查了/etc/exports文件配置和目录权限后仍然找不到结果,有可能是/etc/hosts文件的影响,去掉那些IP/主机名对就可以了。)

# umount /mnt/nfs/test1 (可以用umount解除挂载,如果由于Server宕机导致无法解挂,建议在前面挂载的时候加入-o soft=true选项)

... ...

 

7、Apache SSL证书生成:

我们利用openssl来生成证书,然后自己验证。

首先找到openssl目录下的CA.sh (一般来说,可能在apps目录下),拷贝到/usr/bin下保证可以直接执行。

# CA.sh -newca (生成demoCA/目录——自己的认证中心)

# openssl genrsa -des3 -out server.key 1024 (输入RSA密码并记录)

# openssl req -new -key server.key -out server.csr (输入刚才的密码,并填写证书信息,注意Common Name最好和需要验证的域名一样,否则会有警报)

# mv server.csr newreq.pem (准备认证)

# CA.sh -sign (使用自己的认证)

# mv newcert.pem server.crt

然后我们需要在Apache的SSL配置文件中修改如下配置:

SSLCertificateFile /path/to/server.crt

SSLCertificateKeyFile /path/to/server.key

重启Apache,输入https网址验证。

 

8、关于iptables

我们在安装linux时可以选择iptables的开启关闭。

或者通过ntsysv配置,还有就是可以用chkconfig --list iptables查看服务状态(此命令是通过配置rc.(0-6)中的配置文件来设置linux服务启动/停止)

Linux中一般iptables的rule存在/etc/sysconfig/iptables文件,若此文件存在,重启iptables服务后用iptables -L就可以看到加载的上的iptables规则,若要开机不使用iptables,可以清除/etc/sysconfig/iptables,或者通过chkconfig iptables off命令设置。

以下是一个RH上的iptables规则示例:http://feixiang123.blog.51cto.com/285543/180284

FreeBSD上的防火墙工具是ipfw,原理和linux是一样的。

 

9、使用yum管理RedHat Linux Enterprise

大家都清楚,RedHat Linux Enterprise的产品更新服务是收费的,如果我们安装的时候没有向RedHat注册,是不能进行产品的升级的,但是我们可以使用yum来帮助我们解决烦人的rpm包依赖关系。

首先下载:yum-xxx.tar.gz (http://yum.baseurl.org/download/)

然后解压安装后,编辑/etc/yum.conf:

 

[main]
cachedir=/home/yumupdate
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=centos-release
tolerant=1
exactarch=1
retries=20
obsoletes=1
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/4/os/x86_64/RPM-GPG-KEY

[base]
name=CentOS4.7 - Base
baseurl=http://mirrors.163.com/centos/4/os/x86_64/

[update]
name=CentOS4.7 - Update
baseurl=http://mirrors.163.com/centos/4/updates/x86_64/

[contrib]
name=CentOS 4.7 - Contrib
baseurl=http://mirrors.163.com/centos/4/contrib/x86_64/

 

以上是一个 yum.conf 的示例,保存后建立 /home/yumupdate (配置文件第一行)目录之后,运行yum update,就可以正常操作了。

 

10、关于 Selinux

Linux默认是启动selinux的,但是实际上这个选项主要用于保护一些比如浏览器等此类最终用户的程序,对于作为服务器来说的linux作用是不大的,但是打开的话,安装一些daemon程序经常会出现一些莫名其妙的问题,所以我建议在服务器上可以关闭它,可以通过sestatus查看selinux是否被开启,若被开启,我们可以修改/etc/sysconfig/selinux文件中的SELINUX=disabled,然后重启,或者直接使用setenforce 0命令关闭(setenforce 1表示开启)。

 

11、关于 Apache 重写与代理

关于 Apache 重写用的非常多了,但是代理模式还是比较少用到,在项目中有些特殊的场景(比如 Ajax 或者 Flash 跨域问题),我们经常用这个方法来做解决方案。

首先,打开 mod_proxy.so 和 mod_proxy_http.so 扩展,启用 Apache 代理功能,然后使用 [P] 重写选项即可,比如:

RewriteRule ^/proxy/(.*)$ http://$1 [P,L] 这段重写命令就可以实现简单的反向代理功能,当然你可以使用 ProxyPass 和 ProxyPassReverse 来做反向代理,不过经测试 Apache 重写的效率比代理要快 5、6 倍不止,所以如果能不使用代理建议尽量不要使用。

 

12、Rsync日常用法

作为目前运用最为广泛的同步工具之一的 rsync 大家应该都很熟悉了,其功能自然是强大,用法也很丰富,但是我们在日常工作中使用到的备份方法一般有两种,一种就是主动服务器同步,也就是我们把客户端服务器下目录同步到目标服务器上,的这样子直接命令如下(-e 后面是 ssh 的使用端口):

# rsync -avzu -e 'ssh -p 22' /path/to/syncdir/ username@target-server:/path/to/syncdir/

另外一种就是被动服务器同步,指的是客户端从服务器上同步目录,这种方式需要先配置 rsync 服务器。现在例如我们已经配置好了一个 rsync 服务器,里面有个目录叫 syncdir,则指令如下(另外,我们可以把客户端的密码文件保存在一个文件里,内容很简单每行就是用户名:密码的格式:username:password):

# rsync -avzu --progress --password-file=/etc/rsync.secret username@target-server::syncdir /path/to/syncdir

 

13、关于系统语言与乱码

对于国内的 Linux 用户,经常遇到 Linux 上的中文乱码或者其他部署应用的乱码问题,这个一般和系统的语言环境有关系,例如 JAVA 的默认语言环境就是系统的语言环境,所以在 Linux 下应该先用 locale 命令打印出你所在的系统的语言环境。

对于中文环境支持,我们可以在用户的启动脚本里面加入:

LC_ALL=zh_CN.GB2312
LANG=zh_CN.GB2312
export LC_ALL
export LANG

来解决中文乱码问题,或者你也可以修改 /etc/sysconfig/i18n 来改变系统默认的语言环境。

 

14、关于 JVM 的一些救急命令
1)jstat
jstat -gccapacity  <jpid>:JVM各区的剩余状态
jstat -gcutil <jpid>:JVM各区的占用情况
jstat -gccause <jpid>:jstat -gcutil基础加上gc的原因
另外可以指定更新频率,如-h5 1s:每一秒更新一次,并每隔5条加上header显示
2)jps
目前正在运行中的java进程
3)jmap
jmap -dump:format=b,file=jmap.log <jpid>:生成heap dump文件
jmap -heap <jpid>:显示jvm heap总体情况
jmap -histo:live <jpid> :显示类实例占用内存情况
4)jstack
jstack -l <jpid>:显示线程阻塞/死锁情况

 

15、SecureCRT/Putty 支持 OpenSSH 的私钥登录
1) SecureCRT
把私钥(id_rsa)和公钥(id_rsa.pub)保存到你需要的目录下(如果你只有私钥,那么先通过 ssh-keygen -e -f id_rsa >> id_rsa.pub 生成公钥)。
然后打开 Session Option > Connection > SSH2 选择 Authentication > Public Key 然后点击 Properties 选择刚才保存的公钥(id_rsa.pub)文件即可。
2) Putty
使用 puttygen.exe 菜单 Conversions > Import key 选择私钥(id_rsa),然后点击 Save private key 保存成 Putty 格式的私钥(id_rsa.ppk),最后在配置连接的时候就使用这个私钥登录即可。另外,WinSCP 使用的也是 Putty 格式的 ppk 密钥文件。

 

 

原文:http://blog.csdn.net/shagoo/article/details/4692385