Unix Basic

Unix Basic

1 UNIX起源、流派及标准
1.1 UNIX的发展简史
60年代由麻省理工学院、通用电器公司、AT&T贝尔试验室组成一个专家小组,研制一个MULICS,是一个灵活的交互式操作系统。
60年后期,BELL脱离该组织,失去了灵活的交互式操作系统。
1990年,有一个叫Ken.Tompson写了一个SPACE TRAVEL的游戏,是在PDP-7上写的,为了更有效地发挥PDP-7的强大功能,托普森和另一位科学家Dennis Ritchie开发了一个新的操作系统UNIX。此前Dennis创建了C语言。
1973年Ken和Dennis用C语言重写了UNIX。UNIX成为世界上第一个用高级语言写的操作系统。
C语言使UNIX更容易移植,移植是UNIX最重要的优越性
70年代UNIX版本不断更新,74年后,世界上所有的大学都可以以极小的代价获得UNIX的源代码,由此产生了很多重要的分支,包括一个BSD版,加州伯克利大学Berkeley Software Distribution。80年代AT&T重新命令UNIX版。
l 1973年,美国高等院校开始使用UNIX
l 1974年,Version 4
l 1976年,Version5,6
l 1978年,Bell开发出系统 III
l 1979年,Berkekey分校发布BSD 3
l 1982年,Berkekey分校发布BSD 4.2
l 1983年,Bell开发出系统V
l 1983年,Berkekey分校推出第一个内含TCPIP的BSD UNIX
l 1985年,AT&T 推出SVR2,即系统V,RELEASE 2
l 1987年,AT&T 推出SVR3
l 1989年,AT&T 推出SVR4
82年后,AT&T发布商业版,SYSTEM3以前均为内部使用。
BSD起源于1974年,伯克利研究小组毕业的学生Bill Joy开发出更好性能的UNIX。如CSH、VI、虚拟存储环境,这些性能后来被柔进了SYSTEM 5。
1974  BSD     1979  2BSD     1982  3BSD
1984  4BSD     1987  4.3BSD  4.5BSD 
在微机领域,71年分支出XENIX
81年   XENIX2.3  XENIX3.0  XENIX5.0遵守SVID
85年 AT&T宣布一个标准SVID
(Standard Called System U Imterface Defination)
85年出现SYSTEM U/386与SVID完全兼容。
当时主要的UNIX(XENIX、SYSTEMU、BSD)占80%。
BSD 一般出现在大学
SYSTEM为用于商业领域
XINIX 只用于PC
1.2 UNIX标准化
1984年欧州5家成立X/OPEN协会。
XPG3――XPG4
SPE C 1170
1985年IEEE公布POSIX 1003
1988年5月 DEC、IBM、HP 公布OSF(BSD)AES
1988年12月AT&T SUN公布UI (SYSTEM V)
1992年12月NOVELL购买USL转让给X/OPEN
1993年9月WINDOWS NT出现使OSF和UI和解,产生COSE。包括XPG4、POSIX、SUID3、SVR4.3、AES、MOTIF、TCPIP。
1.3 常见商业版本
SUN SOLORIS纯SYSTEM V
IBM AIX4.3
HP-UX
IRIX遵守POSIX
Tru64 UNIX 成熟、统一对COSE遵守最好。SPEC1170 MACH微内核完整、大而全。
LINUX 自由软件、微内核、多平台支持各种协议。
2 DIGITAL UNIX优点
l 全64位软硬件体系结构
l 最快的64位平台
l SMP多线程共享程序、软件升级不必重新连接、内存映射文件、 单一系统映像Cluster、VLM
l 具存防崩溃性能
l 超大规模收据库访问能力,支持大于17MB的文件
l 规模可伸缩
l 低成本管理
l 最OPEN、最标准
l 支持ADVFS、LSM、CLUSTER
l 支持各种网络
l 国际化不另收费用
l 支持IEEE标准,POSIX命令及实时线程
l 支持FIPS 151 -2
l 支持ISO/IEC  9945-1  1990
l 支持X/OPEN 可移植性指南VOLUME4(XPG4)
l 支持BSD4.3 4.4
l 支持MIT XIIR5 ADK FOR XIIR6
l 支持FIPS 160(ANSI)
l 支持OSF MOTIF 1.2.3
l 支持UNIX 93
l 支持RFC
l 支持ISO 9660(CDFS)
l 支持NFS V.3
l 支持SVR4 SVR3  SVID2 SVID3
3 初次上机
3.1 进入系统
UNIX系统为多用户,多任务操作系统,有很完善的用户管理和安全机制,使用系统的每一个人都可以有一个用户名,并有一个用户识别码UID,每个用户至少属于一个用户组,可以同时属于多个用户组,组是UNIX系统为了方便用户管理而建立的一个用户集合,进入系统只需输入自己的用户名和口令,不需要输入组名。
l 主机终端
  按回车键开始登录过程
l 终端服务器
  按回车键登录到终端服务器
  用c命令 connect 开始登录过程
l PC机  
 用telnet 命令
  login:用户名
  password :口令   (不显示出来)
  PC 用Telnet 开始登录过程
l Xwindows 
  输入用户名按回车
  输入口令按回车
    可以选择语言环境
