linux常用小技巧一

Linux Tips

Running new linux kernel without rebooting [RHEL/CentOS]

You have that server you can’t reboot but need to patch the kernel NOW (eg. #kernel flaw found#).. well, you can try this out.

First of all, we print out running kernel version:

# uname -r
2.6.32-71.29.1.el6.i686

Ok, we have to patch:

# yum update kernel*

Grab the kexec tools:

# yum install kexec-tools

Now we get last installed kernel version release and put it on a var:

# latestkernel=`ls -t /boot/vmlinuz-* | sed "s/\/boot\/vmlinuz-//g" | head -n1`

# echo $latestkernel
2.6.32-220.4.1.el6.i686

Now we need to load the new kernel version in memory:

# kexec -l /boot/vmlinuz-${latestkernel} --initrd=/boot/initramfs-${latestkernel}.img --append="`cat /proc/cmdline`"

Finally, we can issue a reset:

# kexec -e

..and.. wow, we lost the system! ..Well, not exactly.

The system will “restart without restarting”..something like a fast reboot, without performing BIOS checks (and you know how long can a full system restart last).

# uname -r
2.6.32-220.4.1.el6.i686

It worked!

* Be aware that kernel reset will perform a connection reset as well, together with resetting your uptime, so if you’re searching for something to grant your uptime record while security patching, well, this is not for you.

rpm作成エラー

# rpmbuild -bb BitTornado.spec
<省略>
英語の場合
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/BitTornado-0.3.18-1-buildroot
error: Installed (but unpackaged) file(s) found:

伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/BitTornado-0.3.18-1-buildroot
エラー: インストール済み(ただし未伸張)ファイルが見つかりました:
   /usr/local/bin/bt-t-make.pyc
   /usr/local/bin/bt-t-make.pyo
   /usr/local/bin/btcompletedir.pyc
<省略>

以下のチェックコマンドがマクロに定義されているためっぽい。

# rpmbuild --showrc | grep __check
-14: __check_files      /usr/lib/rpm/check-files %{buildroot}

–defineオプションで定義されているマクロを消してあげれば、OK。

# rpmbuild -bb --define="__check_files %{nil}" BitTornado.spec

禁用virbr0

# virsh net-destroy default
# virsh net-undefine default
# service libvirtd restart
# ifconfig

sshで帯域制限(pvコマンド)

$ sudo apt-get install pv
$ pv -L 3m 1G.bin  > hoge
14MB 0:00:38 [2.87MB/s] [========>                                                                             ] 11% ETA 0:05:03
$ cat 1G.bin |pv -L 3m > hoge
9MB 0:00:03 [   3MB/s] [     <=>

sshで使う時も、パイプであれば何ら変わらない。

$ ssh [email protected] 'cat ~/big-data.bin' | pv -L 3m > big-data.bin

top

linux:top中显示每个进程正在哪个CPU上执行
运行top后,按1可以看见每个CPU上的繁忙情况以及IOWAIT。
可是,我希望看到,到底哪个进程在哪个CPU上执行,到底是哪个进程导致IOWAIT很高。
认真看man top,终于找到方法:
执行top后,按f,按j,然后按空格退出,这样就出现一列#C,可以看见当前进程正在哪个CPU上执行了。
按W(大写的W),将top的配置写入配置文件,下次打开top的时候就能看见同样的配置了。

动态切换 Linux 使用的 CPU 数量

singlecore

#!/bin/bash
 
cpus_dir="/sys/devices/system/cpu"
 
for cpu in $(ls "$cpus_dir" | grep 'cpu[0-9]\+')do
        cpu_online="$cpus_dir/$cpu/online"
        if [[ -e "$cpu_online" && $(cat $cpu_online) = 1 ]]
        then
                echo 0 > "$cpu_online"
        fi
done

multicore

#!/bin/bash
 
cpus_dir="/sys/devices/system/cpu"
 
for cpu in $(ls "$cpus_dir" | grep 'cpu[0-9]\+')do
        cpu_online="$cpus_dir/$cpu/online"
        if [[ -e "$cpu_online" && $(cat $cpu_online) = 0 ]]
        then
                echo 1 > "$cpu_online"
        fi

Linux优化

修改2个文件。
1./etc/security/limits.conf
*                -       nofile          1006154
2./etc/pam.d/login
session    required     /lib/security/pam_limits.so
 
 
ulimit -a查看 下 OK
 
ulimit -HSn 1006514 只对当前用户生效,重启也失效

添加硬盘驱动到initrd.img

mount -o -loop megasr-13.15.1218.2009-1-rhel50-u3-all.img /root/megasr
cd /mnt
gzip -cd /tftpboot/initrd-centos-5.3-i386-bin-DVD.img |cpio -ivd
cd modules
gzip -cd modules.cgz |cpio -vid
cp /root/megasr/2.6.18-128.el5/i686/megasr.ko 2.6.18-128.el5/i686/
 
rm -rf modules.cgz
find 2.6.18-128.el5 |cpio -o -H crc |gzip -9 > modules.cgz
rm -rf 2.6.18-128.el5/
cd ..
modinfo -F alias /root/megasr/2.6.18-128.el5/i686/megasr.ko |sed -e 's/^/alias /' -e 's/$/ megasr/' >> modules.alias
find . |cpio -o -H newc |gzip -9 > /tftpboot/initrd7.img

查看网卡型号

kudzu --probe --class=network

Linux加载raid卡驱动

1) Create a RAID array using the Intel Embedded Server RAID Technology II RAID BIOS Configuration Utility.
2) Boot your system using RHEL disc one.
3) At boot prompt type “linux nostorage”
4) Proceed with the installation and you will see a screen which provides you with [Add device] button.
5) Click “Add Device”, a list of all drivers will appear
6) Press F2 to select driver from floppy
7) Insert the floppy with the Installer DUD image
8 ) Select device that corresponds to the floppy drive (sda in case of USB floppy)
9) After the driver is loaded the list of all drivers will appear again
10) Scroll down the driver list and select. Update megaide driver in the list
11) Click OK
12) The driver will be loaded and the list of detected devices will appear
13) Click Done
14) Complete installation with RHEL CD

