工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.51099.com 注册 | 登陆
浏览模式: 标准 | 列表2011年02月的文章

rpm scripts

rpm --scripts -qp xxxxpackage 

sudo

Linux下Sudo命令的使用方法 “Sudo” 是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务,比如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配置文件,像/etc/mtab, /etc/samba/smb.conf等。这样以来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。
sudo的特点
Sudo能够限制用户只在某台主机上运行某些命令。
Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
 
sudo配置文件
默认配置文件位置:/etc/sudoers
 [root@localhost bin]# cat /etc/sudoers
# sudoers file.
# This file MUST be edited with the visudo command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now
用户可以用visudo编辑sudoers配置文件,不过也可以直接通过修改sudoers文件实现。
 
别名类型(Alias_Type):别名类型包括如下四种
Host_Alias   定义主机别名;
User_Alias   用户别名,别名成员可以是用户,用户组(前面要加%号)
Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许切换至的用户;
Cmnd_Alias  定义命令别名;
 
定义用户别名
User_Alias    TEST = ser1,user2,user3
User_Alias    Yield = user1,user2,user3
User_Alias
TEST= user1,user2,user3: Yield=user1,user2,user3
 
定义主机别名
Host_Alias    THOST = 192.168.1.0/255.255.255.0
Host_Alias    YHOST = 172.18.0.0,172.18.1.0/24
Host_Alias    MHOST = PC-001,PC-002,PC-003,10.0.0.0,255.255.255.0,
 
定义命令别名
Cmnd_Alias    DISKMAG = /sbin/fdisk,/bin/df
Cmnd_Alias    PWMAG = /usr/sbin/reboot,/usr/sbin/halt
Cmnd_Alias    SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \   
                                /usr/local/bin/tcsh, /usr/bin/rsh
Cmnd_Alias     KILL = /usr/bin/kill:PWMAG = /usr/sbin/reboot,/usr/sbin/halt 
 
定义操作类型
Runas_Alias   DBADM = db2,mysql,oracle
 
/etc/sudoers中的授权规则:
授权规则是分配权限的执行规则,我们前面所讲到的定义别名主要是为了更方便的授权引用别名;如果系统中只有几个用户,其实下放权限比较有限的话,可以不用定义别名,而是针对系统用户直接直接授权,所以在授权规则中别名并不是必须的;
 
授权用户  主机=命令动作
test  ALL=/bin/rm, /bin/kill
表示test用户在任何主机中执行rm和kill操作。通过sodo –l 来查看test用户可执行的命令。
[switch@localhost ~]$ sudo -l
User switch may run the following commands on this host:
    (root) /bin/ls
(root) /bin/rm
[switch@localhost ~]$ sudo ls /root/
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these two things:
         #1) Respect the privacy of others.
         #2) Think before you type.
