您的位置:首页 > 运维架构 > Linux

Linux基础入门——用户、终端、内部命令、外部命令、关机、重启

2017-11-14 20:59 423 查看
1、用户登录
在Linux操作系统中有两类用户,系统用户和普通用户,其中系统用户包含管理员(root)。
(1)root 用户
一个特殊的管理帐户,也被称为超级用户;root已接近完整的系统控制,对系统损害几乎有无限的能力;
除非必要,不要登录为 root。

(2)普通(非特权 )用户
权限有限;造成损害的能力比较有限。
2、Linux系统终端
2.1、6种终端
(1)设备终端:键盘鼠标显示器
(2)物理终端(/dev/console ):控制台console;
(3)虚拟终端:
(tty:teletypewriters, /dev/tty# #为[1-6])
tty 可有n个, Ctrl+Alt+F[1-6];
(4)图形终端(/dev/tty7 )
startx, xwindows
CentOS 6: Ctrl + Alt + F7
CentOS 7: 在哪个终端启动,即位于哪个虚拟终端;
(5)串行终端(/dev/ttyS# )
即/dev/ttyS#;
(6)伪终端(pty: pseudo-tty , /dev/pts/# )
即/dev/pty/#, 或者使用SSH远程连接

注意:

(1)centos6:Ctrl+Alt+F1-6是虚拟终端;7用于使用startx打开的虚拟终端;
使用init 5启动的图形,使用Ctrl+Alt+F1可以回到;
使用startx启动虚拟终端前,需要使用init 3将图形关掉,此时使用Ctrl+Alt+F7,可以回到图形终端;
(2)centos7:Ctrl+Alt+F1-6是虚拟终端;7用于使用startx打开的虚拟终端;
使用init 5启动的图形,无论是使用哪个虚拟终端打开的,只要使用Ctrl+Alt+F1可以回到;这个不是图形终端,只是将字符界面切换到图形界面了而已;
使用startx启动虚拟终端前,需要使用init 3将图形关掉,此前使用哪个虚拟终端启动的图形终端那么就使用Ctrl+Alt+F7,可以回到图形终端;

2.2、如何查看当前登录的终端设备; 查看当前的终端设备: #tty

2.3、交互式接口 交互式接口:启动终端后,在终端设备附加一个交互式应用程序;交互式接口有两类:CLI和GUI。

2.3.1、GUI: Graphic User Interface 图形接口:X protocol, window manager, desktop;其中Linux中的Desktop应用:
◇GNOME (C, 图形库gtk),
◇KDE (C++,图形库qt)
◇XFCE (轻量级桌面)


2.3.2、CLI: Command Line Interface shell程序: sh (bourn 史蒂夫·伯恩) csh tcsh ksh (korn) bash (bourn again shell)GPL zsh。

3、命令执行过程

输入命令后回车:提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来。
区别指定的命令是内部或外部命令:type COMMAND
3.1、内部命令
【1】查看内部命令列表:enable,help; 一些内部命令:logout,exit,都是退出当前用户;logout就是注销,等同于快捷键“Ctrl+d”。“:”也是一个内部命令,他的意思就是什么都不做,但是在编写脚本的时候是十分有用的。常见的内部命令有很多,如:
alias,cd,echo,enable,exec,exit,export,hash,help,history,
let,logout,pwd,read,return,set,source,umask,unalias,unset,等。
【2】内部命令是当前用户登录的shell是息息相关的,使用不同的shell效果是不同的。如在bash下使用“> file_name”可以创建新文件,或者是清空旧文件;但是在csh下这个命令是不存在的,此外如history命令也是一样的。 内部命令是集成在bash中的,当开机之后就会被加载进内存,因此他的执行速度是比较快的,他不像外部命令,是磁盘上的文件,需要从磁盘中再加载到内存中;所以系统将一些常用的命令就放在shell中。不同的shell集成的内部命令是不同的,使用“echo $SHELL”,可以查看当前用户登录使用的shell,使用“cat /etc/shells”可以查看用户可以使用的所有shell。

【4】启用某内部命令;可以同时启用多个,空格隔开;
enable CMD
【5】 禁用某个或者某些内部命令;
enable -n CMD
所以“enable ”可以查看所以已经启动的内部命令,使用“enable -n”可以查看所有已经禁用的命令;

3.2、外部命令 【1】外部命令是表现为磁盘上的一个具体的文件;大部分的外部命令都在:bin,sbin,/usr/bin, /usr/sbin; /usr/local/bin, /usr/local/sbin,是用户安装程序后的命令位置,新安装的系统中,该目录下默认没有可执行程序。 我们知道内部命令是集中在bash中的,如果我们在命令提示符下输入“free”这个外部命令的话,那么bash会进行判断,如果内存中没有free的话,那么他会到磁盘上去找free命令;但是磁盘上的文件是十分多的,他不会从磁盘上一个一个的查找的,如真是这样的话那么效率就太低了;所以bash查找外部命令的路径是按照PATH环境变量查找的,且是按照顺序查找的;(需要注意的话,以$开头的都是变量;)。$PATH指的是一个一个的目录,当用户去执行一个命令的时候,bash会先看是不是内部命令,如果是在bash中继承的内部命令的话,那么就执行了,如果不是那么bash会按照PATH环境变量中的目录逐个的、从前到后的去搜索要执行的命令;如果找到了就执行,找不到就不执行,且会报错,提示命令没有找到;如果命令确实存在,但是不在PATH变量中,那么会报错,但是可以指定完整路径也是会执行的; 一旦一个外部执行过一次之后,那么他会在;因此bash在磁盘上找文件的话,速度终究是是比较慢的,虽然有PATH环境变量,所以我们找的目录少多了,但是再快也没有到内存中找的速度快。因此为了加快命令的查找速度,在Linux中有一个规则,即如果我们执行过了一个外部命令的话,那么他会将外部路径的命令记录在内存中。等我们下次再执行free命令的时候,他就不会再到PATH环境变量中一个一个的搜了,即他直接从内存中调用这个free命令进行执行。 那么当一个命令之前执行过一次之后,如果PATH环境变量中的命令位置移动了,那么再次执行的时候就会出错的;那么我们只需要将内存中记录的缓存信息删除就可以了;这时可以使用到hash命令。
[root@Centos6x ~]#echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@Centos6x ~]#free
total       used       free     shared    buffers     cached
Mem:       1004112     276040     728072         24      21744      56056
-/+ buffers/cache:     198240     805872
Swap:      2097148     138476    1958672
[root@Centos6x ~]#xxx
-bash: xxx: command not found
[root@Centos6x ~]#type xxx
-bash: type: xxx: not found

4、Hash缓存表

4.1、hash表介绍 系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时, shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找。利用hash缓存表可大大提高命令的调用速率。hash常见用法:hash 显示hash缓存
hash –l 显示hash缓存,可作为输入使用
hash –p pathname 将命令全路径path起别名为name
hash –t name 打印缓存中name的路径
hash –d name 清除name缓存
hash –r 清除缓存
hits是指命中次数,即执行了几次;为缓存中的命令起个别名也是可以的,但是仅仅是当前shell进程有效,等exit退出账户再登录的时候,那么就失效了;因为我们知道hash就是缓存在内存中的,一旦账户注销,那么就失效了;Windows的账户注销和Linux的账户注销是不同的;】

4.2、功能演示

[root@Centos6x ~]#hash
hitscommand
3/bin/cat
1/usr/bin/hexdump
5/usr/bin/tr
1/usr/bin/free
[root@Centos6x ~]#hash -l
builtin hash -p /bin/cat cat
builtin hash -p /usr/bin/hexdump hexdump
builtin hash -p /usr/bin/tr tr
builtin hash -p /usr/bin/free free


[root@Centos6x ~]#hash -l
builtin hash -p /bin/cat cat
builtin hash -p /usr/bin/hexdump hexdump
builtin hash -p /usr/bin/tr tr
builtin hash -p /usr/bin/free free
[root@Centos6x ~]#hash -t cat
/bin/cat
[root@Centos6x ~]#hash -l
builtin hash -p /bin/cat cat
builtin hash -p /usr/bin/hexdump hexdump
builtin hash -p /usr/bin/tr tr
builtin hash -p /usr/bin/free free
[root@Centos6x ~]#hash -p /bin/cat cat1
[root@Centos6x ~]#hash -l
builtin hash -p /bin/cat cat
builtin hash -p /bin/cat cat1
builtin hash -p /usr/bin/hexdump hexdump
builtin hash -p /usr/bin/tr tr
builtin hash -p /usr/bin/free free


[root@Centos6x ~]#hash -d cat
[root@Centos6x ~]#hash -l
builtin hash -p /bin/cat cat1
builtin hash -p /usr/bin/hexdump hexdump
builtin hash -p /usr/bin/tr tr
builtin hash -p /usr/bin/free free


5、命令格式【1】COMMAND [OPTIONS...] [ARGUMENTS...]选项:用于启用或关闭命令的某个或某些功能
短选项: -c 例如: -l, -h长选项: --word 例如: --all, --human-readable参数:命令的作用对象,比如文件名,用户名等
【2】 注意:多个选项以及多参数和命令之间使用空白字符分隔
取消和结束命令执行: Ctrl+c, Ctrl+d
多个命令可以用;符号分开
一个命令可以用\分成多行

6、关机和重启操作【1】 关机: halt, poweroff在6上这两个命令的效果是一样的,关机断电,但是在7上是不一样的; 【2】重启: reboot
-f: 强制,不调用shutdown;
-p: 切断电源


【3】 关机或重启: shutdown语法:shutdown [OPTION]... TIME [MESSAGE]
-r: reboot
-h: halt
-c: cancel
TIME:无指定,默认相当于 +1
now: 立刻,相当于+0
+m: 相对时间表示法,几分钟之后;例如 +3
hh:mm: 绝对时间表示,指明具体时间
7、用户登录信息查看:用户登录信息查看命令:【1】 whoami: 显示当前登录有效用户;【2】 who am i:显示当前登录有效用户;【3】 who:系统当前所有的登录会话;【4】 w: 系统当前所有的登录会话及所做的操作;w命令不仅可以查看当前系统上有哪些用户连接上了,还可以查看用户正在执行什么操作;【5】 tasklist:同样的,在Windows上也有类似的命令,即tasklist;/S跟上对方用户的ip地址,/U指定用户名,/P指定密码,然后就可以连接到对方的主机上了;可以查看对方主机在跑什么指令,还可以将其杀掉。

8、nano命令的快速使用

【1】 指定文件名可以创建文件;
【2】 指定已存在的文件名可以编辑文件;
【3】 使用CTRL+o存盘,CTRL+x退出。也可以使用CTRL+x,y,y退出;
【4】CTRL+R可以读取其他文件的内容到这个文件;


9、编码表、ASCII码表:

由于计算机是只能识别二级制,所以我们输入一个“a”字符,那么计算机会将其转换成二进制,如10111001;那么转换的过程就必须要有一个对应的表格,即二进制和字符的对应关系表,这就是ASCII码表,即a对应于哪个二进制,b字母对应于哪个二进制;……,这个表格就称为编码表,即将我们生活中经常使用到的东西转换成二进制。美国的字母、字符等比较少,使用7bit就可以完整表示,总共可以表示2^7=128个;但是我们的汉字使用7bit是表示不完整的。所以使用ASCII是不能完整表示汉字的,但是我们中国的汉字也是有自己的编码表的,如GB2312,只能表示汉字,但是要表示全世界其他国家的语言的话就不行了,这时使用到的编码表是UTF-8。如果我们写文件是一种编码,读文件又是一种编码,那么就会导致乱码的,所以读写要统一编码才可以。 如我们在Windows上存储一个汉字,占据2字节,储存一个字母,大小是一个字节。如果我们将一个写了“我你他”三个汉字,其实ANSI编码格式的文本传输到Linux上,就是显示以下的乱码,可见无法正常显示;他的大小是6字节。这里之所以无法正常显示,是因为这个编码在Linux上不支持。

为什么在Windows上使用ANSI存储汉字可以显示,但是到Linux上就不能显示了? 猜测:案例说支持汉字的编码表只有GB2312,UTF-8等,所以使用别的编码形式存储汉字就会导致在更换一个打开环境的的时候,出现乱码。因为尽管在存储的本地存储汉字的时候使用的不是汉字编码存储,但是存储的时候系统已经知道了,但是更换新的环境后,这个新的环境仍然是按照这种编码打开的,所以会导致乱码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux 基础 shell
相关文章推荐