3.2 改变口令
$ passwd 回车
old password:输入旧口令
new password :输入新口令
reenter new password :重新输入,验证
3.3 chsh 改变login shell
chsh
/bin /sh 
/bin /csh
3.4 chfn 改变用户电话号码,力公室位置等信息
chfn
3.5 获得帮助
help   命令获极少的帮助
man  查有联机手册
man cmd   查看cmd详细手册
man –k keyword  查看与keyword相关的所有命令。
man n cmd 
一般情况下手册被分组为1到8其8个组,某些命令在多个组中均有帮助信息,用man n 指定读取n组中的信息。
where is cmd
查看cmd的绝对路径。
echo $PATH 
which cmd
查看cmd 是哪个目录的cmd
who am I     whoamI 
查看自己的用户名
who,   w 
查看当前谁在系统上
users,  u 
查看当前系统的用户
finger user 
查看user 的信息
ps  显示当前进程状况
ps –u user 显示用户名为user 的进程状况
3.6 作业调度
命令行可加&表示后台执行
例  f 77  test.f &  在后台执行编译命令。
命令的输入和输出可重定向。
例   ls  -l >dir.lis
     lmf rdg -<l1
-表示标准输入或标准输出
例  zcat file.z| [cd/tmp ;tar xvf -]
前命令的结果可以作为后一个命令的输入,称为管道技术
例ps –ef | more
  strings .*| grep user 
