免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13806 | 回复: 15
打印 上一主题 下一主题

shell基础第十三篇-登录环境 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-19 18:18 |只看该作者 |倒序浏览
承接wingger MM的,目前刚好在看那本书。抄的不好或者写得不好的地方请拍砖。

什么是登录环境?
登录系统时,在进入命令提示符前,系统要做两个工作。键入用户名和密码后,系统检
查是否为有效用户,为此需查询/ 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:0:0:root:/root:/bin/bash
bin:1:1:bin:/bin:/sbin/nologin
daemon:2:2:daemon:/sbin:/sbin/nologin
halt:7:0:halt:/sbin:/sbin/halt
mail:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:11:0perator:/root:/sbin/nologin

第一个域为帐号名称,对应UID,这个不用多解释,就是登录的那个名字。
第二个是密码,早期的UNIX系统的密码字段,如上所说,任何用户都可以用cat查看该文件的内容,所以后来的系统中把该字段放到了/etc/shadow中。
而对/etc/shadow的读取是需要root权限的。查看一下它的文件属性就知道了。
  1. $ ls -al /etc/shadow
  2. -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切换
  1. $ cat /etc/issue
  2. Fedora release 11 (Leonidas)
  3. 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显示的是我们登录成功后,系统显示的信息。这个比较简单。里面有什么,就显示什么。

论坛徽章:
0
2 [报告]
发表于 2010-11-19 18:30 |只看该作者
不错,希望把这个传承下去。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2010-11-19 19:09 |只看该作者
环境变量的系统设置:
下面列举相关文件
/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。
  1. $ stty -a
  2. speed 38400 baud; rows 24; columns 80; line = 0;
  3. intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
  4. swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
  5. lnext = ^V; flush = ^O; min = 1; time = 0;
  6. -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
  7. -ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
  8. -iuclc ixany imaxbel iutf8
  9. opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
  10. isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
  11. 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,可以用来设置整个命令的输入输出的环境。
  1. # echo $-
  2. # 显示set的所有设置
  3. # set -x
  4. # echo $HOME
  5. # 要输出的命令都会屏幕上显示,前面会多出一个+符号来
复制代码
关于set的更多设置,更多地是写入了/etc/inputrc文件当中
最后不建议修改tty的环境设置,因为bash的环境已经设置很好了,不需要附加一些修改,否则产生不必要的麻烦。这里只是给大家展示以下终端是如何进行设置的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2010-11-19 19:11 |只看该作者
本帖最后由 L_kernel 于 2010-11-19 19:33 编辑

登录环境介绍完毕。END
本篇小结:
可以定制用户本身的.bashrc以满足需求,本章讲述了如何覆盖系统设置以满足用户需求。
从显示友好信息到终端特性设置,定制用户环境可以有许多方式。

论坛徽章:
0
5 [报告]
发表于 2010-11-19 21:51 |只看该作者
楼主辛苦啦~~~

论坛徽章:
0
6 [报告]
发表于 2011-09-29 12:15 |只看该作者
不错。。感谢,帮你顶一下

论坛徽章:
0
7 [报告]
发表于 2011-09-29 14:17 |只看该作者
不错 谢谢

论坛徽章:
0
8 [报告]
发表于 2011-11-30 19:09 |只看该作者
不错不错学习了

论坛徽章:
0
9 [报告]
发表于 2012-01-06 17:43 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
巨蟹座
日期:2014-08-15 14:56:13
10 [报告]
发表于 2012-01-18 13:59 |只看该作者
支持,好东东,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP