因为内核不提供和用户的交互功能,所以需要一个程序提供这种功能,这种程序分为两种:命令行(CLI)和图形界面(GUI)
linux下流行的图形桌面:
-
GNOME:C语言开发,使用gtk库
-
KDE:C++语言开发,使用qt库
-
XFCE:嵌入式,轻量级桌面
linux下常用的命令行程序:
-
sh:最早unix上使用的shell
-
csh:接近C语言使用风格的shell
-
ksh:比csh更好用,但要花钱
-
bash:基于csh,ksh的优点,开源,基于GPL
1、shell
在类UNIX中,提供CLI的交互程序,我们统称为shell。
对于红帽这一分支来说,默认采用的是bash这个shell
#查看当前系统的shell
cat /etc/shells
#命令查看系统所有shell
chsh -l
#查看当前使用的shell
echo $SHELL
#ps命令用于查看当前进程,可以发现,有一个bash进程
ps
1.1、 打开一个shell
打开一个终端就打开一个shell
得到一个命令行界面,就触发一个shell
1.2、 命令行提示符
当触发一个shell,就可以得到一个提示符。
登陆用户名@主机名 当前目录
-
#表示是root用户
-
$表示是普通用户
-
方括号里的提示符是由PS1变量展示
#查看命令提示符的格式
echo $PS1
#查看当前shell的ID
echo $$
2、终端
用户和主机进行交互的设备,我们称为终端
2.1、 物理终端
一个键盘、一个鼠标、一个显示器就是一个物理终端
设备文件:/dev/console
2.2、 虚拟终端
tty:附加在物理终端之上,以软件方式虚拟出来的终端
设备文件:/dev/tty*
2.3、 模拟终端
pts:纯软件实现的终端,比如:在图形界面下打开的terminal,使用SSH、telnet等远程打开的界面。
设备文件:/dev/pts/*
注意:
-
系统启动过程中,以物理终端提供
-
系统启动之后,就以虚拟终端提供
2.4、 虚拟终端切换
如果有图形环境,共有6个控制台,图形界面运行在第一个;文本界面运行在第二至第六个。
如果没有图形环境,则只有5个虚拟控制台,全是文本界面。
rhel5之前的版本,有7个虚拟控制台,前6个为文本界面,第7个为图形界面。
#切换终端
ctrl+alt+f键
#查看当前终端设备
tty
#查看有哪些用户登陆到当前系统
who
#在tty2上显示hello
echo hello > /dev/tty2
#在pts5上显示hello
echo hello > /dev/pts/5
3、命令行
命令 【选项】 【参数】
3.1、 命令
-
所谓命令就是一个可执行文件,文件本身包含了可执行的程序代码
-
输入命令,并回车,就是将这个程序提交给内核,由内核分配资源将其运行起来。运行中的程序,我们称为进程。
-
最左边,必须是一个命令
3.2、 选项
选项用于启用或关闭命令的某个或某些功能
-
短选项:-表示,可合并使用
-
长选项:--表示,一般不可合并使用
3.3、 参数
参数是命令作用的对象,向命令提供数据。
注意
-
命令,选项,参数中间使用空格隔开
-
多选项之间、多参数之间,使用空格隔开
-
一行执行多个命令,使用分号(;)隔开
3.4、 在shell中有两类命令
内建命令:shell自带,找不到,比如:cd命令,使用which cd是找不到的
外部命令:非shell自带,外部的一个可执行文件
#查看一个命令的类型,是内建还是外部
type cd
#查找ls命令可执行文件在哪儿
which ls
#查找关键字文件在哪儿
whereis ls
3.5、 PATH变量
执行命令时,就会在这个PATH变量指定的路径,从左到右去寻找,一直到找到为止,如果没找到,会提示找不到这个命令
shell搜寻到的外部命令的路径,会被缓存下来,下次就不用再去搜了。#查看PATH变量的值
echo $PATH
#查看缓存的命令
#hits,表示命中次数,也就是被执行了多少次。
hash
#清除所有缓存
#比如:将ls程序文件移到/usr/bin目录下,如果有缓存存在,还会到/bin/下去找ls这个命令,找不到就会报错,这时,就需要清一下缓存,重新去搜寻。
hash -r
4、Linux内核
查看linux内核版本的命令:
uname -a
uname -r
4.1、 版本号
注意:
-
在2.6版本之前,linux版本号主要看主版本号和次版本号,次版本号为偶数,表示稳定版,奇数,表示测试版
-
在3.0版本之后,上述规则无效。
4.2、 3.0之后的版本号
https://www.kernel.org/releases.html
-
mainline,主线版,也就是最新版,但不一定稳定。
-
stable,稳定版,开发完成的版本
-
EOL,end of live,结束开发版,不再进行维护
-
longterm,长期维护版,还处于维护中,如果有BUG,还会修复
4.3、 内核模块
linux基于模块化,比如:驱动当作一个模块的方式加载
#查看usb驱动有没加载
#可以发现,默认没有加载usb驱动,当插入一个U盘,就自动加载了
lsmod |grep usb_storage
5、命令演示
#关闭计算机,它的使用权限是超级用户。
#-h,关机后关闭电源。
#-c,取消目前正在执行的关机程序
shutdown
#马上关机
shutdown -h 0
#3:40开始关机
shutdown -h 3:40
注意:
使用直接断掉电源的方式来关闭Linux系统,这是十分危险的。因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有登录的用户系统将要关闭,并且login指令会被冻结,即新的用户不能再登录。
halt
#重新启动计算机,它的使用权限是系统管理者
reboot
#退出系统,它的使用权限是所有用户
exit
#显示近期用户或终端的登录情况,它的使用权限是所有用户。
#第一列:用户名
#第二列:终端位置
#第三列:登录ip或者内核
#第四列:开始时间
#第五列:结束时间(still login in还未退出 down 直到正常关机 crash 直到强制关机)
#第六列:持续时间
last
#查看当前用户
id
#查看当前主机名
hostname
#查看当前路径
pwd
#查看日期时间
date
#查看2015年的日历
cal 2016
#计算器
bc
#清屏
clear
6、 Alias
#查看当前全部别名
alias
#给cp命令设置一个别名,当我们执行cp命令时,实际执行的cp -i命令
#cp,默认覆盖不提醒,加上-i选项,表示提醒
alias cp='cp -i'
#在命令前面加上“\”,表示不使用别名,就使用最原始的cp命令
\cp
#删除别名
unalias cp
7、TAB补全
-
输入命令、选项、参数时,可以通过tab键补全功能来减轻输入压力。键入的内容如果足够使其唯一,按一次tab键即可补全,如果键入的内容不够使其唯一,按两次tab键,即可以显示以键入的字符为开头的所有命令。
-
在RHEL7/CentOS7以前的版本中,bash自动补全功能仅限于命令和文件名
-
在新出的RHEL7/CentOS7中的Bash已经可以自动补全命令参数了,需要注意的是RHEL7/CentOS7如果是最小安装,它是没有这个功能的。要启用这个功能,需要安装一个bash-completion包,然后退出bash,重新登录即可(未重启bash的情况下继续使用可能出现补全功能异常,出现一堆代码)。
-
bash-2.05及以后的版本提供了自动补齐的编程接口,通过安装 bash-completion 来使用TAB键自动补齐几乎任何内容,包括参数、文件、目录甚至包名称等等。
#查询有没有安装bash-completion这个软件包
rpm -qa |grep bash-completion
8、命令历史记录
在每个用户的家目录,都有自己的历史记录文件:.bash_history
登陆shell时,会从登陆用户的家目录中,读取.bash_history文件。
登陆后,执行的命令历史记录,会先记录到缓存中
登出时,会将缓存中的历史记录,以追加方式写到.bash_history文件中。
#查看历史命令记录
history
#立即将缓存中的记录,写回文件
history -a
#清除历史
history -c
#history命令输出的条数
echo $HISTSIZE
#历史文件路径
echo $HISTFILE
#命令历史文件记录历史的条数
echo $HISTFILESIZE
#历史记录的控制
#ignoredups,忽略连续且相同的重复的命令
#ignorespace,忽略所有以空白开头的命令
#ignoreboth,上面两项全部
echo $HISTCONTROL
#调用历史记录中对应编号的命令
!数字
#调用历史记录中最近的一个以指定字符串开头的命令
!字符串
#调用上一条命令
!!
#表示上一个命令的最后一段字符
!$
#以上下查阅历史记录
上、下箭头
#在当前命令行中左右移动光标
左、右箭头
#将上一命令的最后一个参数复制到当前命令行光标处,重复使用,将继续到更早的命令
esc+.
#将上一个命令的最后一段字符复制到当前,重复使用
alt+.
#在历史记录列表中搜索某一模式的命令
ctrl+r
ctrl+a
#光标定位到命令行尾
ctrl+e
#将光标处前面的内容清除
ctrl+u
#将光标处后面的内容清除
ctrl+k
#跳到命令行中前一字的开头
ctrl+左箭头
#跳到命令行中下一字的末尾
ctrl+右箭头
#截断进程
ctrl+c
#清空屏幕
ctrl+l