Password:
anaconda-ks.cfg  Desktop  install.log  install.log.syslog
test  ALL=(root)  NOPASSWD: /bin/rm, /bin/kill
test  ALL=(test) /bin/ls
(root)  表示切换到哪些用户或用户组,默认为root用户,(ALL) 代表所有用户。
NOPASSWD:   系统默认的情况下是需要用户密码,加入NOPASSWD参数后就无需用户输入自己密码。
%member  ALL=/bin/*,/sbin/*
表示member中所有成员在所有主机上以root身份执行/bin和sbin下所有命令
Member  ALL=/bin/*,!/bin/kill
表示member中所有成员在所有主机上以root身份执行/bin,但kill命令除外。
 
sudo日志
在sudo中管理员可以启用sudo日志,通过sudo日志文件跟踪用户执行的任何指令。
Defaults logfile=/var/log/sudo.log   #指定sudo.log
Defaults loglinelen=0    #表示不记录空命令行
Defaults !syslog            #表示不记录到/var/log/messages
 
[root@localhost bin]# cat /var/log/sudo.log
Mar  3 03:17:30 : root : TTY=pts/0 ; PWD=/bin ; USER=root ; COMMAND=list
Mar  3 03:17:37 : switch : TTY=pts/0 ; PWD=/home/switch ; USER=root ;
    COMMAND=/bin/ls -l /root/ggg
Mar  3 03:17:38 : switch : TTY=pts/0 ; PWD=/home/switch ; USER=root ;
COMMAND=/bin/ls -l /root
 
sudo命令格式如下:
  sudo -K -L -V -h -k -l -vsudo [-HPSb] [-a auth_type] [-c
  class-] [-p prompt] [-u username#uid] {-e file [...] -i -s command}
  下面我们再来看一下sudo其它常用的一些参数:
  选项    含义    作用
  sudo  -h   Help        列出使用方法退出。
  sudo  -V   Version     显示版本信息并退出。
  sudo  -l     List     列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
  sudo  -u username|#uid  User     以指定用户身份执行命令后面的用户是除root以外的,可以是用户名,也可以是#uid。
  sudo  -k     Kill     清除“入场卷”上的时间,下次再使用sudo时要再输入密码。
  sudo  -K     Sure kill     与-k类似,但是它还要撕毁“入场卷”,也就是删除时间戳文件。
  Sudo  -b command     Background     在后台执行指定的命令。
 
别名实例
User_Alias    NORMAL = localuser,pubuser,shuser,backuser
User_Alias    MANGE =  admin,member,switch
User_Alias    POWER =  shutuser
User_Alias    TEST = adtest,test1,test2,test3
 
Host_Alias    APPSYS = web,ftp,mail
Host_Alias    PRODUCT = db1,db2,db3,backup
Host_Alias    TESTSYS = 192.168.2.0/255.255.255.0
 
Cmnd_Alias    FILE = /bin/ls,/bin/ln,/bin/cp,/bin/cat,/bin/chmod,/bin/cut,/bin/more,/bin/mv,\
                    /bin/vi,/bin/rm,/bin/rmdir,/bin/touch
Cmnd_Alias    ADSHELL = /bin/*,/sbin/*
Cmnd_Alias    SHUT = /sbin/shutdown,/sbin/reboot,/sbin/halt
 
Runas_Alias   DBA = mysql
 
#NORMAL只能在PRODUCT网络和APPSYS中执行FILE指令
NORMAL APPSYS = FILE:NORMAL PRODUCT = FILE
 
#MANGE用户组可在所有网络上执行/bin/sbin下所有指令
MANGE ALL = ADSHELL
 
#admin用户可在任何网络环境中执行任何所有命令除TESTSYS网络主机外
admin ALL =(root) NOPASSWD: ALL:!admin=TESTSYS
 
#admin用户可以修改所有网络除root外用户口令
admin ALL = /usr/bin/passwd[A-z]*,!/usr/bin/passwd root
 
#MANGE组无需输入口令可在所有网络上执行ADSHELL,和SHUT命令
MANGE ALL = NOPASSWD: ADSHELL,SHUT
 
#shutuser用户可在所有网络环境中执行ADSHELL命令
shutuser ALL =(ALL) ADSHELL
 
#NORMAL组可以在APPSYS网络上su除root之外的所有人
NORMAL APPSYS=/bin/su [!-]*,!/bin/*root*
 
#MANGE组用户可在PRODUCT网络环境上执行 mysql用户指令
MANGE PRODUCT=( DBA) /usr/local/mysql/bin/*

linux下多线程下载工具

Axel是命令行下的多线程下载工具,支持断点续传,速度通常情况下是Wget的几倍。
下载 http://axel.alioth.debian.org/ 
http://alioth.debian.org/frs/download.php/3015/axel-2.4.tar.gz

安装

# tar zxvf axel-1.0b.tar.gz
#cd axel-1.0b
#./configure
#make
#make install

基本的用法如下:

#axel [选项] [下载目录] [下载地址]

-s [x]:指定每秒下载最大比特数。
n [x]:指定同时打开的线程数。
-o f:指定本地输出文件。
-S [x]:搜索镜像并从X servers服务器下载。
-N:不使用代理服务器。
-v:打印更多状态信息。
-a:打印进度信息。
-h:该版本命令帮助。
-V:查看版本信息号。
 

一个典型下载如下:
# axel -n 10 -o /home/zm/  http://lab.sa.bupt.cn/ewebeditor/UploadFile/200752117642450.doc

用10线程将指定路径的文件下载到/home/zm目录下。

---------------------

Linux多线程下载工具myget,替换单线程wget

http://myget.sourceforge.net/

 

经测试,下载一个56M的文件,wget ,aexl,myget的下载时间都差不多,体现不出多线程的感觉.

不知是和服务端,线路有关还是怎样

--------------------------

lftp -c "pget -c -n 5 url"

Linux 输入输出重定向

linux重定向
  I/O重定向详解及应用实例
  1、 基本概念(这是理解后面的知识的前提,请务必理解)
  a、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;
  b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;
  c、 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;
  d、 用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
  e、 0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
  f、 在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
  g、 管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;
  h、 tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
  i、 bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令;
  j、 ( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的Standard input, output, and error plus any other open file descriptors。
  k、 exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。
  2、 基本IO
  cmd > file 把 stdout 重定向到 file 文件中;
  cmd >> file 把 stdout 重定向到 file 文件中(追加);
  cmd 1> fiel 把 stdout 重定向到 file 文件中;
  cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
  cmd 2> file 把 stderr 重定向到 file 文件中;
  cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
  cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);
  cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout;
  cat <>file 以读写的方式打开 file;
  cmd < file cmd 命令以 file 文件作为 stdin;
  cmd << delimiter Here document,从 stdin 中读入,直至遇到 delimiter 分界符。
  3、 进阶IO
  >&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;
  <&n 标准输入复制自文件描述符 n;
  <&- 关闭标准输入(键盘);
  >&- 关闭标准输出;
  n<&- 表示将 n 号输入关闭;
  n>&- 表示将 n 号输出关闭;
  上述所有形式都可以前导一个数字,此时建立的文件描述符由这个数字指定而不是缺省的 0 或 1。如:
  ... 2>file 运行一个命令并把错误输出(文件描述符 2)定向到 file。
  ... 2>&1 运行一个命令并把它的标准输出和输出合并。(严格的说是通过复制文件描述符 1 来建立文件描述符 2 ,但效果通常是合并了两个流。)
  我 们对 2>&1详细说明一下 :2>&1 也就是 FD2=FD1 ,这里并不是说FD2 的值 等于FD1的值,因为 > 是改变送出的数据信道,也就是说把 FD2 的 “数据输出通道” 改为 FD1 的 “数据输出通道”。如果仅仅这样,这个改变好像没有什么作用,因为 FD2 的默认输出和 FD1的默认输出本来都是 monitor,一样的! 但是,当 FD1 是其他文件,甚至是其他 FD 时,这个就具有特殊的用途了。请大家务必理解这一点。
  exec 0exec 1>outfilename # 打开文件outfilename作为stdout。
  exec 2>errfilename # 打开文件 errfilename作为 stderr。
  exec 0<&- # 关闭 FD0。
  exec 1>&- # 关闭 FD1。
  exec 5>&- # 关闭 FD5。

rpm卸载错误

如:error: "" specifies multiple packages

增加--allmatches选项搞掂,如:rpm -e --allmatches filename