Linux学习笔记补充

三种更改shell类型的方式:
(1)为以后登录的所有会话更改默认的shell
(2)创建一个运行在默认shell之上的shell,或者和默认shell并行的shell
(3)只改变当前登录会话的shell
前提是当前系统已经包含了想要使用的新shell。登陆后,输入chsh可以更改默认的shell。
以$开头的是Bourne Again shell(Bash) ;以%开头的是TC shell

Linux系统的启动文件:/etc/profile 主要配置环境变量
对于某些shell还有点文件,运行相应shell时,会执行。这些文件称为shell启动文件。
放于主目录(用~表示),

pico编辑器
ctrl+o:写入  ctrl+X:保存并离开
Ctrl+F:向前一个字符  Ctrl+B:向后一个字符 Ctrl+P:向前一行 Ctrl+N:向前一行
Ctrl+E:当前行尾 Ctrl+U:保存


邮件阅读时命令:
r:回复  d:删除  t:显示 n:下一封  p:显示  q:退出  s:保存

-r 文件名:作为附件发送

创建邮件地址别名:alias 别名 全名
方法2:将这些命令加入到.mailrc文件中。以后每次运行mail命令均适用这些别名

全屏邮件系统VS行邮件系统  Kmail图形化电子邮件系统

Linux支持5中文件类型:普通文件、目录、符号链接、特殊文件(设备)、管道文件(FIFO)

在命令行中所有的~呗认为是主目录

目录文件由目录项组成
根目录,位于分层文件系统的顶层,用斜线表示"/",包含一些标准文件和目录

/etc目录:不包含任何二进制文件 主要有管理员使用 普通用户只有读权限

echo [选项][String]-E:不解析转义字符 -e:解析转移字符
常用的转义字符 \c:回车后不换行  \t:制表符  \\反斜线 \n:不输出行尾的换行符
不加参数打印空行

ls -F:显示的目录后加/,可执行文件后加*,符号链接后加@
   -i:显示icode号码
   -a:显示所有文件 包含隐藏文件
   -l:显示详细信息,如访问权限,连接数,所有者,组,文件大小,修改时间
     第一字段的第一字母:b_块特殊文件 c_字符特殊文件 d_目录
                         l_连接 p_命名管道FIFO
     第一字段的其他字母:所有者 组 其他访问者的权限
      第二字段:连接数(硬链接)  第三字段:登陆者的名字
     第四字段:所有者的组名  第五字段:文件大小 字节单位
     第6-8字段:最近修改日期和时间
     第9字段:文件名

ls -al:显示所有详细信息

隐藏文件的用途:
.addressbook:邮件客户端程序pine的地址薄
.bash_history:保存bash的会话历史记录
.bashrc:Bash shell的设置
.cshrc:Cshell的设置
.exrc:vi的设置
.login:shell的设置 如果是Cshell 则登陆时执行
.mailrc:mail和mailx的设置和地址薄
.profile:shell的设置,如果是Bourne或Korn shell,则登录时执行

echo ~用户名:显示用户主目录

dirs :显示当前的目录堆栈
    -v:显示目录项和索引号 第一个是栈顶为当前目录 编号0
    +N:从栈顶算起第N项开始
    -N:从栈低算起第N项开始
    -c:堆栈中只保存当前目录
   -l:显示目录的绝对目录名
   -v:显示堆栈项,每行一个带索引号

命令pushd:将一目录的绝对路径压入目录堆栈的栈顶,如果不带参数则交换栈顶的两个目录项
  +N:循环移动堆栈项,把从栈顶算起滴N项移到栈顶
  -N:循环移动堆栈项,把从栈低算起滴N项移到栈顶
  -n:不让新压入的成为栈顶项。

命令popd删除,不带参数删除栈顶目录
  -N:从目录堆栈中删除第N项  同 +N:
 -n:不改变当前目录

Linux不支持普通文件的类型和拓展名类型,因此不能根据文件名确定文件内容
可以用file命令来确定

文件的属性信息存储在inode的数据结构。当创建文件时,系统在磁盘上的inode列表中为文件分配
一个唯一的inode,inode列表又成i-list。linux内核在内存中为所有打开的文件保存一张inode表,
打开一个文件时,系统在inode表为该文件分配一个inode。i-list和inode根据文件的inode进行索引。
inode号可以用于索引inode列表,访问被打开文件的属性,当文件属性改变时,内存中文件对于的inode会
立即更新,磁盘的inode定时更新。

字段link count:系统中这个文件有多少个不同的名称
字段file mode:文件以何种方式打开
字段access permissions:不同用户的不同操作权限
字段file's location on disk:指向磁盘块的直接或间接指针 保存文件的内容

Linux根据文件描述符执行文件操作。内核根据文件描述符查找文件描述符列表,获得指向文件表的指针。
文件表包含了指向inode表中的这个文件的inode指针。访问文件inode接下来通过直接指针和间接指针
访问保存文件内容的磁盘块,完成对文件的操作。

Linux系统允许改变标准文件从而改变单个命令,含shell脚本的执行所操作的文件。
改变标准文件来改变命令所操作的文件的方法叫输入、输出、错误重定向。

保护文件三种策略:每个用户一个登录名和密码;加密;设置访问权限只允许被特定用户访问
密码以明文形式保存在/etc/passwd.这种机制依赖于密码的保密性
加密:命令crypt加密解密
设置权限方式建立在用户分类、访问权限分类、访问操作分类基础上。用户组信息在/etc/group
执行(X)权限不能读写,只能搜索,用ls方式

文件的用户可以有8种权限,用8进制0-7表示,0无任何权限 7所有权限
总共用9位来表示3种用户(User、Group、Others)对应的权限,8进制000-777
第一位表示:文件拥有者对文件拥有的权限
第二位:组对文件拥有的权限
第三位:其他用户对文件的权限
0用-表示,1用r w x表示

chmod 中的symbolic-mode模式控制字,格式<who><operator><privilege>
<who>:u用户 g组 o其他 a全部 ugo全部
<operator>+增加权限 -删除权限 =设置权限
<privilege> r w x u:用户当前权限

0:无权限 1:执行权限 2:写权限 3:写和执行 4:读权限  5:读和执行
6:读写权限  7:读写执行

3个最重要的位:
  set-user-ID位:  允许用户更改自己的有效用户标识使自己拥有运行该命令的用户所没有的一些特权。
                  每个linux文件都有一个附加保护位,SUID位。
                  通过chmod 4XXX file-list;4XXX每位均8进制,4表示SUID=1
                  或chmod u+x file-list
  set-group-ID位:使进程拥有组的访问权限。chmod 2XXX file-list或 chmod g+s file-list
  sticky位:保证未被授权的用户不能删除或重命名某个目录下其他用户的文件。
            chmod 1XXX file-list或chmod +t file-list

zdiff 和zcmp用于比较压缩文件 zdiff 先解压文件再把他们联通命令选项传递给diff命令
zcmp先解压文件再把他们联通命令选项传递给cmp命令

unip删除文件中所有连续的重复行,并输出到output-file文件,输入文件不变
uniq [选项] [+N] [input-file][output-file]

文件打印和文件显示相似都是把文件内容送到输出设备,一个是显示器一个是打印机。
区别:linux系统下每个用户一个独立的显示器,但共享一个打印机。显示文件时会立即
显示,打印时可能不会立即。(先来先服务机制)

gzexe压缩可执行文件后仍可执行文件(-d解压);而gzip压缩可执行文件后不能执行
gzexe压缩后源文件名后+~后缀
查看压缩文件前的原始内容zcat(cat显示压缩文件的版本):可以显示gzip和compress
压缩的文件内容(先解压在显示),元压缩文件不变。zmore一屏一屏显示压缩文件内容
此时用more显示的是乱码
zcat -h:帮助信息 -t:检查压缩文件完整性 -r:递归访问目录结构显示子目录中文件

grep '[a-z]\{8\}' 文件名:在文件中查找至少8个连续小写字母行
grep '\<Ke' 文件名:查找以Ke开头的单词的行
grep 'Ke\>' 文件名:查找以Ke结尾的单词的行
zgrep用于搜索压缩文件:解压缩gzip或compress的压缩文件,将参数传给grep

表格形式文件处理:cut paste
paste用于水平连接文件内容 paste [选项] 文件列表
cat垂直对文本操作  paste至少屏幕显示 并未保存 如果保存重定向到新文件

history | more:一屏一屏显示历史记录
fc -l:带行号 的历史命令列表 -r:逆序显示带行号的历史列表
-e 编辑器名:使用编辑器来修改命令

文件共享的方式:
(1)通过副本共享(2)通过同一用户名登陆共享(3)为共享文件建立适当的访问权限
(4)为团队的成员建立一个用户组(5)通过文件链接共享

