文章目录
用户类型
root用户
:超级管理员,root
已接近完整的系统控制,对系统损害几乎有无限的能力,非必要,不要登录为root
普通用户
:权限有限;造成损害的能力比较有限
终端terminal
终端类型
控制台终端:/dev/console
串行终端:/dev/ttyS#
虚拟终端:tty(teletypewriter) /dev/tty#
,tty可有n个,使用Ctrl+Alt+F#
进行之间的切换
图形终端:startx、xwindows
CentOS6:Ctrl+Alt+F7
|CentOS7:在哪个终端启动,即位于哪个虚拟终端
伪终端:pty
(pseudo-tty)/dev/pts/#
eg:SSH远程链接
查看当前的终端设备
# 查看当前的所在的终端
[hooper@magedu-demo ~]$ tty
/dev/pts/0
[hooper@magedu-demo ~]$ w
10:12:18 up 23:40, 2 users, load average: 0.08, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 10:11 10.00s 0.02s 0.01s -bash
hooper pts/0 192.168.168.252 10:11 2.00s 0.01s 0.00s w
# 从上面的命令可以看出hooper是使用伪终端登录系统的,而root使用的是虚拟终端登录的系统的
交互式接口
交互式接口:启动终端后,在终端设备附加一个交互式的应用程序
交互式接口类型
GUI
:Graphic User Interface
X protocol,window manager,desktop(GNOME、KDE、XFCE)CLI
:Command Line Interface
shell程序
什么是shell
shell
是Linux
系统的用户界面,提供了用户与内核进行交互操作的一种接口;它接收用户输入的命令并把它送入内核去执行
shell
也被称为Linux
的命令解释器(command interpreter),shell
本身是一个程序;将用户输入的命令行拆解为"命令"与"参数",接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传给该程序并执行
shell
是一种高级程序设计语言,提供了变量、函数、条件判断,循环等开发语言功能
由于shell
本身是个程序,所以它可以被任何用户自己开发的各种shell
所代替
各种shell
sh
:Steve Bournebash
:Bourne-Again Shell,GPL,CentOS和Ubuntu 默认的shell
csh
:C shell,C语言风格tcsh
ksh
:Korn Shell,AIX默认shell
zsh
:MacOS默认的shell
bash shell
GNU Bourne-Again Shell(bash)是GNU计划中重要的工具软件之一,目前也是Linux
标准的shell
,与sh兼容
显示当前使用的shell
[hooper@magedu-demo ~]$ echo $SHELL
/bin/bash
显示当前系统使用的所有shell
[hooper@magedu-demo ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
设置主机名
# 临时生效
[root@magedu-demo ~]# hostname
magedu-demo
[root@magedu-demo ~]# hostname hooper-demo
[root@magedu-demo ~]# hostname
hooper-demo
# 永久生效
[root@magedu-demo ~]# hostname
hooper-demo
[root@magedu-demo ~]# hostnamectl set-hostname magedu-demo
[root@magedu-demo ~]# hostname
magedu-demo
# 写入主机名的文件,永久生效就是修改了/etc/hostname中的内容
[root@magedu-demo ~]# cat /etc/hostname
magedu-demo
注意⚠️
- 主机名不支持使用
_
,但支持-
,可使用字母、数字、-
组合 - 有些软件对主机名有特殊要求
命令提示符 prompt
登录
Linux
后,默认的系统命令提示符毫无个性,无法明显区分生产和测试环境,而导致误操作
可以通过修改PS1
变量实现个性的提示符格式,避免这种低级错误发生
显示提示符格式
[hooper@magedu-demo ~]$ echo $PS1
[\u@\h \W]\$
提示符常用参数及含义
\d
:代表日期,格式为weekday month date,例如:“Mon Aug 1”
\H
:完整的主机名称
\h
:仅取主机名中的第一个名字
\t
:显示时间为24小时格式,如:HH:MM:SS
\T
:显示时间为12小时格式
\A
:显示时间为24小时格式:HH:MM
\u
:当前用户的账号名称
\v
:BASH的版本信息
\w
:完整的工作目录名称
\W
:利用basename
取得工作目录名称,只显示最后一个目录名
\#
:下达的第几个命令
\$
:提示字符,如果是root
用户,提示符为 # ,普通用户
则为 $
\e|\033
:控制符
提示符颜色的设置
\[\e[F;Bm\].....\[\e[0m\]
或者\[\033[F;Bm\].....\[\033[0m\]
其中“F”为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47,[\e[0m] 结束颜色设定
“B”还可以设置其他格式,eg为1时,将显示加亮加粗的文字,详见下表
F 字体颜色编号 | B 背景颜色编号 | 颜色 | 其他格式代码 | 其他格式含义 | |
---|---|---|---|---|---|
30 | 40 | 黑色 | 0 | OFF | |
31 | 41 | 红色 | 1 | 高亮显示 | |
32 | 42 | 绿色 | 4 | underline | |
33 | 43 | 黄色 | 5 | 闪烁 | |
34 | 44 | 蓝色 | 7 | 反白显示 | |
35 | 45 | 紫红色 | 8 | 不可见 | |
36 | 46 | 青蓝色 | |||
37 | 47 | 白色 |
实例:将定制化的提示符格式永久保存
# 可以将定制化的提示符写入到当前用户家目录下的.bashrc中,或者写到/etc/profile.d/env.sh中
# 两者的区别为第一个只设置给当前用户定制化提示符,而写到/etc/profile.d/env.sh则是对全局设置的定制化提示符
# 针对当前用户设置
tail /root/.bashrc
###############################################
# Set prompt
PS1="\[\e[32;1m\][\[\e[32;1m\]\u\[\e[32;1m\]@\h \[\e[36;1m\]\w\[\e[0m\]]\\$ "
###############################################
# 使其生效
source /root/.bashrc
# 针对全局设置
cat /etc/profile.d/env.sh
###############################################
# Set prompt
PS1="\[\e[32;1m\][\[\e[32;1m\]\u\[\e[32;1m\]@\h \[\e[36;1m\]\w\[\e[0m\]]\\$ "
###############################################
# 使其生效
source /etc/profile.d/env.sh
执行命令
执行命令过程
输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
shell中可执行命令的分类
- 内部命令:由
shell
自带的,且通过某命令形式提供 - 外部命令:在文件系统路径下有对应的可执行程序文件
区别指定命令是内部命令还是外部命令
type <COMMAND>
实例:
# echo为内部命令
type echo
echo is a shell builtin
# -a参数,在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名
type -a echo
echo is a shell builtin
echo is /bin/echo
# cat为外部命令
type cat
cat is /bin/cat
# type本身为内部命令
type type
type is a shell builtin
# 如果一个外部命令没有并执行过,使用type查询的时候,显示对应路径
type hostname
hostname is /bin/hostname
# 执行hostname
hostname
magedu-demo
# 再次查询,显示hostname的这个命令被hash缓存了,就是将对应路径已经存在内存中
type hostname
hostname is hashed (/bin/hostname)
# 显示hash缓存
hash
hits command
2 /bin/hostname
- 内部命令相关
# help 内部命令列表
help
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.
A star (*) next to a name means that the command is disabled.
job_spec [&] history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg..>
(( expression )) if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; >
. filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -x command [args]
: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
[ arg... ] let arg [arg ...]
[[ expression ]] local [option] name[=value] ...
alias [-p] [name[=value] ... ] logout [n]
bg [job_spec ...] mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] >
bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyse> popd [-n] [+N | -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir]
caller [expr] pwd [-LP]
case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [->
cd [-L|[-P [-e]]] [dir] readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum>
command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or readonly -p
compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F fu> return [n]
complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordl> select NAME [in WORDS ... ;] do COMMANDS; done
compopt [-o|+o option] [-DE] [name ...] set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
continue [n] shift [n]
coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilrtux] [-p] [name[=value] ...] source filename [arguments]
dirs [-clpv] [+N] [-N] suspend [-f]
disown [-h] [-ar] [jobspec ...] test [expr]
echo [-neE] [arg ...] time [-p] pipeline
enable [-a] [-dnps] [-f filename] [name ...] times
eval [arg ...] trap [-lp] [[arg] signal_spec ...]
exec [-cl] [-a name] [command [arguments ...]] [redirection ...] true
exit [n] type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or export -p typeset [-aAfFgilrtux] [-p] name[=value] ...
false ulimit [-SHacdefilmnpqrstuvx] [limit]
fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command] umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMANDS; done unset [-f] [-v] [name ...]
for (( exp1; exp2; exp3 )); do COMMANDS; done until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name () { COMMANDS ; } variables - Names and meanings of some shell variables
getopts optstring name [arg] wait [id]
hash [-lr] [-p pathname] [-dt] [name ...] while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...] { COMMANDS ; }
# enable 管理内部命令
## 启用某个内部命令
enable <command>
## 禁用某个内部命令
enable -n <command>
## 查看所有禁用的内部命令
enable -n
实例:
# 禁用alias
enable -n alias
# 查看被禁用的命令列表
enable -n
enable -n alias
# 通过help查看被禁用的命令,命令旁边带*号的,表示内部命令被禁用
help |grep "^*"
*alias [-p] [name[=value] ... ] logout [n]
- 执行外部命令
查看外部命令路径
# 查看cat的命令路径
[hooper@magedu-demo ~]$ which -a cat
/usr/bin/cat
# 查看ls命令的路径,并将对应使用的别名一同显示
[hooper@magedu-demo ~]$ which -a ls
alias ls='ls --color=auto'
/usr/bin/ls
# 只查看ls命令的路径
[hooper@magedu-demo ~]$ which -a ls --skip-alias
/usr/bin/ls
# 通过whereis查看cd命令的路径,并显示对应的帮助文档的路径
whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz
hash缓存表
系统初始
hash
表为空,当外部命令执行时,默认会从PATH
路径下寻找该命令,找到后会将这条命令的路径记录到hash
表中,当再次使用该命令时,shell
解释器首先会查看hash
表,存在将执行之,如果不存在,将会在PATH
路径下寻找,利用hash
缓存表可大大提高命令的调用速率
hash
常见用法
# 显示hash缓存
hash
# 显示hash缓存,可作为输入使用
hash -l
# 将命令全路径PATH起别名为name
hash -p <path> <command-name>
# 打印缓存中name的路径
hash -t <command-name>
# 清除name缓存
hash -d <command-name>
# 清除所有hash缓存
hash -r
命令别名
对于经常执行的较长的命令,可以将起定义较短的别名,以方便执行
显示当前shell
进程所有可用的命令别名
alias
定义别名alias command,其相当于执行命令VALUE
alias <alias command> = 'VALUE'
实例
# 设置切换到网卡目录下的别名,cdnet
alias cdnet='cd /etc/sysconfig/network-scripts/'
# 使用type查看命令是否是别名
type cdnet
cdnet is aliased to `cd /etc/sysconfig/network-scripts/'
# 查看当前系统所有的别名
alias
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias cp='cp -i'
alias datebak='date +%F_%H-%M-%S'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color'
alias l.='ls -d .* --color=auto'
alias ll='ls -lhrt'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
撤销别名
unalias [-a] <alias command> [name]
# 撤销所有别名
unalias -a
注意⚠️
在命令行中定义别名,仅针对当前shell
进程有效
如果想永久有效,需要定义在配置文件中
- 仅对当前用户生效:
~/.bashrc
- 对所有用户生效:
/etc/bashrc
编辑对应的配置文件后,新的配置不会立即生效,bash
进程重新读取配置文件
source /path/to/confile
./path/to/confile
# 或者退出终端,重新登录
命令的优先级
别名命令 > 内部命令 > 外部命令
如果别名同原来的命令同名,如果要执行原命令,可使用
\<alias name>
"alias name"
'alias name'
command <alias name>
/path/to/path/<alias name> # 只适用于外部命令
实例
alias enable='cat /etc/redhat-release'
[root@magedu-demo ~]# enable
CentOS Linux release 7.6.1810 (Core)
# 执行原来enable的命令
\enable|"enable"|'enable'|command enable
enable .
enable :
enable [
常用别名参考
alias cp='cp -i'
alias datebak='date +%F_%H-%M-%S'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color'
alias l.='ls -d .* --color=auto'
alias ll='ls -lhrt'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias vieth0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
alias yp='yum provides */'
alias yr='yum remove'
alias yy='yum install -y'
# 扫描新加的磁盘
alias scandisk='echo - - - > /sys/class/scsi_host/host0/scan;echo - - - > /sys/class/scsi_host/host1/scan'
命令格式
COMMAND [OPTIONS.....] [ARGUMENTS....]
COMMAND [COMMAND] [COMMAND] ......
选项:用于启动或者关闭命令的某个或某些功能
- 短选项:UNIX风格选项,eg:
-a,-h
- 长选项:GNU风格选项,eg:
--help,--all
- BSD风格选项: 一个字母,eg:
a
,使用相对比较少
参数:命令的作用对象,eg:文件名、用户名等
注意⚠️
- 多个选项以及多参数和命令之间使用空白字符分隔
- 取消或结束命令执行:
Ctrl+c|Ctrl+d
,其中Ctrl+d
,如果在终端中使用,则表示退出当前终端 - 多个命令可以用
;
符号分开 - 一个命令可以用
\
分成多行