SMTP认证sendMail命令

http://caspian.dotconf.net/menu/Software/SendEmail/

硬盘工作总时间

smartctl -A /dev/sdc

10个有用的linux命令

sudo !!
 
以 root 帐户执行上一条命令。
 
python -m SimpleHTTPServer
 
利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问。
 
:w !sudo tee %
 
在 Vim 中无需权限保存编辑的文件。
 
cd -
 
更改到上一次访问的目录。
 
^foo^bar
 
将上一条命令中的 foo 替换为 bar,并执行。
 
cp filename{,.bak}
 
快速备份或复制文件。
 
mtr google.com
 
traceroute + ping。
 
!whatever:p
 
搜索命令历史,但不执行。
 
$ssh-copy-id user@host
 
将 ssh keys 复制到 user@host 以启用无密码 SSH 登录。
 
ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg
 
把 Linux 桌面录制为视频。

du

#查找文件并统计文件大小
du -ch $(find ./ -type f -name  *.20100317*)

tree

tree -H localhost > tree.html  #生成html文件,-H 后为服务器地址

制作iso文件

用 mkisofs 命令制作 iso 文件

mkisofs -o file.iso xxxxx/

中文名时会出现乱码,解决方法如下

mkisofs -J -r -o file.iso xxxxx/

服务器序列号

dmidecode -s system-serial-number

序列号转express services code网站http://www.creativyst.com/Doc/Articles/HT/Dell/DellPop.htm

网卡型号

lspci |grep Ethernet

硬盘使用中不能umount

fuser -m /test
/test:                2241  2331
kill 进程之后可以umount

只读分区重新mount

mount -w -o remount,rw /dev/VolGroup00/LogVol00 /

并发数

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

label

e2label   /dev/hda3
#将显示/dev/hda3分区的卷标。

e2lable   /dev/hda3   /DATA
#把/dev/hda3分区的卷标设为/DATA

tar

tar lcvf - .|(cd /mnt/temp; tar xpvf - )   #全盘备份到/mnt/temp

dd

创建一个100M的文件

dd if=/dev/zero of=file.dat bs=1024k count=100

SSH

解決ssh连接时 unprotected private key file 问题
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/home/kakasi/programming/planetlab' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.


原因是我把private key跟public key改过权限
"chmod 0600 [private key file]"
就可以了

iptables