symlinks [选项] 目录列表 -c:绝对链接转换到相对连接
         -d:删除悬浮链接  -r:递归搜索目录列表中所列目录
  -s:删除冗长链接  -v:查找相对链接

一条命令都有默认的输入输出和错误输出文件。即标准文件,内核为每个命令自动打开标准文件
stdin stdout stderr

输入重定向用<表示,断开键盘和命令的标准输入之间的关联,然后将输入文件关联到标准输入
输出重定向用>表示,断开命令的标准输出与显示器的关联,并将输出文件与标准输出关联

输入输出重定向可以一起用 command < input_file > output_file或
command  > output_file < input_file

标准出错的重定向: command 2> error_file

用1条命令实现标准输出和标准错误输出重定向:用文件描述符带上>将标准输出和标准错误
重定向到一个文件。
cat lab1 lab2 lab3 1>cat.output 2>cat.error;若都输入到一个文件:
cat lab1 lab2 lab3 1>cat.output.error 2>&1 文件描述符2成为1的备份

用一条命令实现重定向标准输入、标准输出和标准出错:
command 0< input_file 1> output_file 2> error_file 解析顺序从左到右

>>追加文件内容
管道被认为是进程交互的机制。
tee的常用方式:command1 | tee file1...fileN | command2
command1的输出作为tee的输入相连,把tee的输出送到文件file1...fileN,并把他们作为
command2的标准输入。

TCshell中出错重定向:command >& file 将输出和标准出错重定向到文件。
TCShell中没有一个操作符用来单独重定向标准出错但如果使用了子shell,用括号抱起来的
命令,可以使用>&重定向到文件。  >>&追加方式

TCSell允许使用|&将一条命令的输出和出错关联到另一命令的标准输入
command |& command2

<&-:关闭标准输入  >&-:关闭标准输出  m<&-或m>&-:将文件描述符m关闭
>|file :忽略noclobber变量将标准输出重定向到file(或>!file )
n>| file:忽略noclobber变量将文件描述符n重定向到file
<> file:标准输入输出都定向给file
n< file:将file设为文件描述符n
n>file: 将文件描述符n指向file
>> & !file:忽略noclobber变量将标准输出和标准出错定向到file
(cmd > file1)>& file2:cmd的输出定向到file1,标准错误到文件2

CPU在进程歼快速切换实现多个进程的同步。Linux系统为每个准备执行的进程分配一个优先权
系统进程的优先权会定期重新计算。系统调度时分配给优先权最高的进程。多个进程优先权相同
按先到先服务。就绪 等待 执行 僵死 交换5种形态。
其中,交换:进程准备执行,但暂时放于磁盘上,或者它需要较多内存,现在木有足够内存空间
僵死:进程执行退出之前其父进程已经终止,该进程变为僵死。所有将死进程最终都被初始化
进程接收,并从系统中删除。

Linux shell中内部命令:alias bg cd continue echo exec exit fg jobs pwd set time test
umask unset wait
外部命令:grep more cat mkdir rmdir ls sort ftp lp ps telnet

ps -l输出各项含义:
F:与进程相关标志, 用来指示进程是否是用户进程或内核进程,进程为什么停止或休眠
NI:Nice值,用于计算进程优先权的参数之一
VSZ:虚拟大小  RSS:驻留集大小:物理内存大小以千字节K表示
WCHAN:等待管道,  STAT:状态

命令后加&,可以使其在后台运行。后台进程Nice值大 优先级低
不需同用户交互且运行时间长的命令适合后台运行
命令suspend可以挂起当前的shell进程。fg返回最近挂起的进程

命令组通过一个进程来完成

打开Linux系统后,LILO(LInux LOader)找到内核并加载到内存。初始化硬件,
转入保护模式,加载操作系统,执行初始化各种内核数据结构的代码。此进程的PID为0
它起动初始进程init(PID=1)完成引导过程的其余工作,init进程启动守护进程kflushd(PID=2),
kupdate(3),kpiod(4),kswapd(5).init进程然后初始化文件系统,安装根文件系统,接下来试着执行
/sbin/init程序,在每个激活的终端执行minegetty进程即getty进程,它设置终端属性,显示login提示符
等待用户输入。
输入登录名后,getty进程创建子进程。它变成已用户名为名的登录进程。登录进程提示输入密码,正确后,
产生子进程,登录进程变成登陆shell,密码错,控制权回到getty进程。进入登陆shell后,Ctrl+D可以终止
当前shell,控制权回到getty进程。

