Linux基础

来源:互联网 发布:bash shell windows 编辑:程序博客网 时间:2024/05/20 19:15
LINUX介绍
关于Linux,并没有一个明确的定义
Linux并不是实时操作系统而是分时操作系统,系统允许每个进程请求一段极短的处理器时间,这一段极短的时间称为时间片,时间片通常是10ms,
一旦时间片用完当前时间片就会挂起,然后由一个特殊的服务(称为调度器)决定接下来执行哪一个进程
另外Linux还是一个多用户多任务处理系统,而windows是单用户多任务处理系统

Linux=内核+实用工具
Linux是一个使用linux内核,并且提供许多linux实用工具以及一个shell(命令处理器),实际上大多数linux还提供至少一个GUI。

当计算机启动时要经历一系列复杂的动作,这些动作构成引导过程。该过程的最后一个动作是启动一个非常复杂的程序,这个程序称为内核kernel
实用工具最重要的是为用户提供使用计算机的界面程序。这些程序是shell和GUI,shell是基于文本的界面程序,GUI则提供图形界面。

内核分为两大类,规模较大的一类称为单内核monolithic kernel),规模较小的一类称为微内核microkernel)。
单内核由一个非常庞大的程序构成,该程序可以独自完成所有的事情。
微内核是一个非常小的程序,只能执行最基本的任务,为了执行其他功能,微内核要调用其他程序,这些程序称为服务器(server)。
内核的作用是控制计算机,充当操作系统的核心。实际上除非关闭计算机,否则内核一直在运行。
尽管内核的本质可能根据操作系统的不同而有所区别,但内核所提供的基本服务,在各个操作系统之间都基本相同,这些服务包括:内存管理、输入输出、文件管理、安全和访问控制、网络访问。

LINUX工作环境
GUI(graphics user interface)图形用户界面,CLI(command line interface)命令行界面
LinuxGUI抽象层次
应用程序/用户
桌面环境
窗口管理器
X window
内核中的设备驱动程序
硬件

大多数情况下,Linux默认引导至运行进别3或者运行级别5
运行级别            描述
0                        关机
1                        单用户模式,命令行
2                        非标准化
3                        多用户模式,命令行
4                        非标准化
5                        多用户模式,GUI
6                        重启

shell提示,当一切初始化命令执行结束后,你就准备好开始工作了。Linux将启动shell,并将控制交给你。然后shell显示一个提示,称为shell提示,并且等待你键入命令。
对于Bash和Korn Shell来说,提示符是一个美元符号:
$
对于C-Shell来说,提示符是一个百分号:
%
如果系统管理员定制了环境,那么提示可能有些不同。例如,它可能显示你登录的机器名称,如下所示
rpc$
这里提示向我们显示了登录机器是rpc。随着水平的提高,你可以用多种不同的方法定制shell提示。
但是,永远不能修改的就是提示最后一个字符($或者%)。值得注意的是不管是哪种shell,在root标识下shell提示符都会变成#

检查他人是否用过你的linux账户你可以使用last命令。只需要输入last命令并在之后跟着用户标识即可,如果以rqrm登录,则输入
last rqrm
你进会看到一些信息,告诉你上一次或最近几次的登录时间。
如果只输入了last而没有输入用户标识,即
last
那么你将看到系统上所有用户标识的信息,这些信息的生成可能持续一段时间,如果你想要提前结束这条命令,可以按<Ctrl-C>组合键