实现:Linux主机做路由,为子网实现共享上网。2个IP,一个公网IP(22.33.44.55),一个内外网关(192.168.0.254)。

  首先打开路由转发,并且为了保证开机重启后生效。如下操作:
    1:修改/etc/sycctl.conf,打开路由转发。
    [root@kook ~]# vi /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    2:立即生效
    [root@kook ~]# sysctl -p
    net.ipv4.ip_forward = 1
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    kernel.sysrq = 0
    kernel.core_uses_pid = 1
    net.ipv4.tcp_syncookies = 1
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.shmmax = 4294967295
    kernel.shmall = 268435456
    添加iptables的NAT,同样保证开机路由生效。
    1:添加iptable的NAT
    [root@kook ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
    2:修改默认iptables,保障重启开机后仍然生效。
    [root@kook ~]# iptables-save > /etc/sysconfig/iptables
    3:让iptables开机启动
    [root@kook ~]# chkconfig iptables on
    [root@kook ~]# chkconfig ——list iptables
    iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
    在子网下测试,是否可以上网。完成。

NFS

yum -y install nfs*
service portmap start

配置文件/etc/exports内容如下:

          $ cat /etc/exports
          /home/share 192.168.102.0/24(rw,sync) *(ro)

配置说明: 对192.168.102.15赋予读写权限,其他机器仅有只读权限。

4 在客户机上查看NFS的资源共享情况

          # showmount -e 192.168.102.47
          Export list for 192.168.102.47:
          /home/share (everyone)

5 使用mount命令即可挂栽共享资源在客户机 192.168.102.15 上加载共享资源

          # mount 192.168.102.47:/home/share /mnt

6 一些NFS共享的常用参数:

          ro                      只读访问
          rw                      读写访问
          sync                    所有数据在请求时写入共享
          async                   NFS在写入数据前可以相应请求
          secure                  NFS通过1024以下的安全TCP/IP端口发送
          insecure                NFS通过1024以上的端口发送
          wdelay                  如果多个用户要写入NFS目录,则归组写入(默认)
          no_wdelay               如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
          hide                    在NFS共享目录中不共享其子目录
          no_hide                 共享NFS目录的子目录
          subtree_check           如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
          no_subtree_check        和上面相对,不检查父目录权限
          all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
          no_all_squash           保留共享文件的UID和GID(默认)
          root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认)
          no_root_squash          root用户具有根目录的完全管理访问权限
          anonuid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的UID
          anongid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的GID

SSH密钥

$ ssh-keygen -t rsa   (su到想要生成密钥的用户)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  <-密钥路径
Enter passphrase (empty for no passphrase): <-密钥保护密码
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. <-私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <-公钥
The key fingerprint is:
17:28:4c:c3:e4:18:d4:c2:31:bd:be:a7:a9:d4:a8:48 [email protected]

公有密钥写入验证文件

cat id_rsa.pub >> authorized_keys

修改sshd_config配件文件如下

Port                            22
Protocol                        2
HostKey                         /etc/ssh/ssh_host_rsa_key
HostKey                         /etc/ssh/ssh_host_dsa_key
KeyRegenerationInterval         1h
SyslogFacility                  AUTHPRIV
LoginGraceTime                  5m
PermitRootLogin                 yes
PubkeyAuthentication            yes   #使用密钥验证
AuthorizedKeysFile              .ssh/authorized_keys  #验证文件
IgnoreRhosts                    yes
HostbasedAuthentication         no
PasswordAuthentication          yes   #如果只想使用密钥进行ssh登陆的话,把yes改为no
PermitEmptyPasswords            no
ChallengeResponseAuthentication no
Subsystem        sftp    /usr/libexec/openssh/sftp-server

修改后重启ssh服务

小技巧

查看WEB主页运行的服务
w3m -dump_head http://www.linuxfans.org
取消mput询问,关闭交互方式

prompt

prompt off

把文件名拆分处理,可以任意修改文件名

find -name '*.png' -printf "%f\n"|awk -F'.' '{print $1}'|xargs -i{} mv {}.png {}_hd.png
rename .png _hd.png *.png

删除含有特殊字符的文件

ls -i filename #显示文件节点号

find ./ -inum 节点号 -print -exec rm {} -rf \;

安装EPEL

RHEL 4: su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-4.noarch.rpm'
RHEL 5: su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm’
RHEL 5: su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm'

安装RPMforge

rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uvh http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

selinux设置

#setenforce 0  #修改后不重启生效

#cacti设置时需要关闭selinux

制作可引导光盘

mkisofs -J -R -V -v -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \
-o /home/admin/Centos-5.2.iso /home/admin/minicd

无人值守光盘

目地:利用kickstart,制作无人值守安装光盘
作用:对于一些不熟悉linux系统安装的,用自制的无人值守安装光盘,完成整个系统的安装.
 