ps -e f 或pstree用图的形式显示当前系统执行进程的进程树。名字前+的是前台进程,- 的是后台进程。
pstree -h:加粗显示当前进程

网络模型:ISO的7层模型,tcp/ip的5层模型 TCP包称为段 UDP包称为数据报
TCP或UDP协议使用16位正整型数据0-65535,来区别运行在客户端上的进程,称为端口号。

rwho每行信息:用户登录名、登陆计算机、终端、登陆日期和时间

 rusers:显示在局域网中登陆的用户信息 -a:显示所有 -s:以长格式显示
向局域网中所有主机发送广播,请求所有用户信息,得到用户信息后按返回先后顺显示终端

ruptime每行:计算机名、系统状态、主机保持up/dowm时间(+号前的是天)、登陆主机用户数、
主机负载系数。

telnet命令可以以2种模式操作,输入模式和命令模式。不带参数时命令模式,终端显示telnet>提示符。
带参数login:提示符输入用户名密码。 客户端有2种输入模式:一个个字符 一行行
与telnet不同rlogin时若远程主机用户名密码与本机相同则不再啊输入用户名密码。logout注销返回本地

rsh:在同一网络中远程计算机上执行命令。
例子:rsh 远程主机名 sort student >sorted_students sorted_students文件保存在本地
例子:rsh 远程主机名 sort student < student >sorted_students sorted_students文件保存在本地
      student 文件赖子本地。
从本地得到输入文件,并将执行结果的输出保存在远程计算机,重定向命令两端要加引号
cat student | rsh 远程主机名 ' sort > sorted_students'

rcp:主机名和用户名前的-标识拒绝访问,+标识可以匹配任何的主机名或用户名。
可以使用traceroute追踪显示Email、telnet、以及从ftp站点进行文件下载的路由
但有安全隐患——用户了解了主机所连接的网络内部结构及网络中各主机的IP

Bash shell中有2种变量:shell环境变量和用户定义变量。环境变量用于定制shell运行环境,保证shell
命令的正确执行。所有环境变量都会传给shell子进程。这些变量在/etc/profile文件中初始化

不带参数的set命令可以打印当前所有shell变量和当前值。不带参数的local命令可以打印一函数的局部变量
不带参数的declare或者typeset同样可以显示出同样的shell变量列表,可以用env / printenv来显示环境变量和值。但
不包含函数定义及用户定义的变量

BASH:bash的完整路径  CDPATH:包含cd命令逐个查找的路径  EDUTOR:应用程序中使用默认的编辑器
ENV:Linux查找配置文件的路径 HISTFILE:存放历史记录的文件的路径名
HOME:用户主目录的名字  IFS:BAsh用来分隔命令行中参数的分隔符
MAIL:用户的系统邮箱文件的名字  MAILCHECK:shell多少秒检查一次用户的系统邮箱并有新邮件时通知
PATH:用户检索路径的变量 PS1:命令行的主shell提示符 PS2:二级shell提示符
PWD:当前工作目录名字  TERM:用户当前终端类型

特殊字符:\H:主机域名全称 \T:时间 hh:mm:ss 12小时制  \d:日期 周月日
\h:主机名的第一部分  \s:shell的名字   \t:24小时制时间  \u:当前用户名  \v:bash版本号
\w:当前工作目录

命令替换操作符及其描述:
(1)$variable:返回variable的值,没有的初始化则返回null
(2)${variable}:返回variable的值,没有的初始化则返回null
(3)${variable:-string}:当variable存在且不为空时返回variable的值否则返回string
(4)${variable:=string}:当variable存在且不为空时返回variable的值否则string赋值给塔并返回string
(5)${variable:?string}:当variable存在且不为空时返回variable的值否则显示字符串“variable:”,
                         并在后面显示“string”
 (6)${variable:+string}:当variable存在且不为空时返回"string",否则返回null

如果给变量赋值的内容包括空格,且无引号,则shell会尝试把空格后的赋值内容当成命令执行。
当一个命令被包含在括号并在括号前加$,如$(command),或者呗包含在单引号,shell把它替换为
这个命令的输出结果。这个过程叫命令替换。适用于任何命令。

所有的Linux命令执行成功返回0,否则非0。一个命令的退出状态放在只读的shell变量$?中。可以读取它。
一个被输出的变量实际上是把值复制给所有的后继命令。

