linux.docx
《linux.docx》由会员分享,可在线阅读,更多相关《linux.docx(30页珍藏版)》请在冰豆网上搜索。
linux
一、shell
1.1什么是shell
●用户与Linux的接口
●命令解释器
●支持多用户
●支持复杂的编程语言
●Shell有很多种,如:
csh,tcsh,pdksh,ash,sash,zsh,bash等。
Linux的缺省Shell为bash(BourneAgainShell)。
Shell是用户和操作系统之间最主要接口。
通过Shell,可以同时在后台运行多个应用程序,并且在把需要与用户交互的程序放在前台运行。
通过在多条命令的序列中使用变量和流程控制,Shell可以作为一名复杂的编程语言。
1.2转义字符和通配字符
●转义字符(metacharacters)指的是在Shell中有特殊含义的字符。
例如:
<>|;!
?
*[]$\"'`~(){}^
#lsfile[1-10].c
#count=`ls–l|grep‘^d’|wc–l`
●通配字符(wildcards)是转义字符的子集,用来查找匹配文件名例如:
?
*[][-][!
]
●使用键,可以自动补齐。
通配一个字符:
"?
"通配多个字符:
"*"
1.3输入输出重定向
●系统定义三个标准文件:
标准输入(stdin)、标准输出(stdout)、标准错误输入(stderr)
●管道符:
"|",将前一个命令的输出转成下一个命令的输入。
●过滤器(filters):
用来接收标准输入,经过一定的转化,再写到标准输出。
所以,过滤器一般放在管道符中间。
每个程序起动时,就有三个文件描述:
STDIN(0),STDOUT
(1),STDERR
(2)。
用"<"改变输入,用">"改变输出,用"2>"改变错误输出,用">>"来追加到已有的文件中。
常用的过滤器如下:
expand,sed,awk,fmt,tac,tr,grep,nl,pr。
tee命令接收标准输入并将数据输出到标准输出和一个文件内。
多条命令可以输入到一行中,并用";"字符分隔。
在一行命令后加"\"表示另起一行继续输入,下一行的提示符变为">"printf(“\t”);
1.4Shell变量
●Shell变量(Variables)是程序用来保存数据用的。
●Shell特殊变量:
系统定义了一些特殊的变量。
如$HOME等。
使用set命令查看当时系统中定义的变量。
系统定义的特殊变量有:
$TERM(当前终端类型),$PATH(命令的搜索路径),$MANPATH(手册页存放的目录),$HOME(用户主目录),$LANG(当前使用语言),$PS1,$PS2(命令提示符),$SHELL(当前Shell名)。
在命令行上打入:
变量名=变量值,可以定义变量。
使用echo$变量名查看变量值。
使用unset取消对变量的定义。
#hello=”123”
单引号表示忽略其中所有的转义字符,双引号表示忽略其中除了$`\以外的其他的转义字符。
反斜线(\)表示忽略下一个转义字符。
多条命令可以输入到一行中,并用";"字符分隔。
在一行命令后加"\"表示另起一行继续输入,下一行的提示符变为">"
●Shell系统变量
$?
:
最近执行的命令返回的值;$$:
本进程的进程号$!
:
最近后台进程号
$#:
shell自变量个数,$1表示第一个自变量
●Shell用户变量
#varname=value:
赋值
#readonlyvarname:
标记只读
#exportvarname:
标记移出:
变量可以被子进程继承
#setenvPATH=/home:
/usr:
/etc:
/bin:
/usr/bin:
(csh中)
#varname=`expr$varname+1`:
变量值增1#x=$[$x+1]
#echo$PATH
1.5定制用户环境
●用户在登录Shell时,会依次执行一系列的脚本。
●使用alias命令,可以定义一些别名。
Alias‘rm–f’rm
登录BASH时,用户将依次执行一系列的脚本:
/etc/profile,$HOME/.bash_profile(如果没有,执行$HOME/.bash_login,还没有,执行$HOME/.profile)。
注销时,会自动执行$HOME/.bash_logout。
使用redhat的用户,登录时除了这两个文件以外,还会自动执行$HOME/.bashrc,这个文件又会再执行/etc/bashrc
1.6条件控制
1)test命令
测试文件、变量的属性,表达式的值,或命令执行返回值。
test–d/usr[-d/usr]
test–f.bashrc[-f.bashrc]
test$count–gt0[$count–gt0]
2)if语句
if(expression)then
command-list
else
command-list
fi
3)case语句
case$varin
pattern1)command-list;;
pattern2)command-list;;
…
esac
4)逻辑运算符&&和||
#test–fmyfile.c&&echo“filefound”
iftest–fmyfile.cthen
echo“filefound”
fi
#test–fmyfile.c||echo“filenotfound”
iftest!
–fmyfile.cthen
echo“filenotfound”
fi
1.7循环控制
1)for语句
forvarinword-list
do
command-list
done
forcountin123
do
echo$I
done
forvar
do
2)while语句
while(expression)
do
command-list
done
#greeting=’helloworld’
i=1
whiletest$i–le100;do
case$iin
*0)echo“**********”>file$i;;
*)echo$i>file$i;;
esac
i=`expr$i+1`
done
例:
append命令的实现:
case$#in
1)cat>>$1;;
2)cat<$1>>$2;;
*)echo‘usage:
append[from]to’;;
esac
#chmod+xmyappend
#myappendfile1file2
1.8函数
functionname()
{
command-list
}
usage()
{
echo“usage:
…..$1”
}
usage“from…to“
注意:
函数的使用就象可执行程序一样,但必须先定义,后使用。
1.9here文档
here文档指在shell脚本中指定输入源,而不是来自文件或标准输入,其中的“<<”是here文档保留字。
#mailcindy<
@$
happybirthday
Iloveyou
!
@$
1.10shell内部命令:
不产生子进程
1)eval:
在shell程序中,利用变量的值来构建命令
A=ls
B=‘|wc-w’
eval$A$B
2)exec:
转去执行exec后命令,不建立新进程,也不返回到当前的执行过程,相当于goto语句。
#catexecdemo
execdate
echohello
3)read:
从标准输入设备(键盘)读入一行,并把读入的字依次赋给各变量,所有剩余的字赋给最后一个变量。
#catparrot
echo“yousay:
\c”
readwhat
echo“Irepeat:
$what”
4)shift:
使命令行参数向左移动一位,并使记录参数总数的变量$#减1
#catshiftdemo
whiletest$#!
=0
do
echo$1$2$3
shift
done
#shiftdemoabc
abc
bc
c
5)wait:
等待当前进程所有子进程结束,若wait后跟参数n,则等待进程n结束。
#catwaitdemo
echo“Thisisanewfile”
(sleep5;date)&
wait
echo“thefileterminate”
执行结果:
Thisisanewfile
April2010:
08:
26BJT2002-04-20
Thefileterminate
6)trap:
中断处理命令
trap命令表中断信号表
#cattrapfile
trapecho‘ThisisINT2’2
trapecho‘ThisisINT3’3
forIin/bin/bin/usr
do
echo$I
done
下面程序实现scan:
扫描当前目录下的每一个子目录,并执行用户提交的命令:
d=`pwd`
foriin*
do
iftest–d$d/$i
then
cd$d/$i
whileecho“$i:
”
trapexit2
readx
dotrap:
2;eval$x;done
fi
done
7)点命令.
在bsh利用.命令执行一个命令时,不创建子进程。
(csh中用source)
8)空命令:
不做任何事情
1.11shell程序实例
下面程序dircmp测试当前目录与指定目录是否含有相同文件数
iftest$#-ne1then
echo“Usage:
dircmpdirname”
exit1
elseiftest!
-d$1then
echo“\”$1\”isnotadirectory”
exit1
else
this=`ls–l|grep‘^-’|wc–l`
that=`ls–l$1|grep‘^-’|wc–l`
iftest$this–ne$thatthen
echo“Currentdirectoryand\”$1\”donotmatch”
else
echo“Currentdirectoryand\”$1\”havesamenumberoffiles”
fi
fi
fi
#dircmpabc
“abc”isnotadirectory
1.12shell程序的执行方法:
1)$chmodu+xdircmp
$./dircmp/usr/bin
2)$shdircmp
3)$sh4)$.dircmp(用点命令执行程序,不创建子进程)
%sourcedircmp(csh中)
二、make
2.1make
大型程序维护工具
Makefile或makefile:
告诉make维护一个大型程序,该做什么。
Makefile说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,make按照这些说明自动地维护这些模块。
Netdefs.h头文件
Subrs.cnetwork.c源文件
编译
Subrs.onetwork.o目标文件
连接
Network可执行文件
在makefile(Makefile)中,自顶向下说明各模块之间的依赖关系及实现方法:
network:
network.osubrs.o
(1)
cc–onetworknetwork.osubrs.o
(2)
network.o:
network.cnetdefs.h(3)
cc–cnetwork.c(4)
subrs.o:
subrs.cnetdefs.h(5)
cc–csubrs.c(6)
其中(3)—(6)可以简化为:
(隐含的规则)
network.osubrs.o:
netdefs.h
#make
#makenetwork
#make–fmakefile
2.2makefile要点
(1)宏(变量)
CC=gcc
$(CC)test.c
$@:
currenttarget
$<:
firstprerequisite
$^:
allprerequisites
(2)后缀规则(suffixrules)
.c.o:
$(CC)-c$(CFLAGS)-o$@$<
(3)模式规则(patternrules)
%.o:
%.c
$(CC)-c$(CFLAGS)-o$@$<
(4)通配符*
objects=*.o
objects:
=$(wildcard*.o)
objects:
=$(patsubst%.c,%.o,$(wildcard*.c))
foo:
$(objects)
cc-ofoo$(objects)
(5)phonytarget(哑/假目标):
不对应实际的文件,只是一个目标
.PHONY:
clean#如果这行不加,若当前目录下有一个clean文件,则makeclean没有动作
clean:
#这是phonytarget
rm*.otemp
(6)includefilename:
嵌套makefile,暂停当前makefile,转而读取指定的filename
-includefilename:
忽略找不到filename时的错误
(7)控制语句:
ifeq,ifneq
Samba服务器的资源可在Samba管理工具中进行管理。
另外,用户还可以在终端上使用下面的命令来检查服务器所共享的资源。
#smbclient–Llocalhost
smbclient命令是Samba提供的一个类似FTP客户程序的客Samba客户程序,用以访问Windows共享或Linux提供的Samba共享。
其命令格式为:
smbclient//hostname/sharename-Uusername
在命令的实际使用过程中,把hostname替换为想连接的Samba服务器的主机名或IP地址,把sharename替换为想浏览的共享目录的名称,把username替换成系统的Samba用户名。
输入正确的口令或按“Enter”键(若该用户不要求输入口令)。
需要特别说明的是,当访问Windows共享时,Username参数要使用Windows计算机中的用户账号,验证口令是Windows计算机中的用户账号的密码;当访问Linux系统提供的Samba共享时,Username参数要使用所访问Linux系统中的Samba服务器所提供的账号,口令也是Samba用户的账号口令。
3.DHCP服务的重新启动
当修改了/etc/dhcpd.conf这个DHCP服务器的配置文件后,如果想让配置后的功能起作用必须要重新启动dhcpd服务。
可使用下面的指令:
##servicedhcpdrestart
另外,还可以使用下面的命令来停止dhcpd服务:
##servicedhcpdstop
5.3.3在Windows和Linux操作系统中DHCP客户端的设置方法
当DHCP服务器配置成功之后,各工作站想使用DHCP服务器所提供的资源进行相应的设置。
1.DHCP的Windows客户端设置
用户口令文件——gshadow
gshadow文件用于定义用户组口令、组管理员等信息,该文件只有root用户可以读取。
Gshadow文件中每行定义一个用户组信息,行中各字段间用“:
”分隔,每行记录的格式为:
groupname:
Encryptedpassword:
Groupadministrators:
Groupmembers
各字段的的含义如表3-3所示。
在图3-4中给出了该文件的属性及文件的部分内容。
表3-3group文件字段说明
字 段说 明
Groupname用户组名称,该字段与group文件中的组名称对应。
Encryptedpassword用户组口令,该字段用于保存已加密的口令
Groupadministrators组的管理员账号,管理员有权对该组添加删除账号。
Groupmembers属于该组的用户成员列表,列表中多个用户间用“,”分隔。
1cron后台常驻程序(daemon)用于:
D管理系统日常任务的调度(scheduling)
2在大多数Linux发行版本中,以下哪个属于块设备(blockdevices)?
B硬盘
3下面哪个Linux命令可以一次显示一页内容?
Cmore
4怎样了解您在当前目录下还有多大空间?
CUsedu.
5怎样更改一个文件的权限设置?
Bchmod
6假如您需要找出/etc/my.conf文件属于哪个包(package),您可以执行:
Crpm-qf/etc/my.conf
7假如当前系统是在level3运行,怎样不重启系统就可转换到level5运行?
Btelinit5
8那个命令用于改变IDE硬盘的设置?
Chdparm
9下面哪个命令可以列出定义在以后特定时间运行一次的所有任务?
Aatq
10下面命令的作用是:
setPS1="[\u\w\t]\\$",exportPS1
B改变命令提示符
11作为一个管理员,你希望在每一个新用户的目录下放一个文件.bashrc,那么你应该在哪个目录下放这个文件,以便于新用户创建主目录时自动将这个文件复制到自己的目录下。
A/etc/skel/
12在bash中,export命令的作用是:
C为其它应用程序设置环境变量
13在使用了shadow口令的系统中,/etc/passwd和/etc/shadow两个文件的权限正确的是:
A-rw-r-----,-r--------
B-rw-r--r--,-r--r--r--
C-rw-r--r--,-r--------
D-rw-r--rw-,-r-----r--
14下面哪个参数可以删除一个用户并同时删除用户的主目录?
Cuserdel-r
15有一个备份程序mybackup,需要在周一至周五下午1点和晚上8点各运行一次,下面哪条crontab的项可以完成这项工作?
B013,20**1,2,3,4,5mybackup
16如何从当前系统中卸载一个已装载的文件系统
Aumount
17如果你的umask设置为022,缺省的,你创建的文件的权限为:
Drw-r--r--
18在一条命令中如何查找一个二进制命令Xconfigurator的路径?
DwhichXconfigurator
19哪一条命令用来装载所有在/etc/fstab中定义的文件系统?
Bmount-a
20运行一个脚本,用户不需要什么样的权限?
Bwrite
21在Linux中,如何标识接在IDE0上的slave硬盘的第2个扩展分区?
C/dev/hdb6
22在应用程序起动时,如何设置进程的优先级?
Bnice
23在bash中,在一条命令后加入"1>&2"意味着:
C标准输出重定向到标准错误输出
24下面哪条命令可以把f1.txt复制为f2.txt?
Ccatf1.txt>f2.txt
25显示一个文件最后几行的命令是:
Dlast
26如何快速切换到用户John的主目录下?
Dcd~John
27把一个流中所有字符转换成大写字符,可以使用下面哪个命令?
Atra-zA-Z
28使用什么命令可以查看Linux的启动信息?
Bdmesg
29运行级定义在:
Bin/etc/inittab
30如何装载(mount)上在/etc/fstab文件中定义的所有文件系统?
Amount-a
31如果使用ln命令将生成了一个指向文件old的符号链接new,如果你将文件old删除,是否还能够访问文件中的数据?
A不可能再访问
32在ext2fs文件系统中,缺省的为root用户保留多大的空间?
C10%
33下面哪个命令用来显示系统中各个分区中inode的使用情况?
Adf-i
34在大多数Linux发行版本中,图形方式的运行级定义为?
D5
35如何在系统文档中找到关于print这个单词的所有说明?
Daproposprint
36命令man5passwd含义是?
B显示passwd文件的结构
37NaN
Dgrep*file
38在ps命令什么参数是用来显示所有用户的进程的?
Aa
39显示二进制文件的命令是?
Aod
40如何显示Linux系统中注册的用户数(包含系统用户)?
Dwc--lines/etc/passwd
41在一行结束位置加上什么符号,表示未结束,下一行继续?
B\
42命令kill9的含义是:
DsendsSIGTERMtotheprocesswhosePIDIS9.
43如何删除一个非空子目录/tmp?
Drm-rf/tmp/*
44使用什么命令可以在今天午夜运行命令cmd1?
Decho"cmd1"|atmidnight
45你的系统使用增量备份策略,当需要恢复系统时,你需要按什么顺序恢复备份数据?
B最后一次全备份,然后从最近到最早的增量备份
46对所有用户的变量设置,应当放在哪个文件下?
B/etc/profile
47Linux系统中,一般把命令ls定义为ls--color的别名,以便以不同颜色来标识不同类型的文件。
但是,如何能够使用原先的ls命令?
Als
48在Linux系统中的脚本文件一般以什么开头?
B#!
/bin/sh