登录环境_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3404 | 回复: 0   主题: 登录环境        下一篇 
匿名用户
发表于: IP:您无权察看 2011-8-2 11:16:26 | [全部帖] [楼主帖] 楼主

什么是登录环境?
登录系统时,在进入命令提示符前,系统要做两个工作。键入用户名和密码后,系统检
查是否为有效用户,为此需查询/ e t c / p a s s w d文件。如果登录名正确并且密码有效,开始下一
步过程,即登录环境。

其实平常我们使用telnet或者ssh或者直接在tty中登录Linux主机的时候,系统会出现一个login画面让你输入帐号,其接下来的过程可以分为以下三步:

1、先找出/etc/passwd里面是否有这个帐号?如果没有则退出,如果有,将该帐号对应的UID(User ID)与GID(Group ID)读出来,同时读取shell设置和家目录。

2、核对密码表,查看对应的/etc/shadow文件的设置是否和输入的密码一致。

3、在上一步成功执行的情况下,进入了shell控制阶段了。

在进行下一步处理之前,先看看文件/ e t c / p a s s w d。这是一个文本文件,可以任意修改其中
的文本域,但要小心。此文本有7个域,并用冒号作分隔符,以下是其部分文件内容列表。在
顶端加有列号,这样各域标识得更加清晰。普通用户用cat就可以查看/etc/passwd文件的内容了。

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin


第一个域为帐号名称,对应UID,这个不用多解释,就是登录的那个名字。
第二个是密码,早期的UNIX系统的密码字段,如上所说,任何用户都可以用cat查看该文件的内容,所以后来的系统中把该字段放到了/etc/shadow中。
而对/etc/shadow的读取是需要root权限的。查看一下它的文件属性就知道了

$ ls -al /etc/shadow
-r--------. 1 root root 1086 2010-09-07 14:38 /etc/shadow


第三个是UID。Linux中,有一个UID的分配规则。0表示的是系统管理员,只要是UID为0的用户,就是系统管理员,可以设置系统有多个管理员。1~499,保留给系统使用的UID。
500~65535,给一般的用户使用。
第四个是GID,和文件/etc/group相关。
第五个是用户信息说明栏。
第六个是家目录的位置。
第七个是该用户的登录shell。

登录消息显示数据:/etc/issue 和 /etc/motd
文件/etc/issue里面实现的内容就是我们从tty中登录(没有登录之前)的提示字符串。
提示:使用Ctrl+Alt+F1~F6进行不同的tty切换

$ cat /etc/issue
Fedora release 11 (Leonidas)
Kernel \r on an \m (\l)


上面的例子中使用了几个特殊的符号。\r相当于uname -r,然后\m相当于uname -m,\l指的是第几个终端接口。
如果我使用命令Ctrl+Alt+F2,然后屏幕上就会显示如下的信息,同时要你输入用户名和密码登录。

Fedora release 11 (Leonidas)
Kernel 2.6.29.4-167.fc11.i686.PAE on an i686 (tty2)
localhost login:


文件/etc/motd显示的是我们登录成功后,系统显示的信息。这个比较简单。里面有什么,就显示什么。

环境变量的系统设置:
下面列举相关文件

/etc/sysconfig/i18n
$ cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"


我的是英文环境,所以整体语系是en_US.UTF-8,可以在修改相关的环境变量进行设定。
有人会纳闷?为什么会是i18n呢?internationalization,不过这个单词太长啦。所以把中间18个单词用18来代替了。

/etc/profile


这个文件比较有统一性。几乎所有版本的*NIX都会有。同时对所有的用户都有效。里面设置了一些比较重要的环境变量。PATH,HOSTNAME,UID之类的。PAT H定位包含可执行文件,库文件及一般文本文件的目录位置,便于用户快速访问。有了前面的十二篇的基础,相信/etc/profile里面的简单脚本难不倒你。同时/etc/profile.d目录和文件/etc/inputrc也是由/etc/profile规划出来的。

/etc/bashrc


这个文件里面有一个比较重要的就是PS1环境变量。决定命令提示符的显示方式。