作业调入前台执行
fg %job
^z 使当前作业挂起
bg %job 使作业在后台恢复执行
at 批作业
at time cmd 
例 at 5pm Friday rm /tmp/*
4 UNIX文件和目录结构
4.1 文件名和目录名
必须遵守以下规则:
可采用除“1”外的任何ASCII字符
以“.”开头的文件名在普通用户看来是隐蔽的。
“.”代表当前目录,“..”代表上级目录。
特殊字符用反斜杆引导“\”
4.2 文件类型
l 普通文件
l 链
l 特殊文件,如终端、通信设备、驱动器、FIFO、SOCKET
4.3  文件系统结构
倒树结构
/为根
4.4 目录树
/.文件系统的根目录,超级用户的HOME目录
/stand UNIX引导时使用的标准程序和数据文件
/sbin  UNIX引导时使用的程序
/dev  特殊设备文件
/dev/console 控制台
/dev/lp 并口打印机
/dev/rz** 硬盘块设备文件
/dev/rmton 磁带文件
/etc   系统管理及配置数据库
/opt   附加应用软件包的根
/home  用户主目录和文件
/var   系统用文件、目录、日志、记帐、邮件、假脱机
/var/adm 系统日志,记帐
/var/mail 用户邮件文件
/var/news 新闻目录
/var/opt  附加应用程序子目录
/var/tmp  临时文件
/var/spool 假脱机目录
/var/uucp  Uucp日志和状态
/usr    其它用户可访问的根
/usr/bin  新的可执行程序命令
/usr/sbin  新的系统命令,可执行程序
/usr/lib   率
/usr/include 头文件
/usr/examples  例子文件
/usr/share/man  联机手册
/usr/ucb  包含Bsd Unix兼容的软件包
/usr/ibn  多国字符程序数据
4.5  目录和文件的使用
   绝对路径名  以/开头,从根开始
   相对路径名  其它以..,目录名,文件名开始
UNIX命令 相应DOS命令
pwd  列出当前工作目录  cd
ls   列目录内容 dir/w
ls -l           dir 
ls -a           dir/a
ls -r           dir/s
ls -x           dir/w
ls –l |more          dir/p
ls –F   用符号表示简单属性
ls -q  用?表示非打印字符
cat 显示文件内容
cat file         type file
cat file1 file2 file3     type file1+file2+file3
cat -n file  显示行号
cat -u file  显示非打印字符  -u 输出无缓冲
cat -r file  多个空行合为1行
cd  改变工作目录
cd usr          cd dos 
cd /usr                    cd  c:\dos
cd ..                         cd ..
cd ../..                        cd ..\ ..
cd 
mv  移动文件或目录
mv file1 file2          ren file1 file2
mv file1 dir2           move file1 dir2
mv dir1 dir2       xcopy dir1 dir2  deltree dir1
mv –i  如果目标文件存在则提示
mv -f 强制拷贝
cp   拷贝文件
cp file1 file2     copy file1 file2
cp  -i file1 file2  提示覆盖
cp  -r dir1 dir2   xcopy /s dir1 dir2
cp  -p  属性不变
cp file1 file2 file3 file4…target 合并文件
ln 建立软链        dos 下只有用
ln source des        norton tools 等工具才能实现,但chkdsk将检查出错误。
ln  -s source 符号连接忽略des属性
ln  -f source des
rm 删除文件或目录
rm file1          del file1
rm *           del *.*
rm -r dir          deltree  dir
rm -i
rmdir  删除目录
 条件:目录必须是空目录
rmdir dir          rd dir
mkdir 创建子目录
mkdir dir        md  dir
mkdir  -m 指定使用mode
mkdir  -p ../dir1/dir2/dir3
file 查看文件类型
file *
find 查找指定文件
find path expression
 -print 打印文件所在路径
 -exec cmd 对找到的文件执行cmd命令
 -atime n 只查几天以前的文件
pg 分页显示文件
more 分页显示文件
lp  打印文件
lpstat  查看打印队列
lprm 删除打印作业
cancel 
4.6 文件属性
4.6.1 定义
$ ls –l 
total 24094
-rw-r--r--   1 root     system    176584 Jul  5 17:09 3500install.pdf
-rw-r--r--   1 root     system      2593 Jun 13 12:48 DXsession
-rw-r--r--   1 bin      bin         2476 Apr 13  1999 GENERIC
lrwxr-xr-x   1 root     system         7 May 31 16:41 bin -> usr/bin


-rw-------   1 root     system       501 Jun 23 22:31 tcr2
drwxrwxrwt   3 root     system      8192 Sep  3 12:59 tmp
drwxr-xr-x  29 root     system      8192 Aug 31 14:22 usr
lrwxr-xr-x   1 root     system         7 May 31 16:38 var -> usr/var
-rwxr-xr-x   1 root     system   9549088 Jun  1 12:29 vmunix
$
使用ls –l命令显示文件的全部属性,其中第一个域反应文件的类型和访问属性,第1列为
- 表示为普通文件
d  表示为目录文件
l 该文件为连接
第2,3,4列为文件属主读,写,执行的访问标识,如第2列为-则不可读,为r 则表示可读。
第5,6,7列为文件所属组用户的读,写,执行的访问标识。
第8,9,10列为其它组用户的读,写,执行的访问标识。
第2个域为该文件的连接数,如果某目录文件的连接数越大,其子目录数就越多。
第3个域为该文件的属主。
第4个域为该文件的属组。
第5个域为该文件的大小。
第6个域为该文件的创建时间。
第7个域为该文件的文件名。
第8个域如果不空的活,则为该文件所连接文件路径。
4.6.2 改变文件访问属性
$ chmod nnn file
$ chmod [ugo][+-][rwx] file
4.6.3 改变文件属主
$ chown user file
$ chown user:group file
4.6.4 改变文件属组
$ chgrp group file
4.6.5 更新文件访问时间
$ touch file
5 命令,重定向,管道和过滤器
5.1 命令格式
cmd  [ [-option [option value] …] [parameter1] [parameter2]….
每一条Shell命令由一个命令动词或文件名开始,可以跟一个或多个命令选项,一个或多个命令叁数,按回车将命令提交到系统。大部分UNIX命令是一个可执行文件,位于环境变量PATH或path所指示的路径中。命令也可以是shell内部命令,命令还可以是自己编译连接的可执行文件或命令踋本(批处理)文件。一个命令行可以有65536个字符,如果一行写不完,可用\符号续行,在命令行中可以采用*和%等通配符。
ls
ls –l
ls –l /usr
ls –l /etc/host*
在一个命令行中可以输入多个命令,但必须用分号分隔开。
cd /usr/users/user01; ls –l; pwd
5.2 重定向
在缺省情况下,命令的输入是标准输入设备键盘,输出是标准输出设备如终端显示器,可以通过>和<将命令的输出和输入重定向到文件或其它设备。
$ ls –l >dir.txt
$ more < .login
$ echo “” > /usr/sybase/sybase.log
在缺省情况下,使用>将命令写到某文件中,如该文件不存在,本命令创建该文件,如果该文件存在,该文件的内容被本命令的输出结果覆盖。如果使用>>符号,则命令的输出被添加到该文件的后面。
5.3 管道和过滤器
UNIX命令管理将一个命令的输出作为另一个命令的输入,在同一个命令行中有多个命令,后一个命令处理前一个命令的输出。
ps –ef|grep oracle
以上命令查找命令行或用户名中含有字符串oracle的输出。 ps –ef命令输出系统中所有进程的长格式信息,通过grep oracle命令处理后,不包括oracle的行全部被过滤掉了。象grep这种命令叫过滤器。其它过滤器命令如下:
wc   统计字数,行数,词数
grep   按正规表达式进行模式检索
-i  不区别大小写
-v  不匹配的行
-n   行前加行号
-c   只输出行数
-l   只输出匹配的文件名
fgrep   只是字符串,含特殊字符时高速
grep   有限制的规则表达式,比较快
cgrep   完全正则表达式,功能最全
cut
-f   域
-d  分隔符
-b
colum   删列
colum 3.5,textfuke  删掉  3~9列
sort  -b cdfmnru  +关健字开始位置-关健字结束位置,输入文件
-f   不区别大小写
-m只合并
-r  降序
-u  多个相同行只输出1行
uniq  多个重复行归纳为1行
join [-an.][-e串][-j(n)(m)][-o字段][-t字符]文件1文件2
-a与文件<n>不匹配的全输出n=1,2
-e  无对应字段时输出指定串
-jnm   将文件n的第m个字段作关键字进行连接
-o


6 UNIX命令汇总
6.1 alias     别名     ksh、csh命令
alias  显示所有当前命令的别名
alias name  显示别名为name的命令
alias name cmd  置cmd命令的别名为name csh
alias name=cmd  置cmd命令的别名为name ksh
6.2 unalias   取消别名
   unalias name
6.3 bg %jobid  恢复挂起的作业到后台运行
6.4 cal  显示当前日的月历
   cal [[month]year]
   cal    2  1996
6.5 chown owner file  改变文件属性
   chown -h  改变一文件链的属性
   chmod.chgrp
6.6 启动一个cshell命令解释程序
  csh
6.7 date  显示和设置日期
   date mmddhhmm.yy设置月日时分年
6.8 echo string 在标准输出上回显string
6.9 env  显示环境变量
env name=value  置环境变量name值为value
setenv
setenv name=value  unsetenv name
6.10 exit 结束用户登录
6.11 export variable
在sh 和ksh下用户变量export后才可成为全局变量
6.12 fg %jobid将挂起的作业调入前台执行
6.13 fmt file 简单正文格式化
   fmt –w width  文件输出的行宽为width
     fmt –c  顶部对齐
     fmt –s  防止短行合并输出
6.14 head file  显示文件头部10行
head –n file  显示头部n 行
6.15 history 显示以前被执行过的命令csh ,ksh 
6.16 jobs 显示所有运行的任务
在命令行尾加&使作业在后台执行
正在执行作业时按ctrl-z (csh)使作业挂起
然后可用jobs,fg,bg等命令
6.17 kill pid  给进程发中止信号
kill-g pid 强制杀除进程
6.18 ksh 启动ksh 命令解释程序
ksh
6.19 more 命令
more  file   分页显示file 内容
more –c    显示前清屏
more –s    多个空行压缩为1行
子命令
按空格:向前翻1屏
按回车:向前滚1行
b    回翻1屏
G    到多少行,缺省第1行   nG  到第n行
P%  到百分之一      np 到第n%处
m    标记一个位置     m[a-z]  命名位置
‘     返回标记的位置   ‘[a-z]
v     运行editor  编辑文件
/.?   找一串
q   exit
:n   跳到下一文件
:p    前1文件
6.20 news 查看新消息
news –a  显示所有新消息状态
news –n  显示所有新消息状态
6.21 nice cmd  以低于正常优先执行命令
nice =n cmd  设置优先级
6.22 mohup cmd  cmd 命令执行时不挂起
6.23 r    ksh 下重执行前1个命令
6.24 resume  %jobid  启动被挂起的作业
6.25 script file
   将输出、输入到终端的信息同时写入文件中,script –a    同时写入文件中,-a是添加。
6.26 set   显示当前变量值
set name=value 
uset name
6.27 sh 启动bsh 
sh
6.28 spell file  查找文件的拼写错误
spell –b   美国英语拼写
6.29  stop %jobid  挂起正在运行的作业
6.30  stty  显示设置终端选项
   sttt –a 显示当前终端所在选项
   stty –g  显示当前设置,格式可作为stty实参
      line speed 置波特率
   -t type  终端类型
   columns n  设置列数
6.31 tail file  显示文件最后10行
tail –n file  显示文件最后n 行
6.32 tee file  将输入复制到输出及文件file中
tee –a file  添加到file 尾
6.33 touch file  更新文件的存取时间
touch –a   只更新访问时间
touch –m  只更新修改时间
touch –c  防止建立以前不存在的文件 
7 ed 编辑器
ed file 
出错时,h提供简单帮助信息,H提供详细帮助信息,用a,c,I进入输入方式,在单独一行上用,回到命令格式保存文件w.   Wq =x 
p  .p 显示当前行
=  显示当前行的行号
np  显示第n 行
1,6p  显示1-6行
$p   显示最后一行
1,$p显示所有行
+  显示下一行
- 显示上一行
n  显示当前行及行号
nn  显示第n行及行号
x,yn  显示x—y行及行号
l   显示当前行包括非打印字符
d   删除当前行
u   取消最后命令
s /str1/str2   用 str2 取代str1
s/str1//    删除str1
2s/str1/str2/n   第2 行的str1改为str2并显示修改后的行
s/str1/str2/g   全程替换
<first>,<end>m<line>
2,4m6    第2—4行移到第6行之后
t 块拷贝格式同m
r file  将文件读到当前行后
<first>,<end> w file   写块到文件
!cmd   执行shell命令
/模式/   正向查找命令
?模式?反向查找命令
//  继续找第2个
g/the/p   全程查找并显示
g/the/s/the/that/   全程查找the并用that代替the 
v与g命令相反
v/the/n   全程查找不包含the 并显示
无字符
^代表行首   $行尾    .任意字符   *任意多个与前面相同字符
/A….B/   以A开关B结尾中间3个任意
. s/. /.     第1个 . 当前行
         第2 个 . 任意字符
         第3个 . 字符
s/xx*/y/   用y代替2个或2个以上的x
s/x*y/y/   用y代替以x开头以y结束的所有字符
&代表第1个模式内容
/模式1/(模式1)/=/模式1/(&)/
[xz]表示x或z
[0-9]表示0-9的任意数字
8  vi编辑器 
vi file         vi -r 只读模式    vi -r  恢复  -wnumber 指定窗                口大小
vi +67 file      光标停在第67行
命令模式   i,I,o,O,a,A进入输入模式,;/?最后一行模式
最后一行模式
:q  退出  :w写文件  :wq存盘退出    :q!  Quit  :x存盘退出
命令模式     zz存盘退出   如未修改不存盘退出
移动光标
l   空格 右         w  W  下词词首    5w  前移5个词
h   ^H 左         e  E  词尾或标点
j   ^N 下         b  B  返回词首
k   ^P 上         )    下句句首
0   行首        (    上句句首
&  行尾         }    下段句首
+  下行行首   {    上段名首
-  上行行首   ]]   下区第1字符
[[    上区第1字符
  H 光标到屏幕布顶部
M 光标到屏幕布中部
L 光标到屏幕布底部
ctrl -F  向前一屏
^D  向前半屏
^B  向后一屏
^U  向后半屏
^Y  向上滚1行
^E  向下滚1行
G   文件尾, nG到第n 行
z+  向上翻页
z^ 向下翻页
z. 当前行到中间
z-   当前行到底部
rn   用字符n代替当前字符
3rn  用n代替当前3个字符
Rstring ESC  用输入串代替当前字符
cw string ESC 用string代替当前光标到词尾的串
5cw string ESC  用string代替当前光标到第5个词尾的串
cb,CB string ESC用string替换词首到当前光标位置的串
c&string ESC 用string替换到行尾的字串
s删当前字符并开始输入正文
S 删当前行并开始输入正文
  ~  改变当前字符大小写
x  删当前字符
X  删当前字符左边的字符
  dw  删光标到词尾的串
  d :return=dd   删两行
    d [[    删光标到区首
  D=d&
fn   移到跟当前光标后面的“n”字符处
Fn   移到跟当前光标前面的“n”字符处
fn   移到跟当前光标后面的“n”字符前一列
Fn   移到跟当前光标前面的“n”字符后一列
  ;  继续f,F,t,T查找
  ,  反向f,F,t,T查找
  :addr    到指定行
  :set nu   当前缓冲区加行号
  m [a-z]   做标记
  ‘a    返回原记号处
  ecol   定位到指定行
  J   光标所在行与下行合并
  u   取消前次操作
U     光标未离开当前行之首,取消从光标移来所做的修改
  p   将缓冲区内容插入光标右边,添加新行
:e!    取消最后一次写文件以来所做的所有修改
.  重复上一个命令
9 图形界面
9.1 进入系统
 
在此输入用户名,按回车
 
在此输入口令,按回车进入系统




在此可选择你所熟悉的语言环境
 

 
进入系统后,可用dtterm,DECterm,Xterm等仿真终端,输入UNIX命令。

9.2 终端仿真  dtterm  Decterm
 
9.3 输入法设置
 
选择默认输入法,指定启动和停止输入法的热键,各种输入法的切换热键。退出系统并重新登录后,设置生效。
9.4 编辑器
 
操作与PC机Notepad完全相同
9.5 其它X实用程序
在程序组中有多级程序组。
10 编程
10.1 DEC  FORTRAN
F77  [option]  filename  [option]
源文件以.f,.for,.FOR结尾
目标文件以.o结尾
.F结束的文件必须先用C予处理程序处理
.r和.E解释为ratfor或ef1源程序
被 cpp予处理过的源程序
.options
-o output   生成目标文件名
-v     生成l列表文件
-w1    列警告信息,包括未被使用的变量
-W
-cross-reference   列表中含交叉索引
-c     强制生成目标文件,而不生成或执行代码
-d-lines   编译第1列为D的行
-go     无符号信息
-g1     应跟踪信息,行信息缺省
-g2或-g  应符号调试信息和跟踪信息自设置 O。
-g3   应符号调试信息和跟踪信息但调试信息不精确
-machine-code   在列表中显示机器语言信息
-o0    无优化
-o1    局部优化
-o2    全局优化包含o1
-o3    附加全局优化包含o2
-o4或o包含内部行扩展包含o3
-o5  软件管道优化
-om    连接后优化
-tune generic ︱host︱ev4︱ev5
改进针对本机或本cpu的性能,其它cpu下降
-show code  显示机器代码
-show include  显示include文件中语句
-show nomap   无符号表示
-show xvef 
-warn argument-checking
-warn declaretions
-warn noalignments
-worn nogenerl
-warn nouncalled
-warn nouninitialized
-warn nounreachable
-warn truncated-sourse
-warn unused
-convert cray
-convert IBM
10.2 dbx技巧
dbx和ladebug都是UNIX下调试程序
ladebug是DEC开发的增强型符号调试程序
ladebug  a.out
help   查看联机帮助
help cmd 
alias    查看和设置别名
print   显示变量或内存串值 
ox140001000/100x  转贮内存
x 长字  xx双字  x字  s串  c字符  I机内代码
where   在堆栈中寻找变量值
ro   为函数返回值
r16  函数变量1
r17  函数变量2

r20  函数变量5
多于5个变量被压入栈
assign   改变内存值 
print* (long *) ox11fffff20
ox632f73756c  70322d
assign  ox11fffff20=17
ox17
print* (long *)ox11fffff20
ox17
stop in      stop  in  
stopat
file
step   stepi
next   nexti
cont  conti
w    wi
l    li
程序代码位置   ox120000000
数据代码     ox140000000
set  &hexin=1     所在输入均为16进制
set  &hexints=1   所在输出均为16进制
&curpc
&curline
use  /dir1/dir2/…
startddr,endaddr/mode
startddr,endaddr/count mode
d  10进制word
D  10进制long
o八进制word
O 八进制long
x 十六进制 word
X 十六进制 long
b  八进制  byte
c  字符   byte
s   串    Asciz
f  单精度  real
g  双精度  real 
i  反汇编  指令
# 解释
!string   ?string  串查找
alias ,unalias
予定义的别名
a  assign  f   func
b  stop at  h   history
bp stop in   j status
d  delete  li &curpc/10I;&curpc=&curpc+40
l  list
n   next            q    quit
u:  nexti            r   rerun
p   print           ri   record input
pd  printf  “%d”    ro  recond ouput
po  printf “%o”      s    step
pr  printregs        si   stepi
ps  printf “%s”      u  list  &curline-9:10
px  printf “ox%x”    w list &curline-5:10
wi &curpc-20/10i     W list &curline-10:20
what is  变量       delet all
where is   变量      file
which    变量      goto line
patch f00=20  
patch f00=20          catch ignore信号
trace    at           set,useset
return              source 文件名 
attach
dbxinit 文件,初始化命令,设置,
10.3 make ,makefile, Makefile  s.makefile
例:persee:persee.for  cudl:a.o   l:b.o
         f>>-c-g-i8-r8-dorble-size128-g\
          -convert=cray persee.for cudl:u.0  l:b.0
cndl:u.o:cndl:u.for
   f>>-c-g-i8-r8-double-size128-convert=cray\cndliu.for
l:b.o:lb.for
   f>>-c-g-i8-r8-double-size128-convert=cray\l:b.for
make  -b   兼容老版makefile
-d     Debug 模式
-f makefile
l:b:l:b(file1.0)l:b(file2.0) l:b(file3.0)
.c.a:
   &(cc)-c&(CFLAGS1)&<
   ar  rv $@  $*.0
   rm-f  $*.0
10.4 使用软盘
n 软盘文件系统
$ fddisk   -fmt   /dev/rfdoa
$ fddisk   -fmt  -f  /dev /rfdoc
$ newfs   /dev/fd0c   rx23
$ mount  /dev/fd0c  /mnt
$ cp  file /mnt
$ umont  /mnt
n DOS格式软盘
# ln –s /dev/rfd0c /dev/fddrive
$ /usr/bin/mtools/mdir
$ /usr/bin/mtools/mcopy file a:
n 原始格式
$ tar cvf /dev/rfd0a mydirs
11 UNIX艺术
对UNIX使用时间越长,对UNIX的了解就越深入,刚开始使用时,每天都有新的发现,二三年以后逐渐开成自己的风格。
使用UNIX是一种艺术享受,而不是拦路虎,通向艺术之路。
11.1 选择你钟爱shell
   每一种shell都是进入时初始执行文件。
   sh     ksh       profile
   csh               login       cshrc
  /etc下             csh.login    所有csh用户进入时初始化
设置环境变量
设置path和manpath
设置终端参数
执行用户命令
赋置别名
例:  csh                保存历史
      .login                           set savehist=40
     set term=vt320                   set proupt=“hostmane\!.”
     set editmode=emacs  
     set prompt=“‘whomni’ @‘hostname’\!>”
     set history=100
     setenv  lang=zh.cn
   Ksh profile
   SYBASE=/usr/sybase
   DS2UERY=SYBASE
   EXPORT.SYBASE DS2UERY
alias   别名
alias  dir   ls 
alias  type  cat
alias  move “mu-i”
alias   del  rm
alias   md  mkdir
alias   rd  rmdir
alias  deltree  “rm –r”
alias  ren  mv
alias  cipy  “cp-i”
alias  xcopy  “cp-r”
11.2 使目录间转换更容易
set cdpath=(/usr/rsers/rser1/persee  /usr/users/user1/conpate/mut  /usr/examples/motif/cpuinfo)
%pwd
%/usr/users/user1
%cd mut
%pwd
%/mut
%cd persee
%pwd 
/usr/users/user1/persen
pushd   popd   dirs
pwd 
/usr/inolude
poshd  sys
pwd /usr/include/sys
pushd /usr/users/user01
popd +1
pwd
11.3 电子邮件来时通知
unset mail 
biff y  xbiff


12 TCP/IP网络简介
12.1 IP地址
   ping  195.1.1.1
   ftp   195.1.1.1
   telnet   195.1.1.1
使用机器名,hosts中维持1个名称和地址转换数据库格式
195.1.1.0 网络名
195.1.1.1 主机名
12.2 ftp  使用
    ftp   主机/地址
        user
       password
ascii  binary  cd  lcd  pwd  ls  lpwd  get  put  mget  mput  prompt  vervose  bye  oper  bye  close  help
12.3  telnet终端仿真
telnet hostname
Digital UNIX (dec3000.newdesign.com.cn) (ttyp1)
login: user1
passwd:
$
设置终端属性:
$ TERM=vt100
$ export TERM
$ stty erase ‘^?’
12.4   X终端仿真
Huminbird Exceed
执行Xconfig,选择Communication->XDMCP-broadcast->OK,启动EXCEED,可以看到UNIX主机已在列表中。点击进入。
eXcursion
执行eXcursion control panel选择XDMCP->Enable XDMCP->选择XDMCPbroadcast,启动eXcursion,点击进入想连接的UNIX主机。

13 UNIX的批处理 Shell Script
13.1 前言
    在DOS 中,你可能会从事一些例行的重覆性工作,此时你会将这些重覆性的命令写成批次档,只要执行这个批次档就等於执行这些命令。大家会问在UNIX中是否有批次处理这个东东,答案是有的。在UNIX中不只有如DOS 的批次处理,它的功能比起DOS 更强大,相对地也较复杂,已经和一般的高阶语言不相上下。在UNIX中大家都不叫做批次档,而叫做Shell Script。
    一般而言,Shell Script的地位和其它的可执行档(或命令)是完全相同的,只不过Shell Script是以文字档的方式储存,而非二进位档。而执行Shell Script时,必须有一个程式将其内容转成一道道的命令执行,而这个程式其实就是Shell ,这也就是为什麽我们叫做Shell Script的原因(往後我们称为Script)。不同Shell 的Script基本上会有一些差异,所以我们不能将写给A shell 的Script用B shell 执行。而在UNIX中大家最常使用Bourne Shell以及C Shell ,所以这堂课就介绍这两种Script的写法。

13.2 将文字档设为可执行的Shell Script
    如果我们已经写好Script,如何将其设成可执行档呢?因为Script其实是一个可执行档,所以必须将其存取权设定成可执行。我们可以使用下列命令更改存取权:
        chmod u+x filename      只有自己可以执行,其它人不能执行
        chmod ug+x filename     只有自己以及同一群可以执行,其它人不能执行
        chmod +x filename       所有人都可以执行
    而我们如何指定使用那一个Shell 来解释所写的Script呢?几种基本的指定方式如下所述:
1. 如果Script的第一个非空白字元不是"#",则它会使用Bourne Shell。
2. 如果Script的第一个非空白字元是"#"时,但不以"#!"开头时,则它会使用C Shell。
3. 如果Script以"#!"开头,则"#!"後面所写的就是所使用的Shell,而且要将整个路径名称指出来。
这里建议使用第三种方式指定Shell ,以确保所执行的就是所要的。Bourne Shell的路径名称为/bin/sh ,而C Shell 则为/bin/csh。
<eg>



1. 使用Bourne Shell






        2. 使用C Shell






        3. 使用/etc/perl
           






    除了在Script内指定所使用的Shell 外,你也可以在命令列中强制指定。比如你要用C Shell 执行某个Script,你可以下这个命令:
        csh filename
此时的Script的存取权就不一定要为可执行档,其内部所指定的Shell 也会无效,详细的情形後面会讨论。

13.3 Script的基本结构及观念
    Script是以行为单位,我们所写的Script会被分解成一行一行来执行。而每一行可以是命令、注解、或是流程控制指令等。如果某一行尚未完成,可以在行末加上"\" ,这个时候下一行的内容就会接到这一行的後面,成为同一行,如下
        





    当Script中出现"#" 时,再它後面的同一行文字即为注解,Shell 不会对其翻译。
    在Script中要执行一个命令的方法和在命令列中一样,你可以前景或背景执行,执行命令时也会需要设定一些环境变数。
    Script的流程控制和一般高阶语言的流程控制没有什麽两样,也和高阶语言一样有副程式。这些使得Script的功能更加强大。
    为了达到与高阶语言相同的效果,我们也可以在Script中设定变数,如此使Script成为一个名付其实的高阶语言。

13.4 Bourne Shell
13.4.1 变数
    Bourne Shell的变数型态只有字串变数,所以要使用数值运算则必须靠外部命令达成目的。而其变数种类有下列几种:
1) 使用者变数
        这是最常使用的变数,我们可以任何不包含空白字元的字串来当做变数名称。
        设定变数值时则用下列方式:
            var=string
        取用变数时则在变数名称前加上一"$" 号。
        <eg>






            结果如下:
            name
            Tom
2)     系统变数(环境变数)
        和使用者变数相似,只不过此种变数会将其值传给其所执行的命令。要将一使用者变数设定为系统变数,只要加上:
            export var
        <eg>




            ┌———————┐

        以下是使用者一进入系统之後就已设定好的系统变数:
            $HOME       使用者自己的目录
            $PATH       执行命令时所搜寻的目录
            $TZ         时区
            $MAILCHECK  每隔多少秒检查是否有新的信件
            $PS1        在命令列时的提示号
            $PS2        当命令尚未打完时,Shell 要求再输入时的提示号
            $MANPATH    man 指令的搜寻路径
3)     唯读的使用者变数
        和使用者变数相似,只不过这些变数不能被改变。要将使用者变数设成唯读的,只要加上:
            readonly var
        而若只打readonly则会列出所有唯读的变数。还有一点,系统变数不可以设定成唯读的。
        <eg>








            结果如下:
            Tom
            name: is read only
            readonly name
            readonly ......
4)      特殊变数
        有些变数是一开始执行Script时就会设定,并且不以加以修改,但我们不叫它唯读的系统变数,而叫它特殊变数(有些书会叫它唯读的系统变数),因为这些变数是一执行程式时就有了,况且使用者无法将一般的系统变数设定成唯读的。以下是一些等殊变数:
                  这个程式的执行名字
            $n      这个程式的第n个参数值,n=1..9
            $*      这个程式的所有参数
            $#      这个程式的参数个数
            $$      这个程式的PID
            $!      执行上一个背景指令的PID
            $?      执行上一个指令的返回值
        当你执行这个程式时的参数数目超过9 个时,我们可以使用shift 命令将参数往前移一格,如此即可使用第10个以後的参数。除此之外,我们可以用set 命令改变$n及$*,方法如下:
            set string
        如此$*的值即为string,而分解後则会放入$n。如果set 命令後面没有参数,则会列出所有已经设定的变数以及其值。
        <eg>