1、准备安装源
#mount /dev
/cdrom /mnt
#mkdir /data   #建立自建ISO源目录
#cd /mnt ;tar lcvf - .|(cd /cdrom; tar xpvf - )   #注意不要用*,要用.号代替,如果用*,隐藏文件将不会拷贝
 
2、修改启动加载设置
#vim /data/isolinux/isolinux.cfg
default test install
prompt 1
timeout 50
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label test install
   kernel vmlinuz
   append ks=cdrom:/ks.cfg initrd=initrd.img
label linux
  kernel vmlinuz
  append initrd=initrd.img
label text
  kernel vmlinuz
  append initrd=initrd.img text
label ks
  kernel vmlinuz
  append ks initrd=initrd.img
label local
  localboot 1
label memtest86
  kernel memtest
  append -
1)设置默认启动为test install
2)设置开机后等候5分钟
3)新增的操作系统,代号为test install
4)kickstat配置文件的定义,利用这个参数,可以让Anaconda从安装光盘顶层目录中的ks.cfg作为kickstart配置文件。注:kickstart的配置文件,可以放在其它目录,比如isolinux目录下,如果在顶层目录,文件名必须为ks.cfg,放在其他位置,可以自己指定.
 
3.kickstart 配置文件的制作:
可以对/root/anaconda-ks.cfg文件进行修改,生成自己所需要ks.cfg,也可以利用system-config-kickstart图形化生成
#cat ks.cfg
#platform=x86, AMD64, or Intel EM64T
# System authorization information
install
text
cdrom
lang en_US.UTF-8
keyboard us
reboot
key --skip
auth  --useshadow  --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --drives=hda --initlabel
# Use graphical install
#graphical
# Firewall configuration
firewall --disabled
# Run the Setup Agent on first boot
firstboot --disable
skipx
# Installation logging level
logging --level=info
# Use network installation
 
# Reboot after installation
reboot
#Root password
rootpw --iscrypted $1$jcKDPffl$8uVOA.SIV39O67W0HOM7G.
 
# SELinux configuration
selinux --disabled
# System timezone
timezone  America/New_York
# Install OS instead of upgrade
 
# X Window System configuration information
xconfig  --defaultdesktop=GNOME --depth=8 --resolution=640x480
part /boot --fstype ext3 --size=100 --ondrive=hda
part / --fstype ext3 --size=5000 --ondrive=hda
part swap --size=2000 --ondrive=hda
part /home --fstype ext3 --size=5000
 
 
%packages
@development-libs
@development-tools
@system-tools
@admin-tools
 
 
4、产生自制安装光盘
1)删除各目录中的TRANS.TBL文件
#find /data -type f -name "TRANS.TBL"|xargs rm -f
 
2)删除isolinux/boot.cat文件
#rm /data/isolinux/boot.cat
 
