因为内核不提供和用户的交互功能,所以需要一个程序提供这种功能,这种程序分为两种:命令行(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命令就是调用shutdown -h

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

9、快捷键
#光标定位到命令行首

ctrl+a

#光标定位到命令行尾

ctrl+e

#将光标处前面的内容清除 

ctrl+u

#将光标处后面的内容清除 

ctrl+k

#跳到命令行中前一字的开头

ctrl+左箭头

#跳到命令行中下一字的末尾

ctrl+右箭头

#截断进程

ctrl+c

#清空屏幕

ctrl+l