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
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
共享的设定其实很简单
,
主要是路径和权限的问题
,
这两个搞清楚了
,
应该没问题了
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
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 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
.编辑
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”-!>
问题分析:如果客户端发送一个
URL
请求,
但是相应的目录里面没有
DirectoryIndex
属性指定的文件名,那么可以使用
mod_autoindex
模块来列出该目录的文件名。
解决:编译
Apache
的时候包含
mod_autoindex
模块,然后参考下面的例子来设置
Apache
配置文件:
打开列目录功能:
<Directory /path/to/directory>
Options +Indexes
</Directory>
关闭列目录功能:
<Directory /path/to/directory>
Options -Indexes
</Directory>
最标准的做法
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
开启
JAVA
图形显示功能
在
WEB
服务器启动选项加:
-Djava=java.awt.headless=true
ServerType
ServerType standalone
定义服务器启动方式,默认是
standalone
方式,即有
apache
自己启动多个服务进程并管理他们接收客户端请求。
ServerType
表
14-2
特定
s h e l l
变量
|
|
$ #
|
传递到脚本的参数个数
|
$ *
|
以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过
9
个
|
$ $
|
脚本运行的当前进程
I D
号
|
$ !
|
后台运行的最后一个进程的进程
I D
号
|
$ @
|
与
$ #
相同,但是使用时加引号,并在引号中返回每个参数
|
$ -
|
显示
s h e l l
使用的当前选项,与
s e t
命令功能相同
|
$ ?
|
显示最后命令的退出状态。
0
表示没有错误,其他任何值表明有错误
|
#!/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
#!/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:admin@192.168.1.1/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:cqpower.net@members.3322.org/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. $*:
代表所有参数,其间隔为
IFS
内定参数的第一个字元
2. $@:
与
*
星号类同。不同之处在於不参照
IFS
3. $#:
代表参数数量
4. $?:
执行上一个指令的返回值
5. $-:
最近执行的
foreground pipeline
的选项参数
6. $$:
本身的
Process ID
7. $!:
执行上一个背景指令的
PID
8. $_:
显示出最後一个执行的命令
1.13.
用
shell
检查
JSP
文件
用
shell
脚本:
checkfile.sh
检查
JSP
文件中数据库连接是否关闭
(CQMC)
%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
。
第二句是处理图片用的,加上之后,你的问题就解决了!
/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.
常用命令
拥有
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
的时候,要确保属主所在用户组的其他用户都有相应的权限。
1.
找出你所属的组
$ group
或
$ id
2.
找出其他用户所属于的组
$ id user
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)
这就是文件创建缺省权限
对文件软连接
ln –s source
[target]
对目录软连接
ln –sn
source [target]
语法:
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
命令,将这些文件备份到磁带设备中。
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
语法:
nohup command &
例子:
nohup ls –l > nohup.log 2>&1
&
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>
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.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‘
|
删除以句点结尾的行
|
‘-e
/abcd/d‘
|
删除包含
abcd
的行
|
‘s/[][][]*/[]/g’
|
删除一个以上空格,用一个空格代替(
[]
代表空格)
|
‘
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
键
|