3)将isolinux/中所有文件设为可写入
chmod +w /data/isolinux/*
 
4)制作ISO
#mkisofs -o /centos.iso -J -r -v -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "centos install DVD"  /data (光盘源目录)
 
5)产生检验码
默认情况下,系统是没有安装implantisomd5工具,需要单独安装两个rpm包:
anaconda-11.1.2.195-1.el5.centos.i386.rpm
anaconda-runtime-11.1.2.195-1.el5.centos.i386.rpm
 
安装完以后,将会在/usr/lib/anaconda-runtime生成一批文件
#/usr/lib/anaconda-runtime/implantisomd5 --force /centos.iso
 
6)在linux下刻录光盘
#growisofs -dvd-compat -Z /dev/cdrom=/centos.iso
完成刻录!
 
 
制作过程中出现的问题:
1)启动过程中,提示cd-rom  没有找到
解决方法:注意检查ISO顶级目录是否存在.discinfo文件,如果这个文件不存在,将导致初始化过程中找不到光盘。
 
2)在安装包的过程中,提示一些包,不能被打开
解决方法:这有可能在制作ISO的过程中,RPM有损坏,可以用UltraISO工具去加载ISO删除这个包,然后,从完整的源盘的增加这个包。另外,也可以考虑重新制作。
 
3)光盘启动,提示checksum error,光盘校验码出错
解决方法:用implantisomd5工具,产生检验码,并保证,源盘数据完整

忘记root密码解决办法

1. 用RedHat标准安装盘启动系统当出现提示符时敲入:linux rescue就会以修复模式启动系统

2. 系统启动完毕后,会将硬盘mount到/mnt/sysimage,届时会有提示

3. 进入提示符后,敲入命令:

chroot /mnt/sysimage

4. 敲入命令:

passwd

更改密码

5. 连续敲入两次exit,即重起系统,将光盘拿出,按正常模式启动系统

除了用光盘引导rescue模式,还有一种方法是用启动装载器来进入单用户模式:

1. grub

进入启动画面之后,敲入“e”,把光标移动到kernel …那一行,再敲入“e”,在kernel 一行的最后加上空格single,回车敲入“b”,启动系统,即进入单用户模式,这个时候就可以用passwd命令改密码了。

2. lilo

进入lilo命令行模式,敲入linux single,即进入单用户模式。passwd …

如果grub/lilo设了密码,一定要记住才行。要是忘了grub/lilo的密码,就只有用rescue模式了。over

小技巧总结

/usr/sbin/lsof -i :110    #查看什么程序运行在110端口下
dmidecode -t memory  #查看内存
cat /proc/cpuinfo    #查看CPU
hdparm -cdtT /dev/sda  #硬盘读写速度
hdparm -i /dev/hda   #硬盘序列号,SCSI无效
sdparm --quiet --page=sn /dev/sda  #SCSI硬盘序列号,sdparm需要安装
                                   #可通过rpmforge源,yum方式安装
unalias cp
-f 强制复制生效
cp -f
dos2unix filename.ldif
iconv -f gb2312 -t UTF-8 -o filename.ldif.utf8 filename.ldif
#Linux转码功能,可以让openldap支持中文导入
grep -n "^$" filename #显示空行行号
find . -name "whatever.*" -print0 | rsync -av --files-from=- --from0 ./ remotehost:/destination/
#查找指定文件,rsync到远程服务器,并创建递归目录
# -e "/usr/bin/ssh -oNoneSwitch=yes" 禁用数据加密验证,需要重新编译ssh支持

find lb06* -name "*DATE*_*" -print0 |rsync -av -e "/usr/bin/ssh -oNoneSwitch=yes" ¥
--files-from=- --from0 ./ remotehost:/destination/

 find lb* -name adlantis_sp -print0 -exec cp -aRv {} --parents --target-directory=/mnt/usb060b/ \;

查找并排除多个目录

find . -path './media' -prune -o -path './images' -prune -o -path './backups' -prune -o -print

新建用户

#!/bin/bash
 
useradd $1
echo mypassword | passwd --stdin $1
 
# Invocation ./myscript.sh frank

crontab

第一道第五个字段的整数取值范围及意义是:

0~59 表示分

1~23 表示小时

1~31 表示日

1~12 表示月份

0~6 表示星期(其中0表示星期日)

下记为使用例

#每天早上6点
106* * * date

#每两个小时
0*/2* * * date

#晚上11点到早上8点之间每两个小时,早上部点
0 23-7/2,8* * * date

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4* mon-wed date

#1月份日早上4点
0 4 1 jan* date

ping

ping -c 10 127.0.0.1

发送10个数据包到127.0.0.1等结果

rsync

/usr/bin/rsync -vzrtopg --progress --delete --exclude-from=/etc/rsyncd.exclude
 --password-file=/etc/rsyncd.pwd [email protected]::home /home

#此命令为一行

rsync快速删除文件夹

mkdir /tmp/test
rsync --delete-before -a -H -v --progress --stats /tmp/test/ log/

rsync参数说明

选项说明

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息

rsync foo/bar/foo.c remote:/tmp/

则在/tmp目录下创建foo.c文件,而如果使用-R参数:

rsync -R foo/bar/foo.c remote:/tmp/

则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。

-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定替代rsh的shell程序
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=FORMAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息

制作RPM安装包

默认安装包生成目录如果没有,需要自己建

for dir in RPMS SRPMS SPECS SOURCES BUILD; do mkdir -p /usr/src/redhat/$dir; done
mkdir /usr/src/redhat/RPMS/noarch
mkdir /usr/src/redhat/RPMS/x86_64
for x in 3 4 5 6; do mkdir /usr/src/redhat/RPMS/i$x\86; done
echo "%_topdir /usr/src/redhat" > ~/.rpmmacros

rpm安装包的spec文件例子:rpmtest.spec

Summary: example
Name: rpmtest
Version: 0.1
Release: 1
Group: Application/User
License: Share
Packager: rpmtest
%description
#rpmtest example
%changelog
* Sun Jun 6 2004 CSP
- build for the first time.
%prep
%build
%install
%files
/usr/lib/rpmtest.out