显示将一个变量设置为null,unset [name-list]或者等号后未空,直接回车
创建只读的用户定义的变量:declare -r; typeset -r;readonly [name-list]
不带参数时打印所有的制度变量及其值

给shell脚本传参数:环境变量$#包含了传递给一个正在执行的shell脚本的参数的个数;变量$*和$@包含了
所有参数的值。区别是,当被引号包括的时候,即"$@"把每个参数的值作为一个字符串;而非所有的值作为
一个字符串。变量 $0包含了脚本文件的名字。前9个参数值保存在$1-$9中。

虽然只能保存9个参数,但可以接受大于9个参数值。shift命令实现,默认把参数左移一个即删除最左边的。
shift N:向左移动N个位置。

位置参数的值可以用set命令修改。如date命令的结果是6个域, set $(date):将date命令的输出设置为位置变量
set最常用是命令是--.它告诉set命令,如果第一个参数的第一个字符是-,它不应该视为set命令的选项。

shell的程序头:脚本文件名、作者、编写日期、最后一次修改日期、编写目的、算法描述

test expression:test命令检查这个表达式返回true还是false。常用操作符有:
-d file:判断是否是目录 ;  -f file:判断是否是普通文件
-r file:判断是否是只读文件;  -s file:判断是否长度非0文件
-t [filedes]:如果文件描述符是联系着终端则true
-w file:判断文件可写 ;  -x file:判断文件可执行
-b file:判断是块特殊文件; -c file:判断是字符特殊文件
-l file:判断文件存在且是符号链接文件

int1 -eq int2 判断二者是否相等 -ge:>=   -gt:>  -le:=<  -lt:<

str:判断str是否非空;str1=str2 判断字符串相等 ;str1!=str2 判断字符串不相等
-n str:判断str长度大于0  ;-z str:判断str长度=于0

!逻辑非  -a:逻辑与 -o:逻辑或 ():分组

expr args:计算表达式参数args的值,并返回它的值到标准输出。
expr arg1:arg2——在arg1查找arg2模式。如果arg2用\括起来,返回arg1中匹配的部分,
否则返回值是匹配的字符个数。

数组的下表若是@或*,则数组中所有元素都被引用。但${name[*]}拓展为一个词,包括所有元素;
${name[@]}将数组中每个元素拓展为一个词。