档名:ex1  参数:this is a test














            结果如下:
            Filename: ex1
            Arguments: this is a test
            No. of args.: 4
            2nd arg.: is
            No. of args.: 3
            2nd arg.: a
            Arguments: hello, everyone
            2nd arg.: everyone
    值得一提的是,当你想从键盘输入一变数值时,你可以使用下面的命令:
        read var1 var2.....
    这时read会将一个字分给一个变数。如果输入的字比变数还多,最後一个变数会将剩下的字当成其值。如果输入的字比变数还少,则後面的变数会设成空字串。
        如果需要处理数值运算,我们可以使用expr命令。其参数及输出列於附录A。
13.4.2 执行命令
    在Bourne Shell中有五种方法执行一个命令,而这五种方式所产生的果有些许的不同。
1) 直接下命令
        这个方式和在命令列中直接下命令的效果一样。
2) 使用sh命令
            sh command
        这个档案必须是Bourne Shell的Script,但这个档案并不一定要设成可执行。
        除此之外和直接下命令的方式一样。
3) 使用"."命令
            . command
        这时和使用sh命令相似,只不过它不像sh一般会产生新的process ,相反地,它会在原有的process 下完成工作。
4) 使用exec命令
            exec command
        此时这个Script将会被所执行的命令所取代。当这个命令执行完毕之後,这个Script也会随之结束。