超级用户
为了保证系统安全,Linux被设计成每个用户标识有一组有限权限,作为一名普通用户只能删除自己的文件,但不能删除其他人的文件,同理也不能修改或运行影响系统整体性的程序。
Linux下有一个特殊用户标识root,它拥有这样的权限,当你以root登录时,你就是超级用户,你可以做任何想做的事情。
一旦知道了root口令,有两种方法可以成为超级用户。第一种,在登录时以root登录。另外一种,如果你已经作为一名普通用户登录系统,那么你可以使用命令
susubstitute userid替换用户标识)变成超级用户。
su命令允许你临时变成另一个用户标识,为此,只需在su命令后输入新的用户标识即可。
例子:
假设现在已经以rqrn登录系统,下面是一种可能的shell提示
[rqrm]$
现在用su将用户标识变到rl。然后系统提示你输入rl的口令。一旦你输入了rl的口令,当前shell就被挂起,系统将为rl启动一个新shell
[rqrm]$ su rl
Password:
[rl]$
当结束rl的工作时,你需要做的就是结束当前shell。输入exit命令既可以结束当前shell。一旦结束新shell,你就会自动回到原来的shell,即用户标识rqrm
[rl]$ exit
[rqrm]$
尽管你可以使用su命令变换到任何一个用户标识(如果拥有口令的话),但是su命令的主要用途还是变换到超级用户。
假设你以rqrm登录后,输入如下命令
su rl
将用户标识变成rl,但仍在rqmr的环境下工作。如果你希望同时变换用户标识和环境,则需要在su命令之后键入一个-连字符),注意字符的两边都有一个空格
su - rl
现在你在rl的环境中以rl的名义工作了。当你输入exit命令时,将返回到rqrm环境中以rqrm的名义工作。
下面示范如何用su命令转换成超级用户。当你这样做时你要在超级用户的环境中工作,而不是在自己的环境中工作,这一点很重要。
为了变成超级用户,要使用su命令,记得不要落下连字符。
su - root
现在系统向你询问一个口令,一旦你键入了口令当前的shell将被挂起,系统将启动一个新的shell,在新的shell中用户标识将是shell,而且你将拥有完全的超级用户权限
[rqrm]$ su - root
Password:
#
注意shell提示符已经变成#
当结束需要成为超级用户才能完成的工作时,键入exit命令,你将回到自己旧的shell中:
# exit
[rqrm]$
为方便起见,如果su命令没有指定用户标识,那么默认的用户标识是root,大多数时候你需要的就是这种方式,因此下面两个命令是等效的
su -
su - root

以超级用户执行一条单独的命令sudo
作为超级用户的时间太长会非常危险,你可能不小心键入了导致故障的内容
sudo命令允许你以另一个用户标识执行一条单独的命令(sudo的意思是替换当前用户标识,然后做一些事情substitute the userid and do something)
和su命令一样,sudo命令默认用户标识为root,因此,以超级用户执行一条具体的命令,只需要键入sudo,后面跟着这条命令即可:sudo command
例如,以root用户执行id命令,可以键入:
sudo id
(id命令显示你的当前用户标识)
下面举个例子,示范以root用户运行id命令时用户标识如何发生变化,注意用户标识名称(uid)的变化:
[rqrm]$ id
uid=500(rqrm) qid=500 (rqrm) groups=500(rqrm) 
[rqrm]$ sudo id
Password:
uid=0(root) qid=0(root) groups=0(root)

当使用sudo以root用户执行命令时,系统将要求你输入你的口令(不是超级用户的口令)
为了方便起见,一旦输入了正确的口令,就可以在一定时间内不必再次输入口令而运行sudo命令。大多数系统的默认时间是5分钟,不过这一时间也可能发生变化。

系统关闭与重启:initrebootshutdown
修改运行级别命令init
为了使用init命令你需要成为超级用户
可以通过修改到运行级别6重启系统:
sudo init 6
如果关闭系统,则可以修改运行级别为0:
sudo init 0
在日常操作中,通常使用reboot和shutdown
reboot命令非常简单,只需要输入这个命令,系统就会变换到运行级别6:
sudo reboot
shutdown命令稍微有点复杂,因为你必须指定何时关闭系统,选择有许多种,最简单的一种就是使用单词now:
sudo shutdown now

能够立即使用的程序
有一些程序使用起来不是特别的困难,这些程序是能够立即使用的程序,下面简单介绍一下这样一些程序(严格来讲一些命令是“嵌入”到shell中的,这就意味着他们实际上并不是独立的程序,但在这里,单独程序和内置程序之间的区别并不重要)
查看某一个程序是否可用的一种精确方法是使用which命令,在使用which命令时,只需要在键入which命令后跟一个或者多个程序名称即可,
例如:
which date
which date less vi emacs
下面是第一条命令的输出:
/bin/date
在这个例子中,which命令告诉你,如果输入date命令,那么shell将运行储存在/bin/date文件中的程序,这就告诉你在你的系统上date是一条有效的命令
如果你询问which一个在系统上不存在的程序会怎样呢?例如:
which rqrm
这条命令的结果有两种,这取决与which的版本,第一种是,不发生任何事情。也就是说,没有任何输出。这就意味着which找不到指定的程序。
第二种可能性是你将看到一个错误消息。下面是一种典型的错误消息:
/usr/bin/which: no rqrm in (/usr/local/bin:/usr/bin:/bin:/usr/x11R6/bin:/home/harley/bin)
which告诉你,它在你的搜索路径里找不到一个名为rqrm的程序
如果你是用的是Korn shell,那么你可以使用whence命令:
whenece date
如果你是用的是Bash shell,那么你可以使用type命令:
type date
type和whence命令要比which命令显示更多的细节信息。这在特定的环境中会很有用,但实际应用上,还是使用which命令的应用最广泛。

