Shell是系统的
用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行 。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程。shell程序语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
shell命令分为两类
内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都差不多
外置命令,在文件系统的某个目录下,有个与命令名称相同的文件。
可以使用type 命令查看命令是file、alias还是builtin t
ype -a 列出当前命令可以如何执行
type -t 仅列出命令按照哪种方式执行
[root@server ~]# type -a useradd
useradd is /usr/sbin/useradd
[root@server ~]# type -t useradd
file
[root@server ~]#
可以通过环境变量PATH来让shell查看命令的可执行文件的路径
[root@server ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@server ~]#
变量简单说就是让某一个特定字符串代表不固定的内容,变量可分为两类:环境变量(全局变量)和普 通变量(局部变量)
1、普通变量
普通变量也可称为局部变量,只能在创建它们的Shell函数或Shell脚本中使用,普通变量一般由开发者在 开发脚本程序时创建。
设置变量:
变量命名的规则:只能使用数字、字母和下划线,且不能用数字开头
变量名和变量值用“=”连接
等号两边不能有空格符
变量的赋值,一般有五种写法:
name=value
name1='value'
name_2="value"
_name_3=`cmd`
_na_me_4=$(cmd)
2、环境变量
环境变量也可称为全局变量,可以在创建它们的Shell 及其派生出来的任意子进程 Shell 中使用,环境变量又可分为自定义环境变量和 bash 内置的环境变量。
(1)bash内置的环境变量:用于定义 Shell 的运行环境,保证 Shell 命令的正确执行,Shell 通过环境 变量来确定登录用户名、命令路径、终端类型、登录目录等
(2)自定义环境变量:自定义环境变量可以在命令行中设置和创建,但用户退出命令时这些变量值就会 丢失。如果希望永久保存环境变量,可在用户家目录下的.bash_profile 或 .bashrc 文件中,或者全 局配置/etc/bashrc 或 /etc/profile 文件中定义,在将环境变量放入上述的文件中后,每次用户登 录时这些变量都将被初始化。
按照系统规范,所有环境变量的名字均采用大写形式。
在命令行中设置环境变量:
export 变量名=value
变量名=value ;
export 变量名
declare -x
变量名=value
在文件中设置环境变量:永久生效要用root账户在.bashrc;bashrc;.bash_profile;bash_profile这四个文件中添加你想设置的永久变量
[root@server ~]# ll -a /root
total 84
-rw-r--r--. 1 root root 176 Aug 12 2018 .bash_profile
-rw-r--r--. 1 root root 227 Oct 30 03:30 .bashrc
显示与取消变量
(1)通过 echo 或 printf 打印变量
[root@server ~]# echo $HOME
/root
[root@server ~]# echo $UID
0
[root@server ~]# echo $PWD
/root
[root@server ~]# echo $SEHLL
[root@server ~]# echo $USER
root
[root@server ~]# printf "HOME"
HOME[root@server ~]# printf "HOME\n"
HOME
[root@server ~]# printf "PWD\n"
PWD
[root@server ~]#
(2)显示默认的环境变量
[root@server ~]# env
HOSTNAME=server
XDG_SESSION_ID=8
TERM=xterm
[root@server ~]#set
BASH=/bin/bash
[root@server ~]# declare |head
BASH=/bin/bash
(3)用 unset 消除本地变量和环境变量
[root@server ~]# echo $USER
root
[root@server ~]# unset USER
[root@server ~]#echo $USER
[root@server ~]#
Linux 中的特殊符号
符号 | 功能 | 说明 |
; | 可使用分号分隔多条命令 | 在一行上输入和执行多条较短的命令时可以使用;来分割命令 |
* | 匹配任意0或多个字符 | 不能用于创建文件 |
? | 匹配任意单个字符 | 不能用于创建文件 |
[] | 匹配方括号中的任意一个字符,表示范围可以用“-” | 不能用于创建文件 |
[^]或[!] | 匹配方括号中的任意一个字符或数字后进行取反 | 用于查找和删除文件 |
{string,string} | 匹配括号中的任意一个字符串,表示一个范围时,字符串之间可以加入“-” | 用于创建、查看、删除文件 |
\ | 使\后面的特殊字符失去效果 | 可以在命令行后加一个\,再按回车,表示并不执行该命令而是表似换行 |
` | 反引号,一般用于引用命令,执行的时候反引号里面的命令会被执行, | |
' | 单引号,将单引号内的所有内容原样输出 | 所有特殊字符在单引号内都会失去特殊含义 |
“ | 双引号,除了几个特殊字符外,双引号内的内容都原样输出 |
命令别名
别名是命令的快捷方式。对于需要经常执行,并需要很长时间输入的长命令创建快捷方式很有用。
语法:alias 别名=’原命令 [选项]…… [参数]……’
查看已经设置的命令别名
[root@server ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias hello='echo hello everyone >> /file.txt'
alias hh='touch ~/file1'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias shuaxin='touch /file.txt'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
[root@server ~]#
删除命令别名
[root@node13 ~]#unalias 别名
别名的永久化也需要进入.bashrc;bashrc;.bash_profile;bash_profile这四个文件中进行配置。
命令历史
history 命令可以查阅命令历史记录 ,也可在命令行利用向上或向下光标键来进行查询。
语法:history [选项] [参数]
选项:
number:显示最近number条命令历史
-c:清空当前历史命令
-a [file]:后面没跟文件时,默认将缓冲区中历史命令写入~/.bash_history中 -r [file]:将历史命令文件中的命令读入当前历史命令缓冲区中
-w:将当前历史命令缓冲区命令写入历史命令文件中;
[root@server ~]# history 5
497 declare |head
498 echo $USER
499 alias
500 alias --help
501 history 5
命令行的快捷键
ctrl+d 输入已结束;也可当做exit
ctrl+c 键盘中断请求,终止当前的命令
Ctrl+a 移动到当前行的开头
Ctrl+e 移动到当前行的结尾
Ctrl+l 清屏==clear
Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身) Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身) ctrl+←/→ 光标在命令行中按照单词跳转
以下是有关shell的命令使用
1、当前用户永久生效的命令别名
(1)写一个命令命为hello,实现的功能为每输入一次hello命令,就有hello,everyone写入文
件/file.txt中。
(2)写一个命令别名为shuaxin,实现的功能为每输入一次该命令,file.txt文件的所有时间就更新为当前 时间。
(1)写一个命令命为hello,实现的功能为每输入一次hello命令,就有hello,everyone写入文
件/file.txt中。
先进入vim界面
[root@server ~]# vim .bashrc
随后添加hello的vim命令
alias hello="echo hello everyone >> /file.txt"
[root@server ~]# source .bashrc
验证
[root@server ~]# hello
[root@server ~]# cat /file.txt
hello everyone
[root@server ~]#
(2)写一个命令别名为shuaxin,实现的功能为每输入一次该命令,file.txt文件的所有时间就更新为当前 时间。
进入vim编辑界面
[root@server ~]# vim .bashrc
在vim界面中添加相关命令
alias shuaxin='touch /file.txt'
[root@server ~]# source .bashrc
验证
[root@server ~]# ll /file.txt
-rw-r--r--. 1 root root 15 Oct 30 03:33 /file.txt
[root@server ~]# shuaxin
[root@server ~]# ll /file.txt
-rw-r--r--. 1 root root 15 Oct 30 03:36 /file.txt
[root@server ~]#
2、所有用户生效的命令别名
写一个所有用户都生效的命令别名为hh,每一个用户输入这个命令之后可以在该用户家目录下创建一个file1 文件。
先进入vim编辑界面
在vim界面中加入命令
alias hh='touch ~/file1'
[root@server ~]# source /etc/bashrc
验证
[root@server ~]# hh
[root@server ~]# ll
total 16
-rw-r--r--. 1 root root 197 Oct 30 03:25 '!'
-rw-------. 1 root root 1382 Oct 16 12:54 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 16 13:28 Desktop
drwxr-xr-x. 2 root root 6 Oct 16 13:28 Documents
drwxr-xr-x. 2 root root 6 Oct 16 13:28 Downloads
-rw-r--r--. 1 root root 0 Oct 30 03:40 file1
-rw-r--r--. 1 root root 0 Oct 24 07:39 file-10-24
-rw-r--r--. 1 root root 1654 Oct 16 13:04 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 16 13:28 Music
-rw-r--r--. 1 root root 3283 Oct 28 11:28 myfile.zip
drwxr-xr-x. 2 root root 6 Oct 16 13:28 Pictures
drwxr-xr-x. 2 root root 6 Oct 16 13:28 Public
drwxr-xr-x. 2 root root 6 Oct 16 13:28 Templates
drwxr-xr-x. 2 root root 6 Oct 16 13:28 Videos
[root@server ~]# su - rehl
[rehl@server ~]$ hh
[rehl@server ~]$ ll
total 0
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Desktop
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Documents
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Downloads
-rw-rw-r--. 1 rehl rehl 0 Oct 30 03:41 file1
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Music
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Pictures
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Public
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Templates
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Videos
[rehl@server ~]$
3、命令历史:查看命令历史,并且调用第十行命令
首先查看历史命令
[root@server ~]# history
1 cd
2 pwd
3 su - rhel
4 exit
5 su rhel
6 su - rhel
7 logout
8 su - rhel
9 su - rehl
10 exit
11 hostnamectl set-hostname other
12 hostnamectl set-hostname server
使用第10行的命令
[root@server ~]# history !10
history exit
-bash: history: exit: numeric argument required
[root@server ~]#
或者直接打!10也可以执行第十行 的命令