5) 使用命令替换
        这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这个方法。我们将命令列於两个"`" 号之间,而Shell 会以这个命令执行後的输出结果代替这个命令以及两个"`" 符号。
        <eg>
            str='Current directory is '`pwd`
            echo $str
            结果如下:
            Current directory is /users/cc/mgtsai
            这个意思是pwd 这个命令输出"/users/cc/mgtsai",而後整个字串代替原来的`pwd` 设定str 变数,所以str 变数的内容则会有pwd 命令的输出。

        <eg>
            number=`expr $number + 1`
      这就是先前所提要作数值运算的方法,基本上expr命令只将运算式解,而後输出到标准输出上。如果要将某变数设定成其值,非得靠命令替换的方      式不可。这个例子是将number变数的值加1 後再存回number变数。
13.4.3 流程控制
    在介绍流程控制之前,我们先来看看test命令。test命令的参数是条件判断式,当条件为真时则传回非零值,而条件为伪时则传回零。在所有的流程控制都必须用到test命令来判断真伪。而test命令的使用方法则列於附录B。
    <eg>
        test $# = 0
     如果执行这个程式没有参数时,会传回非零值代表"$# = 0"这个条件成立。反之则会传回零。
    以下介绍各种流程控制:
1) if then
     
        语法如下
                                        