生成spec文件后,在root的用户下使用rpmbuild -bb rpmtest.spec生成rpm安装包rpmtest-0.1-1.i386.rpm。

通过rpm -i –test rpmtest-0.1-1.i386.rpm测试程序是否可以安装。

通过rpm -ivh rpmtest-0.1-1.i386.rpm安装程序

通过rpm -e rpmtest-0.1-1卸载程序

RPM Error

specifies multiple packages

rpm -e --allmatches <packages-name>

grep

grep 'devpts \| sysfs' /etc/fstab #显示两个关键字

md5sum

md5sum * > md5sum.txt
md5sum -c md5sum.txt

防止误删除

touch ./-i

gpg签名

参考网站
http://fedoranews.org/tchung/gpg/

1 用gpg生成私钥公钥对(过程中需要回答各种问题,一般除了名字和email以外,都可以直接敲回车使用默认值)

$ gpg --gen-key
#需要硬盘有读写才能生成乱序数列
$dd if=/dev/urandom of=/tmp/mass bs=1M count=512

2 列出来看一下是否生成

$ gpg --list-keys

3 导出公钥到一个文件(供客户端验证私钥时使用)

$ gpg --export -a '生成钥匙对时使用的名字' > RPM-GPG-KEY

4 导入公钥,(服务器端导入是为了验证,以后每个客户端都要导入一次)

$ sudo rpm --import RPM-GPG-KEY

5 导入之后列一下

$ rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'

6 新建一个~/.rpmmacro文件,内容只要两行,如下

%_signature gpg

%_gpg_name 生成钥匙对时使用的名字

7 终于可以签了

$ rpm --addsign rpm包

8 验证一下

$ rpm -K rpm包

kill信号详解

$kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
 
其中前面31个信号为不可靠信号(非实时的,可能会出现信号的丢失),后面的信号为可靠信号(实时的real_time,对信号
排队,不会丢失)。
 
1) SIGHUP (挂起) 当运行进程的用户注销时通知该进程,使进程终止
 
2) SIGINT (中断) 当用户按下时,通知前台进程组终止进程
 
3) SIGQUIT (退出) 用户按下或时通知进程,使进程终止
 
4) SIGILL (非法指令) 执行了非法指令,如可执行文件本身出现错误、试图执行数据段、堆栈溢出
 
5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用
 
6) SIGABRT (异常中止) 调用abort函数生成的信号
 
7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错. eg: 访问一个四个字长的整数, 但其地址不是4的倍数.
 
8) SIGFPE (算术异常) 发生致命算术运算错误,包括浮点运算错误、溢出及除数为0.
 
9) SIGKILL (确认杀死) 当用户通过kill -9命令向进程发送信号时,可靠的终止进程
 
10) SIGUSR1 用户使用
 
11) SIGSEGV (段越界) 当进程尝试访问不属于自己的内存空间导致内存错误时,终止进程
 
12) SIGUSR2 用户使用
 
13) SIGPIPE 写至无读进程的管道, 或者Socket通信SOCT_STREAM的读进程已经终止,而再写入。
 
14) SIGALRM (超时) alarm函数使用该信号,时钟定时器超时响应
 
15) SIGTERM (软中断) 使用不带参数的kill命令时终止进程
 
17) SIGCHLD (子进程结束) 当子进程终止时通知父进程
 
18) SIGCONT (暂停进程继续) 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞.
 
19) SIGSTOP (停止) 作业控制信号,暂停停止(stopped)进程的执行. 本信号不能被阻塞, 处理或忽略.
 
20) SIGTSTP (暂停/停止) 交互式停止信号, Ctrl-Z 发出这个信号
 
21) SIGTTIN 当后台作业要从用户终端读数据时, 终端驱动程序产生SIGTTIN信号
 
22) SIGTTOU 当后台作业要往用户终端写数据时, 终端驱动程序产生SIGTTOU信号
 
23) SIGURG 有"紧急"数据或网络上带外数据到达socket时产生.
 
24) SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。
 
25) SIGXFSZ 当进程企图扩大文件以至于超过文件大小资源限制。
 
26) SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
 
27) SIGPROF (梗概时间超时) setitimer(2)函数设置的梗概统计间隔计时器(profiling interval timer)
 
28) SIGWINCH 窗口大小改变时发出.
 
29) SIGIO(异步I/O) 文件描述符准备就绪, 可以开始进行输入/输出操作.
 
30) SIGPWR 电源失效/重启动
 
31) SIGSYS 非法的系统调用。

你可能感兴趣的:(linux常用小技巧一)