显示时间和日期:date
date命令可用来显示时间和日期,这非常有用,简单的输入
date
Linux将显示当前的日期和时间。下面是一个样本输出,注意Linux使用的是24小时制时钟:
Sun Dec 21 10:32:43 PST 2012
注意,date同时显示日期和时间。Linux还有一个time命令,但这个命令并不显示时间。它测量程序运行的时间。
从本质上讲Linux并没有运行在本地时间上所有的Linux系统都使用协调世界时(Coordinated Universal Time,UTC),它是格林威治标准时间。
Linux在需要时默默地在UTC和本地时区之间转换,有时候查看UTC时间比较便利,只需使用:
date -u
你将会看到类似下述形式的时间和日期:
Sun Dec 12 10:32:43 PST 2012
顺便说一下,该时间是上一个例子的UTC时间

显示日历:cal
显示当前月份的日历,可以输入:
cal
显示某一年的日历,需要指定年度。例如:
cal 2013
年度位于1~9999之间
当显示一年的完整日历时,输出会很长,屏幕无法完全显示,如果担心在阅读之前滚出视野,那么可以每次显示一屏的显示输出,即将命令的输出发送给less程序,例如:
cal 2012 | less

查看系统信息:uptimehostnameuname
uptime用来显示系统已经运行多长时间
hostname用来查看计算机名称
uname用来显示操作系统名称,如果要得到操作系统更多信息,可以使用-a选项(all information,全部信息
显示自己的信息:whoamiquota
如果系统上没有whoami命令,可以尝试输入下面3个单独的单词who am i
在共享系统上,系统管理员有时候会强加限制,例如,限制每个用户允许使用多少磁盘空间,为了查看自己的限制,可以输入quota
显示其他用户信息:userswhow

终端临时上锁:lock
如果你需要离开一小会,注销以后再登录也很麻烦,这种情况下,你可以使用lock命令。该命令告诉Linux你希望临时锁住终端。除非你输入特殊口令,否则终端将一直保持锁住状态。
lock
Linux将显示
key:
输入用于终端解锁的口令,在输入口令时,Linux不回显口令,在输入口令之后,Linux将显示:
Again:这要求再次键入口令,以确保口令输入过程中没有出错
因为Linux是共享系统,所以lock命令有一个内置的限制:在一个特定的时间后终端会自动解锁。默认情况下lock将冻结终端15分钟。但是如果想替换这个默认值,那么一些版本的lock允许在输入命令时指定另外一个时间限制。在该命令之后,留一个空格,然后键入-(连字符),后面再跟一个数字。例如将终端锁住5分钟的命令为:
lock -5
你可能会问如果有人将终端锁住不回来怎么办。最终在时间到了,没命了会自动解锁,如果在时间耗尽之前,需要激活终端,那么系统管理员可以输入root口令。
lock总是接受root口令,后者在某种程度上就像是万能钥匙。
请注意,如果你锁上终端,但离开后不再回来,那么最终会有人过来,发现终端已经被重新激活,从而以你的用户标识登录,那么无论他们做了什么导致什么问题,责任都在你身上。

请求Linux提醒何时离开:leave
挡在计算机上全神贯注时容易忘记时间。为了帮助你几时完成其他事情,只需要驶入下述命令
leave
当输入该命令时,leave将会询问你一个时间:
When do you have to leave?
以hhmm(先是小时,后是分钟)的格式输入你希望离开的时间。例如你想要在12:30离开,可以输入:
leave 1230
如果需要在一个特定时间间隔之后离开,则可以输入一个+(加号),后面跟着分钟数,例如要在14分钟后离开,你可以输入:
leave +14
确保不要再+字符之后留空格
注意,在系统注销时,Linux会废除悬挂的leave命令,如果你使用了leave命令,但随后注销了系统并再次登录,那么你需要重新运行leave程序

文档资料:Unix手册与Info
man命令用来访问Linux手册
例如显示cp命令(复制)的手册,可以输入:
man cp
如果希望了解man程序的手册,则输入:
man man
如果希望学习多条命令可以如下输入:
man cp mv rm

联机手册几乎每个条目都无法一屏显示,这时可以将输出发送到一个程序中再一次一屏的输出
Linux中常用的分页程序less,more,pg
如果想查找一个特定的模式,例如想要查看包含output的信息,则输入一个/(斜杠)再键入模式output
/output
则告诉程序直接跳到下一个包含output的行上,此后只需键入/则又可以看到下一个包含output的行

当阅读说明书时可以键入一个(感叹号)之后键入一个命令,man会把这个命令发给shell,shell运行这个命令后,在键入<Return>键则又回到man中继续阅读联机手册
当学习kill命令时可以输入
man kill
但是手册的第2节也有一个kill条目,如果想看第2节的kill输入:
man 2 kill
如果在小节中还要小节,如3f节,则输入:
man 3f kill
默认情况下man kill和man 1 kill效果相同

为了快速熟悉手册,在每小节都有一个intro页面,充当一个简介,例如查看第一小节的intro可以输入man intro查看这与man 1 intro效果相同

Info中含有大量的帮助信息,每个info文件都是一个树

命令语法
当在同一行上输入多个命令时可以使用(分号),如想查看时间和日期则需要输入date和cal两个命令,这时则可用分号在同一行上键入:
date;cal
命令语法:命令名称    选项    参数    
如ls显示文件信息
ls    -l    -f    file1    file2    file3
例子中ls为命令,选项是-l和-f,参数是file1    file2    file3
选项用来修改命令执行任务的方式,选项通常由一个连字符 - 后跟一个字母,或两个连字符 -- 后跟一个单词
ls -l -Fls-lF等价,选项可以指定任意数据
选项和 -- 选项
因为多个选项可以被组合在一起所以-help会被解释成-h -e -l -p,所以用--help表示
空白符因为确保灭个选项及参数分开,所以每部分之间要用<Tab>或<Space>但对于一些shell来说只能用<Space>表示空白符,因为<Tab>有一个特殊功能,
称为命令自动补全。空白符指一个或多个连续的<Tab>或<Space>
值得注意过的是当一个名称中间有空格时,需要用连字符 - 或下划线 _ 代替,例如file 2在shell中需要写成file-2或file_2

Shell
关于Shell的一个技术性的定义是:充当用户界面和脚本解释器,允许用户输入命令以及间接地访问内核服务
一个非技术性的定义是,Shell是一个命令处理器:一个读取并解释所输入命令的程序,Shell还支持一些类型的编程语言。使用该语言可以编写有Shell解释的程序,这些程序称为Shell脚本

标准I/O和管道线
标准I/O包含标准输入,标准输出和错误输出,其中错误输出用于错误消息
默认下shell将标准输入设备设为键盘,将标准输出和错误输出设为屏幕。实际上每次输入命令时,都可以告诉shell在命令执行期间重置标准输入,标准输出和标准错误
例如希望运行sort命令(用于排序),并将输出保存在一个叫names的文件中,在执行时希望标准输出到这个文件中,命令结束后,希望输出重置屏幕
sort>names
在命令后键入>(大于号)后面跟文件名
这个文件可以是存在的,也可以是不存在的,如果不存在shell会自动创建一个names文件,如果names存在则原内容会被替换
如果不想丢失原有的文件,可以用>>,这样数据会保存在原文件数据的后面,如果文件不存在同样会创建一个
sort>>names
如果存在names但不想替换,只想追加但又不小心写成了sort>names这样就会造成损失,为防止重定向造成的损失可以设置noclobber功能让shell来预防
对于Bash,kornshell来说
设置shell选项noclobber:set -o noclobber
复位选项:set+o noclobber
一旦设置noclobber就会内置防护
sort>names
如果已存在一个names则会看到一个错误消息,但确实希望替换这个文件呢?这时可以临时忽略noclobber
对于Bash,kornshell来说可以用>|来取代>
sort >|names
如果已存在names想追加,在设置noclobber时可以用
sort>>!names来忽略noclobber检查
管道线
shell允许创建一序列命令,在这一序列命令中,一个程序的标准输出可以自动发送给下一个程序的输入,这样做时,两个程序之间的连接就是管道
而命令序列本身就称为管道线
创建管道线时,只需希望键入的命令用竖线    |    分隔开即可
例如想要在三个人员信息文件中查找所有叫Harley的人,每行对应显示一个人的信息,在不使用管道线时
cat feil1 feil2 feil3>tempfile1
grep Harley<tempfile1>tempile2
rm tempfile1 tempfile2
用管道线时
cat file1 file2 file3 | grep Harley | wc -l
其中cat(连接命令)grep(抽取所有包含Harley的行)wc(单词统计)-l(统计行)
回顾一前每次一屏的显示日历可以使用
cal 2002 | less

0 0
原创粉丝点击