/etc/profile.d/*.sh


这是一个目录。针对bash以及C-shell规范了一些数据。可以自行设计一些具有*.sh的文件名来书写系统的设置值。

环境变量的个人设置:

~/.bash_profile ~/.bash_login ~/.profile


这三个文件只需要一个即可。一般默认是~/.bahs_profile。之所有有那么多的文件,是因为其他shell用户转过来的习惯。
bash启动时(其他的shell不清楚),依次读取的顺序是~/.bash_profile,~/.bash_login,~/.profile

~/.bashrc


这个是最个性化的设置文件。shell登录时候,最后读取的。每次执行shell脚本的时候都会读取这个文件,所以是最全面,最新的。而刚刚那个文件~/.bash_profile只是在登录的时候才读取一次的。在我的文件中重新设置了一个更加好看的命令提示符。PS1

export PS1='\[\e[01;32m\][\u@\[\e[01;33m\]\h \[\e[01;34m\]\W] `[[ -d .git ]] && echo -n -e "\[\e[01;33m\](branch:$(git branch | sed -e "/^ /d" -e "s/* \(.*\)/\1/"))\[\e[01;34m\]"`\$ \[\e[00m\]'


环境变量的系统设置:
下面列举相关文件

/etc/sysconfig/i18n

  1. $ cat /etc/sysconfig/i18n
  2. LANG="en_US.UTF-8"
  3. SYSFONT="latarcyrheb-sun16"


复制代码


我的是英文环境,所以整体语系是en_US.UTF-8,可以在修改相关的环境变量进行设定。
有人会纳闷?为什么会是i18n呢?internationalization,不过这个单词太长啦。所以把中间18个单词用18来代替了。

/etc/profile


这个文件比较有统一性。几乎所有版本的*NIX都会有。同时对所有的用户都有效。里面设置了一些比较重要的环境变量。PATH,HOSTNAME,UID之类的。PAT H定位包含可执行文件,库文件及一般文本文件的目录位置,便于用户快速访问。有了前面的十二篇的基础,相信/etc/profile里面的简单脚本难不倒你。同时/etc/profile.d目录和文件/etc/inputrc也是由/etc/profile规划出来的。

/etc/bashrc


这个文件里面有一个比较重要的就是PS1环境变量。决定命令提示符的显示方式。

/etc/profile.d/*.sh


这是一个目录。针对bash以及C-shell规范了一些数据。可以自行设计一些具有*.sh的文件名来书写系统的设置值。

环境变量的个人设置:

~/.bash_profile ~/.bash_login ~/.profile


这三个文件只需要一个即可。一般默认是~/.bahs_profile。之所有有那么多的文件,是因为其他shell用户转过来的习惯。
bash启动时(其他的shell不清楚),依次读取的顺序是~/.bash_profile,~/.bash_login,~/.profile

~/.bashrc


这个是最个性化的设置文件。shell登录时候,最后读取的。每次执行shell脚本的时候都会读取这个文件,所以是最全面,最新的。而刚刚那个文件~/.bash_profile只是在登录的时候才读取一次的。在我的文件中重新设置了一个更加好看的命令提示符。PS1

  1. export PS1='\[\e[01;32m\][\u@\[\e[01;33m\]\h \[\e[01;34m\]\W] `[[ -d .git ]] && echo -n -e "\[\e[01;33m\](branch:$(git branch | sed -e "/^ /d" -e "s/* \(.*\)/\1/"))\[\e[01;34m\]"`\$ \[\e[00m\]'


复制代码

~/.bash_history


每次登录bash后,bash会先读取这个文件,将所有的历史命令读入内存。和HISTSIZE环境变量的设置值有关系。

~/.bash_logout


注销bash后,系统会给你干的事情。

对于刚才的几个文件我们通常在改变之后用source命令或者.重新读取一遍。

再谈谈登录shell和非登录shell
登录shell指的是当用户登录linux系统时,所取得的那个shell,当登录以后,再去执行其他的shell,其他的shell就是非登录shell了。
最常见的一种情况就是在X Window下,启动终端,那些shell都是非登录shell
还有一种情况是以一个用户登录有,使用命令bash切换到一个新的环境,这个也是非登录shell了。
把握好登录这两个字就可以了。
还有它们读取文件的区别。
登录shell会读取~/.bash_profile和~/.bashrc两个文件
非登录shell仅仅是读取~/.bashrc文件

stty用法
s t t y用于设置终端特性。要查询现在的s t t y选项,使用stty -a。

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke


上面中^C表示Ctrl+C的意思。其他的依次类推。下面列举几个参数代表的含义。更多的请参考man stty
eof:End Of File 文件结束的意思
erase: 向后删除字符
kill: 删除在当前命令行上的所有文字
quit: 给当前正在执行的进程发送一个quit信号
stop: 停止当前屏幕的输出
这些设置值,和我们日常用的Ctrl+D,ctrl+U等操作相关。一般情况下没有必要改动。
假如想要用ctrl+H进行字符从删除,可以这么设置

# stty erase ^H


除了stty,bash还有自己的终端设置set,可以用来设置整个命令的输入输出的环境。

# echo $-
# 显示set的所有设置
# set -x
# echo $HOME
# 要输出的命令都会屏幕上显示,前面会多出一个+符号来


关于set的更多设置,更多地是写入了/etc/inputrc文件当中
最后不建议修改tty的环境设置,因为bash的环境已经设置很好了,不需要附加一些修改,否则产生不必要的麻烦。这里只是给大家展示以下终端是如何进行设置的。


--------------------版主评价------------------------
谁是天蝎  2011-8-4 9:12:40

很好

 



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论