Linux 基础

用户类型

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使用的是虚拟终端登录的系统的

交互式接口

交互式接口:启动终端后,在终端设备附加一个交互式的应用程序

交互式接口类型

  • GUIGraphic User Interface
      X protocol,window manager,desktop(GNOME、KDE、XFCE)
  • CLICommand Line Interface
      shell程序

什么是shell

shellLinux系统的用户界面,提供了用户与内核进行交互操作的一种接口;它接收用户输入的命令并把它送入内核去执行
shell也被称为Linux的命令解释器(command interpreter),shell本身是一个程序;将用户输入的命令行拆解为"命令"与"参数",接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传给该程序并执行
shell是一种高级程序设计语言,提供了变量、函数、条件判断,循环等开发语言功能
由于shell本身是个程序,所以它可以被任何用户自己开发的各种shell所代替

shell工作原理

各种shell

  • sh:Steve Bourne
  • bash: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 背景颜色编号颜色其他格式代码其他格式含义
3040黑色0OFF
3141红色1高亮显示
3242绿色4underline
3343黄色5闪烁
3444蓝色7反白显示
3545紫红色8不可见
3646青蓝色
3747白色

实例:将定制化的提示符格式永久保存

# 可以将定制化的提示符写入到当前用户家目录下的.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,如果在终端中使用,则表示退出当前终端
  • 多个命令可以用;符号分开
  • 一个命令可以用\分成多行

参考文献

Linux命令行提示符颜色格式设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值