files=('ls'):file数组变量包含了当前目录中所有文件名;或用命令echo ${files[*]}
numfile='ls | wc -w':当前目录中文件数目;或用命令echo ${#files[*]}

here文件:将脚本中命令的标准输入重定向到脚本中的数据。
command<<[-] input_marker
          数据
          input_marker    input_marker是自定义的
[-]中-用于取消here文件中行首和结束标记签名的TAB。

exec command:将command代码覆盖到运行exec命令的进程,command替换调用进程而不是创建新进程。
命令结束后控制权交给调用进程的父进程。即无法返回调用进程。若调用进程是登陆shell,则控制权
交给mingetty进程。

Bash shell最多运行10个文件描述符,其中3个是保留的—标准输入(0)标准输出(1)标准错误(2)
exec < file:把进程的标准输入重定向到file,从file中读出
exec > file:把进程的标准输出重定向到file,向file中写
exec >> file:把进程的标准输出重定向到file,向file末尾写(添加)
exec n< file:打开文件file读,并把文件描述符n传递给这个文件。
exec n> file:打开文件file写,并把文件描述符n传递给这个文件。
exec n<< teg ... teg:打开一个here文件用来读,并把文件描述符n传递给这个文件。
exec n>> file:把进程的标准输出重定向到file,向file末尾写,并把文件描述符n传递给这个文件
exec n>&m:把m复制到n中,即进入到文件描述符m中的内容同样也进入文件描述符n
exec <&- :关闭标准输入

在任何一种情况下,执行exec </dev/tty才能将stdin/out重新连接到终端。/dev/tty是一个伪终端,代表了
shell运行时终端。exec 2</dev/tty 将标准错误消息发回显示器。

脚本文件的缺点是保存在硬盘上,调用时需从硬盘读出并加载到内存,比较耗时。
可以使用set查看当前环境中所有的函数

TCshell 的环境变量:prompt:命令行的首级shell提示符,一般是%;prompt2:次级shell提示符
只读环境变量:$!:最近后台进程的PID   $$:当前进程的ID   $#argv or $#:命令行参数的总数
$argv[m~n]:命令行参数m-n   $argv[*] or $*:所有的命令行参数 也可以用$1-9来引用位置参数

set或@命令(不带参数)可以显示所有的shell变量,也可用env和printenv来同时显示环境变量和值
可以在变量名前加$来读取变量当前值,如$variable,或${variable};还可以用${?variable}来检查
变量是否被设置,返回1表示被设置;0表示没有被设置。

若某值有空格,且该值为被括号或引号包含,则shell将第一个词赋值给变量,其他词作为未被初始化
的变量。

当一个命令被包含在''中时,shell将执行这个命令并用命令执行的结果替换这个命令。——命令替换
如set command=pwd:将值pwd赋值;  set command='pwd':将命令pwd赋值给变量 $command将执行它

setenv命令将变量的值传递给后来的shell。可以用exit命令将控制器从当前进程传递给调用它的进程
。参数唯一是一个可选的整数值,作为终止进程退出状态,返回给调用进程。0表示成功,非0表示失败
。该值存放在$?,可用调用进程检查。

shift命令可以移动参数,shift[variable]:将变量variable中的单词往左移动一格,如果没有变量,则
将命令行的参数组往左移动一格

要改变位置参数的值,可以set命令对argv变量赋值。用于命令替换。
set argv=[argument-list]把位置参数的值设置为argument-list。如set argv='date'将date的6个域输出
传递给$1-6参数。

数组名前+$,则可以访问数组中所有的元素。+$#,则可以访问数组元素的总数
看数组是否被初始化 $?数组名:1初始化 0未初始化

TCShell中here document特性允许在脚本中对命令的标准输入重定向,或者将脚本中的数据粘贴到他的后边
command<< 输入标识符
          ...输入数据...
         输入标识符
其中输入数据为command的参数。

compress和gzip用于文本压缩,压缩可以节省磁盘空间和传送时间。然而压缩小文件通常不会是大量的压缩,
即使是压缩产生更小的文件,对一个簇大小或更小的文件压缩也不会节省磁盘空间,因为系统还是要用一割簇
去存储压缩文件。tar命令可以讲多个文件打包一个文件。

tar x选项恢复或解压一个档案文件:但原压缩文件依然存在,保持完整性。
untar解压,也可以用tar将一个目录复制到网络上一台远程计算机。

gcc最常用 的选项是-o,告知gcc把编译后可执行的程序保存到指定的文件,而不是默认的a.out。
gcc可以只用一行命令编译并连接多个C语言源文件,并生成可执行文件。
-c:只将给定的源文件编译成目标文件。产生是目标文件名多了.o的后缀

make内建宏定义:$@:当前目标文件的名字。 $?:比当前目标文件新的依赖文件
$<:比当前目标文件新的第一个依赖文件 $^:用空格隔开所有的依赖文件

nm工具用于查看库文件或目标文件的符号表
-D :只显示动态符号   -V:显示nm版本号   -f 格式:按指定格式输出(格式:bsd sysv posix)
                                                默认bsd
-g:只显示外部符号  -l:输出每个符号所在的文件名和行数
-n,v:按地址对外部符号进行排序   -u:只显示未在库文件中定义的符号

版本管理系统:RCS(版本管理系统)和CVS(并行版本系统)
RCS中版本号从1.1开始,当请求一个文件的特定版本时,RCS首先找到该文件的最新版本,并作出
一定的改动以重建原来的版本。RCS维护版本号:发布号.阶段号.分支号.序列号
RCS把一个文件的不同版本保存在“rcs”格式文件中,RCS的所有工具放在/usr/bin
先创建名为RCS的目录。再创建RCS历史文件,用ci命令,-f [版本号]:强制更爱版本号
-l[版本号]:检入代码后立即重新检出并锁定代码
-r[版本号]:讲一个更改过的文件已给定的版本号检入
-u:检入文件,取消所有锁定,但保留一个只读的副本

co命令检出RCS文件,并把它们保存在正确的位置。
-l:检出一个文件并加锁以便修改  -r 版本:检出文件的给定版本
-u [版本]:检出文件的一个只读副本
-v:显示RCS的版本号

修改错时要放弃修改并反检出文件:rcs [选项] 文件列表
-a 登录名列表:把登录名列表中所有的登录名用逗号相隔加入到控制列表,即允许这些用户检入和检出
文件列表中的文件
-e [登录名列表]:把登录名列表中所有的登录名从控制列表中去除,即撤销权限
-l[版本号]:锁定文件指定版本,若未指定版本,则使用当前最新版本
-o [区间]:删除给定区间的所有版本
-u[版本号]:取消对文件指定版本的锁定,丢弃自上次检入一来所有所有修改

团队合作:(1)将RCS目录放入一个共享文件,使用RCS工具时指定路径即可
或者(2)将RCS建立在一个成员的工作目录下,并在其他队员的工作目录下创建指向他的符号链接
还要设置该目录的权限

rlog:查看RCS文件版本历史  -L:显示当前被检出的用于编辑的文件的版本历史
-R:只显示文件名    -l[登录名列表]:显示当前呗登录名列表指定用户锁定的文件的版本信息
-r[版本号]:只显示指定的版本信息。用逗号相隔版本列表

显示文件差别:rcsdiff[选项] 文件名:比较同一文件的不同版本间的差异
-r[版本号]:指定需要比较的文件版本号

合并不同的版本:rcsmerge[选项] 文件名:将两个不同版本合并到当前版本
-r[版本号]:指定要合并版本号  -p:把合并结果输出到标准输出,而不是当前版本。

RCS的特殊字符序列:$Author$:作者的登录名  $Date$:当前日期和时间
$RCSfile$:RCS文件的名字  $Revision$:最新的版本号
$Source$:源文件的名字

最常用的是$Id$:包括了RCS文件名、版本号、日期、时间、作者的登录名、文件的Rcs状态信息。

cvs [cvs选项] 子命令 [子命令选项或参数]:调用CVS的各种功能以完成与软件版本控制相关的
各项任务。
-H[子命令]:如果指定了子命令,则显示子命令的帮助信息;否则显示cvs工具帮助信息
-d CVS根目录:使用指定路径作为CVS根目录,默认使用环境变量CVSROOT的值。
-e 编辑器命令:使用指定编辑器编辑日志信息,默认使用CVSEDITOR或EDITOR环境变量,均为设置
的话用vi
-n:测试模式:不执行cvs命令,只给出报告
-t:跟踪cvs命令的实际执行过程并显示此过程中发生的所有cvs动作,

创建代码库:CVS把源码保存在一个称为代码库的目录下,代码库包括RCS文件和一个CVSROOT目录
。CVSROOT目录中保存着CVS的管理文件。日常开发不需要访问该目录。
开始使用CVS前,必须设置代码库的位置,创建它,把源码一进去。为了编辑代码,需要检出,
修改后在检入。
2中方式告知CVS代码库的位置:cvs -d命令;在启动文件设置环境变量CVSROOT。
cvs init命令:创建代码库,代码库路径下将建立一个名为CVSROOT的目录。包含一组管理文件以供
CVS维护各类日志。

导入代码库:cvs import [选项] 代码库名称 商品名 版本标签
-b 分支:设置发型分支ID     -d:把导入时间设置为文件的最后更新时间
-m 信息:把信息作为日志写入历史文件

检出源代码 cvs checkout [选项] 模块列表
-D:检出指定日志的代码版本   -P:跳过空目录  -R:深入子目录内部
-d 目录:将检出的模块保存在指定的目录
-j 版本号:合并当前版本与指定版本的差别
-r:检出给定版本的代码

提交对源码的修改:cvs commit [选项] 文件列表
-F 文件:从文件中读入日志信息  -R:深入子目录内部
-f:强制检入  -m 信息 :使用给定的信息做日志
-r 版本号:已指定版本检入文件

代码库中增加文件:cvs add
代码库中删除文件:cvs remove
代码库冻结文件:cvs rtag给代码库中当前代码加标签,称为版本冻结
cvs rtag [选项] 标签 模块列表
-D:使用日期做标签  -F:覆盖已经存在的标签  -R:深入子目录
-b:将当前版本标记为一个分支,以运行并行开发
-d:删除指定标签  -r 版本:给本标签指定一个版本号

检出冻结:cvs export [选项] 模块
-D:日期作为标签  -d 目录:将释放出的代码放到指定目录
-r 标签:指定使用的标签

清空工作目录:cvs release 文件名
远程代码库:用户名@远程主机名:代码库绝对路径

time目录报告3个执行时间:总时间(从开始到完成)
 系统时间(系统干预活动所占时间) 用户时间(代码执行时间)

相关推荐