Linux开发实践笔记

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‘

删除以句点结尾的行

‘-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

 

   

 

 

 

你可能感兴趣的:(Linux开发实践笔记)