Linux 操作笔记
1. 常用操作... 2
1.1.Samba共享... 2
1.2.访问NTFS分区... 4
1.3.FTP命令全及代码集... 4
1.4./etc/fstab文件使用... 6
1.5.Apache SSI 设置... 8
1.6.apache打开或者关闭列目录功能... 8
1.7.开机自动启动samba. 9
1.8.linux 下让JAVA生成的图形可显示... 9
1.9.APACHE配置... 10
基本参数说明 ... 10
1.10.Linux 特定变量参数... 10
1.11.自动检测WEB服务器状态并启动(Linux)... 11
1.12.动态更新域名(www.3322.org)... 12
1.12.特殊参数... 12
1.13.用shell检查JSP文件... 13
1.14.linux-Tomcat内存和图型显示配置... 13
1.15.网络设置... 13
1.16. Man解释SUDO.. 17
1.17.linux默认语言环境变量设置... 18
2.常用命令... 18
2.1.suid/guid. 18
2.2.group/id. 19
2.3.umask. 19
2.4.ln. 20
2.5.find. 20
2.6.cron/crontab. 21
2.7.nohup命令... 22
2.8.rpm常用命令... 23
2.9.sed命令... 23
2.9.1. sed怎样读取数据... 23
2.9.2. sed语法... 23
2.9.3.常用操作... 25
1. 常用操作
1.1.Samba共享
NetBIOS 是一个为了便于开发基于局域网的资源共享应用程序而设计的 API 。之后,产生了基于 NetBIOS 的 NetBEUI 协议和 NBT(NetBIOS OVER TCP/IP) 协议。 NBT 协议进一步发展为 SMB 和 CIFS 协议。 Windows 的局域网默认采用的就是 NetBEUI 协议,而 SAMBA 软件包所使用的就是 CIFS 协议,结果就是,装有 SAMBA 软件包的机器能够和 Windows 网络的机器进行通信,让没有 NetBEUI 协议的 UNIX 、 LINUX 机器在 SAMBA 的帮助下和 Windows 网络共享资源。
安装 Samba 组件
[root@ahpeng root] rpm -qa | grep samba
如果结果出现以下所示的 5 个软件包,则表示已经安装:
samba-swat-2.2.7a-7.9.0
samba-2.2.7a-7.9.0
redhat-config-samba-1.0.4-1
samba-common-2.2.7a-7.9.0
samba-client-2.2.7a-7.9.0
查询 / 连接宿主机的共享资源
smbclient – L WindowsHostName
smbclient //WindowsHostName/ShareName
smbmount //Peter/Share /mnt/WinShare
启动 Samba 服务器
/sbin/service smb start
Linux 访问 Windows 客户机
smb 启动后,不用作任何设置你已经可以访问运行 Windows 的机器了。现在有两台机器,分别运行着 Linux 和 Windows98, 主机名称分别是 redhat 和 lily 。 lily 上有目录“ download ”,有打印机“ HP ”,目录设置为“完全访问”,密码是“ abc ”。
访问 lily 上的共享目录。
第一步,查看 lily 这台机器的的共享资源,“ smbclient -L //lily ”,当提示时,输入密码后会列出 lily 上可用的资源。
第二步,“ mkdir /mnt/download ” , 在“ /mnt ”下建立一个目录。
第三步,“ mount -t smbfs -o username=abc,password=abc //lily/download /mnt/download ”,把 lily 上的共享目录挂接到 redhat 的“ /mnt/download ”下面。接下来,你可以象使用本地硬盘那样访问该共享目录了。你也可以编辑“ /etc/rc.d/rc.local ”,把“ mount -t smbfs -o username=abc,password=abc //lily/download /mnt/download ”添加到文件的末一行,这样,系统一启动,该共享目录也就挂接好了。
Windows 访问 linux
在 /etc/ 下找到 smb.conf ,用 VI 编辑器打开, vi /etc/smb.conf 或 vi /etc/samba/smb.conf
[public]
# 让 windows 网上邻居能看到机器
netbios name = testsamba
# 让所有 guest 用户能访问
guest ok = yes
security = share
利用 samba-2.2.7a-7.9.0, 这是最根本的东西 , 不管用什么工具 , 掌握其原理才是最重要的 , 像网页制作一样 , 虽然工具很多 , 但一定要熟悉 HTML 语言 , 才能编的好的网页 ( 扯蛋 ! 呵呵 )
装好 samba-2.2.7a-7.9.0 之后 , 会在 /etc/samba/ 下形成己个文件
smb.conf smbpasswd smbusers lmhosts, 如果没有其中的一个 , 你可以 touch 创建
修改 smb.conf 文件
我只做简单的说明 :
guest ok 和 public 是一样的
,read only 和 writable 是相反的 , 没什么区别
workgroup=( 工作组名子 , 填上你目前的 LAN 的工作组 )
netbios=( 最好是你的机器名 , 如果把改句注消 , 默认的是你 LINUX 机器名 , 不过 , 最好还是自己填上 )
client code page=936( 默认是 850,936 是简体中文的意思 , 这个要记住 , 难道不记得你 mount 你 windows 系统下的中文名子都是 ???, 就是因为你没有加 -o iocharset=cp936 的原因 !)
guest account=nobody(guest 帐号 , 这于你定义的共享文件颊有关 , 其中 nobody 在 smbusers 里有 )
security = SHARE( 有四个级别 , 不多说 )
encrypt passwords = Yes( 加密的密码 , win98/2000 传送的密码都是加密的 , 所以这里要 yes)
以上都是 [global] 的内容 , 其实 , 很多呢 , 水平有限不多说了 .
下面就是你要开的共享的东西 , 要说明的是 , 文件夹共享的属性取决于该文件颊在 LINUX 里的权限设定
[myxfc]
comment = myxinfc
path = /home/xinfc
read only = No
guest ok = Yes
[tmp]
path = /home
valid users = hehl
write list = @staff
read only = No
guest ok = Yes
共享的设定其实很简单 , 主要是路径和权限的问题 , 这两个搞清楚了 , 应该没问题了
1.2.访问NTFS分区
The Linux-NTFS Project
http://data.linux-ntfs.org/sf-bak/rpm/rhel3.html
查看本机版本和内核
#uname –a
Linux LinuxSir01 2.4.18-14 # 1 Wed Sep 4 12:13:11 EDT 2002 i686 athlon i386 GNU/Linux
下载结尾是 athlon.rpm ,注意选择是单 CPU 还是多 CPU
安装 #rpm -ivh *.rpm
mount 分区的一些具体工作:
#mkdir /mnt/WinC
#mount -t ntfs /dev/hda1 /mnt/WinC
#cd /mnt/WinC
1.3.FTP命令全及代码集
FTP 的命令行格式为: ftp -v -d -i -n -g [ 主机名 ] ,
其中 -v 显示远程服务器的所有响应信息;
-n 限制 ftp 的自动登录,即不使用; .n etrc 文件;
-d 使用调试方式;
-g 取消全局文件名
1.![cmd[args> :在本地机中执行交互 shell , exit 回到 ftp 环境,如: !ls*.zip
2.$ macro-ame[args] : 执行宏定义 macro-name 。
3.account[password] : 提供登录远程系统成功后访问系统资源所需的补充口令。
4.append local-file[remote-file] :将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。
5.ascii :使用 ascii 类型传输方式。
6.bell :每个命令执行完毕后计算机响铃一次。
7.bin :使用二进制文件传输方式。
8.bye :退出 ftp 会话过程。
9.case :在使用 mget 时,将远程主机文件名中的大写转为小写字母。
10.cd remote-dir :进入远程主机目录。
11.cdup :进入远程主机目录的父目录。
12.chmod mode file-name :将远程主机文件 file-name 的存取方式设置为 mode ,如: chmod 777 a.out 。
13.close :中断与远程服务器的 ftp 会话 ( 与 open 对应 ) 。
14.cr :使用 asscii 方式传输文件时,将回车换行转换为回行。
15.delete remote-file :删除远程主机文件。
16.debug[debug-value] :设置调试方式, 显示发送至远程主机的每条命令,如: deb up 3 ,若设为 0 ,表示取消 debug 。
17.dir[remote-dir][local-file] :显示远程主机目录,并将结果存入本地文件
18.disconnection :同 close 。
19.form format :将文件传输方式设置为 format ,缺省为 file 方式。
20.get remote-file[local-file] : 将远程主机的文件 remote-file 传至本地硬盘的 local-file 。
21.glob :设置 mdelete , mget , mput 的文件名扩展,缺省时不扩展文件名,同命令行的 -g 参数。
22.hash :每传输 1024 字节,显示一个 hash 符号 (#) 。
23.help[cmd] :显示 ftp 内部命令 cmd 的帮助信息,如: help get 。
24.idle[seconds] :将远程服务器的休眠计时器设为 [seconds] 秒。
25.image :设置二进制传输方式 ( 同 binary) 。
26.lcd[dir] :将本地工作目录切换至 dir 。
27.ls[remote-dir][local-file] :显示远程目录 remote-dir , 并存入本地文件 local-file 。
28.macdef macro-name :定义一个宏,遇到 macdef 下的空行时,宏定义结束。
29.mdelete[remote-file] :删除远程主机文件。
30.mdir remote-files local-file :与 dir 类似,但可指定多个远程文件,如 : mdir *.o.*.zipoutfile 。
31.mget remote-files :传输多个远程文件。
32.mkdir dir-name :在远程主机中建一目录。
33.mls remote-file local-file :同 nlist ,但可指定多个文件名。
34.mode[modename] :将文件传输方式设置为 modename , 缺省为 stream 方式。
35.modtime file-name :显示远程主机文件的最后修改时间。
36.mput local-file :将多个文件传输至远程主机。
37.newer file-name : 如果远程机中 file-name 的修改时间比本地硬盘同名文件的时间更近,则重传该文件。
38.nlist[remote-dir][local-file] :显示远程主机目录的文件清单,并存入本地硬盘的 local-file 。
39.nmap[inpattern outpattern] :设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如: nmap $1.$2.$3[$1 , $2].[$2 , $3] ,则传输文件 a1.a2.a3 时,文件名变为 a1 , a2 。 该命令特别适用于远程主机为非 UNIX 机的情况。
40.ntrans[inchars[outchars> :设置文件名字符的翻译机制,如 ntrans1R ,则文件名 LLL 将变为 RRR 。
41.open host[port] :建立指定 ftp 服务器连接,可指定连接端口。
42.passive :进入被动传输方式。
43.prompt :设置多个文件传输时的交互提示。
44.proxy ftp-cmd :在次要控制连接中,执行一条 ftp 命令, 该命令允许连接两个 ftp 服务器,以在两个服务器间传输文件。第一条 ftp 命令必须为 open ,以首先建立两个服务器间的连接。
45.put local-file[remote-file] :将本地文件 local-file 传送至远程主机。
46.pwd :显示远程主机的当前工作目录。
47.quit :同 bye ,退出 ftp 会话。
48.quote arg1 , arg2... :将参数逐字发至远程 ftp 服务器,如: quote syst.
49.recv remote-file[local-file] :同 get 。
50.reget remote-file[local-file] :类似于 get , 但若 local-file 存在,则从上次传输中断处续传。
51.rhelp[cmd-name] :请求获得远程主机的帮助。
52.rstatus[file-name] :若未指定文件名,则显示远程主机的状态, 否则显示文件状态。
53.rename[from][to] :更改远程主机文件名。
54.reset :清除回答队列。
55.restart marker :从指定的标志 marker 处,重新开始 get 或 put ,如: restart 130 。
56.rmdir dir-name :删除远程主机目录。
57.runique :设置文件名只一性存储,若文件存在,则在原文件后加后缀 .1 , .2 等。
58.send local-file[remote-file] :同 put 。
59.sendport :设置 PORT 命令的使用。
60.site arg1 , arg2... :将参数作为 SITE 命令逐字发送至远程 ftp 主机。
61.size file-name :显示远程主机文件大小,如: site idle 7200 。
62.status :显示当前 ftp 状态。
63.struct[struct-name] :将文件传输结构设置为 struct-name , 缺省时使用 stream 结构。
64.sunique :将远程主机文件名存储设置为只一 ( 与 runique 对应 ) 。
65.system :显示远程主机的操作系统类型。
66.tenex :将文件传输类型设置为 TENEX 机的所需的类型。
67.tick :设置传输时的字节计数器。
68.trace :设置包跟踪。
69.type[type-name] :设置文件传输类型为 type-name ,缺省为 ascii ,如 :type binary ,设置二进制传输方式。
70.umask[newmask] :将远程服务器的缺省 umask 设置为 newmask ,如: umask 3
71.user user-name[password][account] :向远程主机表明自己的身份,需要口令时,必须输入口令,如: user anonymous my@email 。
72.verbose :同命令行的 -v 参数,即设置详尽报告方式, ftp 服务器的所有响 应都将显示给用户,缺省为 on.
73.?[cmd] :同 help
1.4./etc/fstab文件使用
1 fstab 文件的作用
文件 /etc/fstab 存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过” mount /directoryname ”命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或 tab 键分开。同时 fsck 、 mount 、 umount 的等命令都利用该程序。
2. fstab 文件格式
下面是 /etc/fatab 文件的一个示例行:
fs_spec fs_file fs_type fs_options fs_dump fs_pass
/dev/hda1 / ext2 defaults 1 1
fs_spec - 该字段定义希望加载的文件系统所在的设备或远程文件系统,对于一般的本地块设备情况来说: IDE 设备一般描述为 /dev/hdaXN , X 是 IDE 设备通道 (a, b, or c) , N 代表分区号; SCSI 设备一描述为 /dev/sdaXN 。对于 NFS 情况,格式一般为 :
, 例如: `knuth.aeb.nl:/ ’。对于 procfs ,使用 `proc ’来定义。
fs_file - 该字段描述希望的文件系统加载的目录点,对于 swap 设备,该字段为 none ;对于加载目录名包含空格的情况,用 40 来表示空格。
fs_type - 定义了该设备上的文件系统,一般常见的文件类型为 ext2 (Linux 设备的常用文件类型 ) 、 vfat(Windows 系统的 fat32 格式 ) 、 NTFS 、 iso9600 等。
codepage 国家语言代码页
iocharset 字符集
fs_options - 指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。对于大多数系统使用” defaults ”就可以满足需要。其他常见的选项包括:
选项 含义
ro 以只读模式加载该文件系统
sync 不对该设备的写操作进行缓冲处理,这可以防止在非正常关机时情况下破坏文件系统,但是却降低了计算机速度
owner 允许所有者加载该文件系统
user 允许普通用户加载该文件系统
quota 强制在该文件系统上进行磁盘定额限制
noauto 不再使用 mount - a 命令(例如系统启动时)加载该文件系统
fs_dump - 该选项被” dump ”命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为 0
fs_pass - 该字段被 fsck 命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统” / ”对应该字段的值应该为 1 ,其他文件系统应该为 2 。若该文件系统无需在启动时扫描则设置该字段为 0
3. 示例文件
# /etc/fstab
/dev/hda8 swap swap defaults 0 0
/dev/hda9 / ext2 defaults 1 1
/dev/hda6 /wine vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda7 /winf vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hdb /cdrom iso9660 noauto,user 0 0
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
1.5.Apache SSI 设置
1 .编辑 httpd.conf
vi conf/http.conf
2 .找到:
#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml
改为:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml .html .htm
3 .设置目录的 Options +Includes
例:
<Directory “/win/g”>
Options Indexes FollowSymLinks Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
4 .重新启动 Apache
bin/apachectl restart
5 .扩展使用
<!--#exec cmd=”ls”-!>
1.6.apache打开或者关闭列目录功能
问题分析:如果客户端发送一个 URL 请求, 但是相应的目录里面没有 DirectoryIndex
属性指定的文件名,那么可以使用 mod_autoindex 模块来列出该目录的文件名。
解决:编译 Apache 的时候包含 mod_autoindex 模块,然后参考下面的例子来设置 Apache
配置文件:
打开列目录功能:
<Directory /path/to/directory>
Options +Indexes
</Directory>
关闭列目录功能:
<Directory /path/to/directory>
Options -Indexes
</Directory>
1.7.开机自动启动samba
最标准的做法
1. 在 /etc/init.d 中作一个如下内容的脚本 smbd
$smbspool=/var/spool/samba
$piddir=/var/run
$smbd=/usr/sbin/smbd
$nmbd=/usr/sbin/nmbd
if [ "x$1" = "x" -o "x$1" = "xstart" ]; then
if [ -d $smbspool ]; then
rm -f $smbspool/*
fi
$smbd -D
$nmbd -D
elif [ "x$1" = "xstop" ]; then
kill `cat $piddir/smbd.pid`
kill `cat $piddir/nmbd.pid`
else
echo "$0 start|stop"
fi
2. 然后执行
ln -s /etc/init.d/smbd /etc/rc3.d/S99smbd
ln -s /etc/init.d/smbd /etc/rc0.d/K01smbd
或者
chkconfig smb on
1.8.linux 下让JAVA生成的图形可显示
开启 JAVA 图形显示功能
在 WEB 服务器启动选项加: -Djava=java.awt.headless=true
1.9.APACHE配置
基本参数说明
ServerType
ServerType standalone
定义服务器启动方式,默认是 standalone 方式,即有 apache 自己启动多个服务进程并管理他们接收客户端请求。
ServerType
1.10.Linux 特定变量参数
表 14-2 特定 s h e l l 变量
|
|
$ # |
传递到脚本的参数个数 |
$ * |
以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9 个 |
$ $ |
脚本运行的当前进程 I D 号 |
$ ! |
后台运行的最后一个进程的进程 I D 号
|
$ @ |
与 $ # 相同,但是使用时加引号,并在引号中返回每个参数
|
$ - |
显示 s h e l l 使用的当前选项,与 s e t 命令功能相同
|
$ ? |
显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误 |
1.11.自动检测WEB服务器状态并启动(Linux)
#!/bin/sh
# check the web server ,if no running,startup it.
# author:ZhangPu [2005-11-23 17:22:50]
# RetHat Linux 9.0 + tomcat 4.13
#setting enviroment
export JAVA_HOME=/usr/java/j2sdk1.4.1_05
export CATALINA_HOME=/usr/tomcat-4.1.24
export CATALINA_OPTS="-Xms800m -Xmx800m"
export LANG=zh_CN.GB18030
URL=http://localhost
SFILE=/usr/tomcat-4.1.24/bin/index
LOGFILE=/usr/tomcat-4.1.24/bin/restart.log
# checking web server
if ! wget -q -s -C off -O $SFILE $URL
then
STATE=`sed -n "1p" $SFILE`
if [ "$STATE" != "HTTP/1.1 200" ]; then
echo "[`date +'%Y-%m-%d %H:%M:%S'`]" >> $LOGFILE
echo "Shutdowning" >> $LOGFILE
($CATALINA_HOME/bin/shutdown.sh)
sleep 2
killall java
sleep 3
killall java
echo "Shutdown successful." >> $LOGFILE
echo "Startuping..." >> $LOGFILE
($CATALINA_HOME/bin/startup.sh)
sleep 3
reply=`ps -ax|grep java|grep Xms`
if [ "$reply" != "" ]; then
echo "Startup successful." >> $LOGFILE
fi
fi
fi
rm -f $SFILE
1.12.动态更新域名(www.3322.org)
#!/bin/sh
# ip file from Router WEB Manager
#curdate=date +"%Y-%m-%d %H:%M:%S"
echo `date +"%Y-%m-%d %H:%M:%S"` >>/g/linux_tools/bin/dydns.log
wget -q -C off -O remoteip http://admin:[email protected]/userRpm/StatusRpm.htm
iptmp=`sed -n '/IP/p' remoteip |sed '1d'|sed 's/<[a-z,\/]*>//g'|sed 's/^IP.\{4\}//g'`
if [ -z "$iptmp" ]; then
echo "no connecting internet." >>/g/linux_tools/bin/dydns.log
else
rm -f ipupdate
wget -q -C off -O ipupdate "http://cqpower:[email protected]/dyndns/update?&hostname=zpu.3322.org&myip=$iptmp"
ret=`awk '{if($1~/good/ || $1~/nochg/) print $1}' ipupdate|sed -n '1p'`
if [ "$ret"="good" -o "$ret"="nochg" ]; then
echo "update internet ip success:$iptmp" >>/g/linux_tools/bin/dydns.log
else
echo "update internet ip failure!" >>/g/linux_tools/bin/dydns.log
fi
fi
echo "" >> dydns.log
1.12. 特殊参数
1. $*:
代表所有参数,其间隔为
IFS
内定参数的第一个字元
2. $@:
与
*
星号类同。不同之处在於不参照
IFS
3. $#:
代表参数数量
4. $?:
执行上一个指令的返回值
5. $-:
最近执行的
foreground pipeline
的选项参数
6. $$:
本身的
Process ID
7. $!:
执行上一个背景指令的
PID
8. $_:
显示出最後一个执行的命令
1.13. 用
shell
检查
JSP
文件
用
shell
脚本:
checkfile.sh
检查
JSP
文件中数据库连接是否关闭
(CQMC)
1.14.linux-Tomcat内存和图型显示配置
%TOMCAT_HOME%/bin/catalina.sh
找到这样一段:
echo "Using CATALINA_BASE: $CATALINA_BASE"
echo "Using CATALINA_HOME: $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
echo "Using JAVA_HOME: $JAVA_HOME"
在其后加上:
CATALINA_OPTS="$CATALINA_OPTS -Xms128m -Xmx256m $JPDA_OPTS"
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
echo "Using CATALINA_OPTS: $CATALINA_OPTS"
echo "Using JAVA_OPTS: $JAVA_OPTS"
第一句是设置内存使用的,最小内存 128M ,最大 256M ,按你的要求设置,不过最大只能 1024M 。
第二句是处理图片用的,加上之后,你的问题就解决了!
1.15.网络设置
/etc/sysconfig/network
包括主机基本网络信息,用于系统启动
/etc/sysconfig/network-script/
此目录下是系统启动最初始化网络的信息
/etc/sysconfig/network-script/ifcfg-eth0
网络配置信息
/etc/xinetd.conf
定义了由超级进程
XINETD
启动的网络服务
/etc/protocols
设定了主机使用的协议以及各个协议的协议号
/etc/services
设定了主机的不同端口的网络服务
//
网络配置工具
# redhat-config-network
/*
使用
ifconfig
命令配置并查看网络接口情况
*/
//
配置
eth0
的
IP
,同时激活设备
# ifconfig eth0 192.168.168.119 netmask 255.255.255.0 up
//
配置
eth0
别名设备
eth0:1
的
IP
,并添加路由
# ifconfig eth0:1 192.168.168.110
# route add –host 192.168.168.110 dev eth0:1
//
激活(禁用)设备
# ifconfig eth0:1 up(down)
//
查看所有(指定)网络接口配置
# ifconfig (eth0)
/*
使用
route
命令配置路由表
*/
//
添加到主机路由
# route add –host 192.168.168.110 dev eth0:1
# route add –host 192.168.168.119 gw 192.168.168.1
//
添加到网络的路由
# route add –net IP netmask MASK eth0
# route add –net IP netmask MASK gw IP
# route add –net IP/24 eth1
//
添加默认网关
# route add default gw IP
//
删除路由
# route del –host 192.168.168.110 dev eth0:1
/*
常用命令
*/
# traceroute www.pconline.com.cn
# ping www.pconline.com.cn
//
显示网络接口状态信息
# netstat –I
//
显示所有监控的服务器的
Socket
和正在使用
Socket
的程序信息
# netstat –lpe
//
显示内核路由表信息
# netstat –r
# netstat –nr
//
显示
TCP/UDP
传输协议的连接状态
# netstat –t
# netstat –u
//
更改主机名
# hostname myhost
//
查看
ARP
缓存
# arp
//
添加
# arp –s IP MAC
//
删除
# arp –d IP
/*
运行级别与网络服务
*/
//
查看当前运行级别
# runlevel
//
运行级别的切换
# init
# telinit
1.16. Man 解释 SUDO
sudo 是linux系统中让普通用户拥有root权限运行程序的工具。
sodu 在linux下默认安装,主要使用的配置文件在:/etc/sudoers,可以直接编辑该文件来设置,但有一个更好的命令visudo来代替,该命令还带验证功能。
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
说明:
root ALL= (ALL) ALL
1.root:用户别名(User_Alias)
就是具有sudo权限的用户的列表,用户列表用“,”分割。定义例子:
User_Alias USER_FLAG = user1, user2, user3
2.ALL:主机别名(Host_Alias)
就是主机的列表,用户列表用“,”分割。定义例子:
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
3.(ALL) :身份别名(Runas_Alias)
就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
4. ALL:命令别名(Cmnd_Alias)
就是允许执行的命令的列表
Cmnd_Alias COMMAND_FLAG = command1, command2, command3
1.17. linux默认语言环境变量设置
2. 常用命令
2.1.suid/guid
拥有 suid 权限的文件,在非属主用户执行的时候,拥有属主的权限来执行文件。
拥有 guid 权限的文件,在非属主用户执行的时候,拥有文件属主所在用户组的权限。
查看:
$ ls -l | grep '^...s'
上面的命令是用来查找 s u i d 文件的;
$ ls -l | grep '^...s..s'
上面的命令是用来查找 s u i d 和 g u i d
设置:
设置 s u i d ,那么就将相应的权限位之前的那一位设置为 4 ;如果希望设置 g u i d ,那么就将相应的权限位之前的那一位设置为 2 ;如果希望两者都置位,那么将相应的权限位之前的那一位设置为 4+2
$ chmod 4741 logit // 设置 suid
$ chmod 2741 logit // 设置 guid
$ chmod 6741 logit // 两个同时设置
注意:在设置 guid 的时候,要确保属主所在用户组的其他用户都有相应的权限。
2.2.group/id
1. 找出你所属的组
$ group
或
$ id
2. 找出其他用户所属于的组
$ id user
2.3.umask
umask :设置用户创建文件的默认权限
一般来说, umask 命令是在 /etc/profile 文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的 umask ,可以在该文件中加入相应的条目。如果希望永久性地设置自己的 umask 值,那么就把它放在自己 $HOME 目录下的 .profile 或 .bash_profile 文件中 .
格式: umask nnn
nnn 为 000-777
设置:
1. 对文件来说:从文件的最高权限 777 拿掉 umask 设置的权限就是 umask 设置的文件默认创建权限。
2. 对目录来说,从文件的最高权限 777 拿掉 umask 设置的权限,然后在 rwx 各位上减 1 (如果已经为 0 ,就不用减了撒)就是默认创建目录权限。
这就是上面的例子,其中 u m a s k 值为 0 0 2 :
1) 文件的最大权限 rwx rwx rwx (777)
2) umask 值为 0 0 2 - - - - - - -w-
3) 目录权限 rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限 rw- rw- r-- (664) 这就是文件创建缺省权限
下面是另外一个例子,假设这次 u m a s k 值为 0 2 2 :
1) 文件的最大权限 rwx rwx rwx (777)
2 ) u m a s k 值为 0 2 2 - - - -w- -w-
3) 目录权限 rwx r-x r-x (755) 这就是目录创建缺省权限
4) 文件权限 rw- r-- r-- (644) 这就是文件创建缺省权限
2.4.ln
对文件软连接
ln –s source [target]
对目录软连接
ln –sn source [target]
2.5.find
语法: find pathname –option [ -print –exec -ok]
pathname : 开始查找的目录
-print :打印结果到标准输出
-exec :对查询出的结果做 shell 处理 (-exec command {} \;), 注意 {} 和 \; 中间有空格
-ok: 同 -exec 相同,只是会提示是否处理。
-option 选项
-name: 按文件名称查找
find . –name “*.jsp” // 查找扩展名为 jsp 的文件
find /usr/tomcat –name “[A-Z]*” // 查找以大写字母 A-Z 开头的文件
-perm :按文件权限查找
find . –perm 755 –print // 查找文件权限为 755 的文件
下面是查询:当前目录及子目录下,文件扩展名为 jsp ,文件权限为 644 的文件重定向到文件 jsp.txt 中。
find -name "*.jsp" -perm 644 -exec echo > jsp.txt {} \;
-prune 使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同时使用了 -depth
选项,那么 -prune 选项将被 find 命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime-n+n 按照文件的更改时间来查找文件, -n 表示文件更改时间距现在 n 天以内, +n
表示文件更改时间距现在 n 天以前。 Find 命令还有 -atime 和 -ctime 选项,但它们都和 -mtime 选项
相似,所以我们在这里只介绍 -mtime 选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在 /etc/groups 中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在 /etc/passwd 中不存在。
-newerfile1!file2 查找更改时间比文件 file1 新但比文件 file2 旧的文件。
-type 查找某一类型的文件,诸如:
b- 块设备文件。
d- 目录。
c- 字符设备文件。
p- 管道文件。
l- 符号链接文件。
f- 普通文件。
-sizen[c] 查找文件长度为 n 块的文件,带有 c 时表示文件长度以字节计。
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
/etc/fstab 中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统 mount 点。
-follow 如果 find 命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用 cpio 命令,将这些文件备份到磁带设备中。
2.6.cron/crontab
crontab 的域
1. 分( 1-59 )
2. 时( 1-23 ) 0 表示 0 点
3. 天( 1-31 )
4. 月( 1-12 )
5. 星期( 0 表示星期天)
6. 要运行的命令
分 <> 时 <> 日 <> 月 <> 星期 <> 要运行的命令;<>表示空格
在这些域中,可以用横杠 - 来表示一个时间范围,例如你希望星期一至星期五运行某个作
业,那么可以在星期域使用 1 - 5 来表示。还可以在这些域中使用逗号“,”,例如你希望星期一
和星期四运行某个作业,只需要使用 1 , 4 来表示。可以用星号 * 来表示连续的时间段。如果你
对某个表示时间的域没有特别的限定,也应该在该域填入 * 。该文件的每一个条目必须含有 5
个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用 # 来表示
crontab 命令选项
语法:
crontab [-user] –l –e –r
-user: 用户
-l 浏览已经安装的 cron
-e 编辑
-r 删除 cron 文件
备份 cron 文件
$ crontab -l > $HOME/mycron
恢复丢失的 crontab 文件
如果不小心误删了 c r o n t a b 文件,假设你在自己的 $ H O M E 目录下还有一个备份,那么可以
将其拷贝到 / v a r / s p o o l / c r o n / < u s e r n a m e > ,其中 < u s e r n a m e > 是用户名。如果由于权限问题无法完
成拷贝,可以用:
$ crontab <filename>
其中, < f i l e n a m e > 是你在 $ H O M E 目录中副本的文件名。
我建议你在自己的 $ H O M E 目录中保存一个该文件的副本。我就有过类似的经历,有数次
误删了 c r o n t a b 文件(因为 r 键紧挨在 e 键的右边 ⋯ )。这就是为什么有些系统文档建议不要直接
编辑 c r o n t a b 文件,而是编辑该文件的一个副本,然后重新提交新的文件。
有些 c r o n t a b 的变体有些怪异,所以在使用 c r o n t a b 命令时要格外小心。如果遗漏了任何选
项, c r o n t a b 可能会打开一个空文件,或者看起来像是个空文件。这时敲 d e l e t e 键退出,不要按
< C t r l - D > ,否则你将丢失 c r o n t a b 文件。
每分钟执行一次
*/1 * * * * main.sh > /dev/null 2>&1
2.7.nohup命令
语法:
nohup command &
例子:
nohup ls –l > nohup.log 2>&1 &
2.8.rpm常用命令
1. 安装一个包
# rpm -ivh
2. 升级一个包
# rpm -Uvh
3. 移走一个包
# rpm -e
4. 安装参数
--force 即使覆盖属于其它包的文件也强迫安装
--nodeps 如果该 RPM 包的安装依赖其它包,即使其它包没装,也强迫安装。
5. 查询一个包是否被安装
# rpm -q < rpm package name>
6. 得到被安装的包的信息
# rpm -qi < rpm package name>
7. 列出该包中有哪些文件
# rpm -ql < rpm package name>
8. 列出服务器上的一个文件属于哪一个 RPM 包
#rpm -qf
9. 可综合好几个参数一起用
# rpm -qil < rpm package name>
10. 列出所有被安装的 rpm package
# rpm -qa
11. 列出一个未被安装进系统的 RPM 包文件中包含有哪些文件?
# rpm -qilp < rpm package name>
2.9.sed命令
2.9.1. sed 怎样读取数据
sed 从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复此过程直到命令结束。
2.9.2. sed 语法
sed [options] '{command}' [filename]
sed options 如下:
n 不打印; s e d 不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。 p 命令可以
用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条 s e d 命令,
此选项无用,但指定它也没有关系。
f 如果正在调用 s e d 脚本文件,使用此选项。此选项通知 s e d 一个脚本文件支持所有的 s e d 命令,例如: sed -f myscript.sed input_file ,这里 m y s c r i p t . s e d 即为支持 s e d 命令的文件
使用 s e d 在文件中定位文本的方式
x |
x 为一行号,如 1 |
x , y |
表示行号范围从 x 到 y ,如 2 , 5 表示从第 2 行到第 5 行 |
/pattern/ |
查询包含模式的行。例如 / d i s k / 或 /[a-z]/ |
/pattern/pattern |
查询包含两个模式的行。例如 / d i s k / d i s k s |
/p a t t e r n / , x |
在给定行号上查询包含模式的行。如 / r i b b o n / , 3 |
x , / p a t t e r n / |
通过行号和模式查询匹配行。 3, / v d u / |
x , y ! |
查询不包含指定行号 x 和 y 的行。 1 , 2 ! |
sed 编辑命令
p |
打印匹配行 |
= |
显示文件行号 |
a \ |
在定位行号后附加新文本信息 |
i \ |
在定位行号后插入新文本信息 |
d |
删除定位行 |
c \ |
用新文本替换定位文本 |
s |
使用替换模式替换相应模式 |
r |
从另一个文件中读文本 |
w |
写文本到一个文件 |
q |
第一个模式匹配完成后推出或立即推出 |
l |
显示与八进制 A |
{ |
} 在定位行执行的命令组 |
n |
从另一个文件中读文本下一行,并附加在下一行 |
g |
将模式 2 粘贴到 /pattern |
y |
传送字符 |
n |
延续到下一输入行;允许跨行的模式匹配语句 |
2.9.3. 常用操作
2.9.3.1. 显示控制字符
sed –n ‘1,$l’ filename
2.9.3.2. 处理控制字符
例文件:
doc.txt
12332##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##34.46^M
要求处理:
1)
用一个空格替换所有的
(##)
符号。
2)
删除起始域中最前面的
0(00)
。
3)
删除行尾控制字符
(^M)
。
以命令方式处理:
sed ‘s/##/ /g’ doc.txt|sed ‘s/^0*//g’ |sed ‘s/\^M/g w doc,log’
以文件方式处理:
doc.sed
#!/bin/sed -f
# name:doc.sed
# to call:doc.sed doc.txt
# get rid of the hash marks
s/##/ /g
# now get rid of the leading zeros
s/^0*//g
# now get rid of the carriage return
s/\^M//g
# now wirte the result to file
w doc.log
调用:
$ chmod u+x doc.sed
$ ./doc.sed doc.txt
2.9.3.3. 处理报文输出
以数据库查询为例,查询输出如下
(
保存到文件
sql.txt)
$ cat sql.txt
Database Size(MB) Date Created
-----------------------------------
GOSOUTH 2244 12/11/97
TRISUD 5632 8/9/99
(2 rows affected)
1)
使用
s/-*//g
删除横线
------
。
2)
使用
/^$/d
删除空行。
3)
使用
$d
删除最后一行
4)
使用
1d
删除第一行。
5)
使用
awk {print $1}
打印第一列。
处理第
1)
到
4)
我们用
sed
脚本完成
$ vi sql.sed
#!/bin/sed -f
# name:sql.sed
# to call: sql.sed sql.txt
# delete line -----
s/-*//g
# delete blank rows
/^$/d
# delete last row
$d
# delete first row
1d
# write the result to file
w sql1.txt
$ chmod u+x sql.sed
$ ./sql.sed sql.txt
$ cat sql1.txt
GOSOUTH 2244 12/11/97
TRISUD 5632 8/9/99
$ awk '{print $1}' sql1.txt
GOSOUTH
TRISUD
2.9.3.4. 附加文本
$ vi ok.txt
AC345
AC492169
AC9967
AC88345
$ sed ‘s/[0-9][0-9]*/& passed’ ok.txt
AC345 passed
AC492169 passed
AC9967 passed
AC88345 passed
2.9.3.5. sed 中设置 shell 变量
把 sed 执行的结果传给变量
$ NAME=”It’s a go situation.”
$ REPLACE=”GO”
$ NEW_NAME=`echo $NAME|sed “s/go/$REPLACE/g”`
$ echo $NEW_NAME
It's a GO situation
注意,这里的 sed 的 command 不用 ’, 而用 ”
2.9.3.6. 快速一行命令
下面是一些一行命令集。( [ ] 表示空格, [ ] 表示 t a b 键)
|
|
|
|
|
删除一个以上空格,用一个空格代替( [] 代表空格) |
‘ s / ^ [ ] [ ] * / / g ’ |
删除行首空格 |
‘ / ^ $ / d ’ |
删除空行 |
‘ s / \ . [ ] [ ] * / [ ] / g ’ |
删除句点后跟两个或更多空格,代之以一个空格 |
‘ s / ^ . / / g ’ |
删除第一个字符 |
‘ s /CO L \ ( . . . \ ) / / g ’ |
删除紧跟 C O L 的后三个字母 |
‘ s / ^ \ / / / g ’ |
从路径中删除第一个 \ |
‘ s / [ ] / [ ] / / g ’ |
删除所有空格并用 t a b 键替代 |
‘ S / ^ [ ] / / g ’ |
删除行首所有 t a b 键 |
‘ s / [ ] * / / g’ |
删除所有 t a b 键 |