if (condition)               
then                           
                then-commands            
            fi                              
                                            
        condition 是一个test命令。往後所介绍的各种流程中的condition 都是test命令。
        <eg>
档名:chkarg







            $ chkarg Hello
            Arg1: Hello
            $ chkarg
            $

2)   if then else
        语法以及流程图如下
                                             │       FALSE
            if (condition)              <condition>————————┐
              then                           │TRUE            │
                then-commands           then-commands    else-commands
              else                           ├—————————┘
                else-commands                │
            fi
3)    if then elif
        语法以及流程图如下
                                            │       FALSE
            if (condition1)             <condition1>———┐
              then                        │TRUE      │      FALSE
                commands1              commands1  <condition2>┐
            elif (condition2)                │          │TRUE    │
              then                       │   commands2    commands3
                commands2               ├—————┴—————┘
              else                       │
                commands3
                commands3
            fi
        <eg>
            echo 'word 1: \c'
            read word1
            echo 'word 2: \c'
            read word2
            echo 'word 3: \c'
            read word3
            if (test "$word1" = "$word2" -a "$word2" = "$word3")
              then
                echo 'Match: words 1, 2, & 3'
            elif (test "$word1" = "$word2")
              then
                echo 'Match: words 1 & 2'
            elif (test "$word1" = "$word3")
              then
                echo 'Match: words 1 & 3'
            elif (test "$word2" = "$word3")
              then
                echo 'Match: words 2 & 3'
            else
                echo 'No match'
            fi
4)  for in
        语法以及流程图如下 
                         

你可能感兴趣的:(Unix Basic)