Shell核心介绍、快捷键及常用的基本命令1.Shell与bash1.1 Shell的概念1.1.1 Shell的由来1.1.2 Shell的工作原理1.1.3 常用的shell1.2 bash简介2.快捷键3.配置网络参数3.1 nmtui 图形化界面配置网络参数3.2 编辑网卡配置文件3.3 nmcli命令4. 常用的基本命令介绍4.1常用的系统工作命令4.1.1 echo4.1.2 date4.1.3 重启相关命令4.1.4 关闭系统相关命令4.2 系统状态检测命令4.2.1 ifconfig4.2.2 uname4.2.3 free4.2.4 who4.2.5 last4.2.6 history4.2.7 tracepath4.2.8 netstat4.2.9 alias4.2.10 blkid4.3 查找定位文件命令4.3.1 tree4.3.2 find4.3.3 locate4.3.4 whereis4.3.5 which4.4. 文件及目录管理命令4.4.1 touch4.4.2 cp4.4.3 pwd4.4.4 ls4.4.5 cd4.4.6 mkdir4.4.7 mv4.4.8 rm4.4.9 dd4.4.10 file4.5 文本文件查看及编辑命令4.5.1 cat4.5.2 more4.5.3 less4.5.4 head4.5.5 tail4.5.6 cut4.5.7 diff4.5.8 uniq4.5.9 tr4.5.10 sort4.6 打包压缩命令4.6.1 tar4.7 Linux三剑客4.7.1 grep4.7.2 sed4.7.3 awk5. 重定向、管道符、通配符、转义符5.1 重定向5.1.1 输入重定向5.1.2 输出重定向5.2 管道符5.3 通配符5.4 转义符6. 重要的环境变量彩蛋:修改命令提示符
现在我们使用的操作系统(Windows、Mac OS、Android、iOS 等)都是带图形界面的,简单直观,容易上手;然而在计算机的早期,并没有图形界面,我们只能通过一个一个地命令来控制计算机,这些命令有成百上千之多。 对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。
由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。用户界面和命令行就是这个另外开发的程序,在 Linux下,这个命令行程序叫做 Shell 。
Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
Shell 本身并不是内核的一部分,它只是在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。
Shell 的另一个重要特性是它自身就是一个 解释型的程序设计语言 ,Shell 程序设计语言支持在高级语言里所能见到的绝大多数程序控制结构,比如循环,函数,变量和数组。Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、搭建 Web 运行环境、日志分析等,Shell 都非常合适。任何在提示符下能键入的命令也能放到一个可执行的 Shell程序里,这意味着用shell语言能简单地重复执行某一任务。
Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 Shell 隐藏了起来,它自己在背后默默进行,我们看不到而已。接口其实就是一个一个的函数,使用内核就是调用这些函数。
Shell 是一个命令语言解释器(command-language interpreter),把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前。
在 Shell 中输入的命令,有一部分是 Shell 本身自带的,这叫做内置命令;有一部分是其它的应用程序(一个程序就是一个命令),这叫做外部命令。
Shell 本身支持的命令并不多,功能也有限,但是 Shell 可以调用其他的程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。
更值得一提的是,Shell 还可以让多个外部程序发生连接,在它们之间很方便地传递数据,也就是把一个程序的输出结果传递给另一个程序作为输入。
将 Shell 在整个 Linux 系统中的地位描述成下图所示的样子。

不论何时你键入一个命令,它都被 Linux Shell 所解释。Shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如 ls 和 rm,也可以是购买的商业程序,比如 xv,或者是公用软件(public domain software),就象 ghostview。然后 Shell 试着在搜索路径($PATH)里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。
在 Linux 和 UNIX 系统里可以使用多种不同的 Shell 可以使用。最常用的几种是 Bourne shell (sh), C shell (csh), Korn shell (ksh)等。三种 Shell 都有它们的优点和缺点。Bourne shell 的作者是 Steven Bourne。
除了这些 Shell 以外,在 Linux 上常见的有 tcsh (csh 的扩展),Bourne Again shell(bash, sh 的扩展), 和 Public Domain Korn shell (pdksh, ksh 的扩展)。Bash 是大多数 Linux 系统的缺省 Shell。
Bash(GNU Bourne-Again Shell)是一个为 GNU 计划编写的 Unix shell,它是许多 Linux 平台默认使用的 shell。
Bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。Bash 也包含了很多 C 和 Korn shell 里的优点。Bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。

网卡配置文件路径:/etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet # 网络类型=以太网PROXY_METHOD=none BROWSER_ONLY=noBOOTPROTO=none # 启动的协议,指获取IP地址的方式DEFROUTE=yes # 是否设置默认路由IPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noNAME=ens160 # 网卡名称UUID=51e9bceb-7bd4-4034-8303-f5b052cdf226DEVICE=ens160 # 设备ONBOOT=yes # 是否启动IPV6_PRIVACY=noIPADDR=192.168.80.8 # IPv4地址PREFIX=24 # 网络掩码GATEWAY=192.168.80.1 # IPv4网关地址xxxxxxxxxxnmcli c m ens33 ipv4.address 192.168.80.10/24 # 修改 IP 地址和子网掩码nmcli c m ens33 +ipv4.addresses 192.168.80.100/24nmcli c m ens33 ipv4.method manual # 修改为静态配置,默认是 autonmcli c m ens33 ipv4.gateway 192.168.80.2 # 修改默认网关nmcli c m ens33 ipv4.dns 192.168.80.2 # 修改 DNSnmcli c m ens33 +ipv4.dns 114.114.114.114 # 添加一个 DNSnmcli c m ens33 ipv6.method ignored # 将 IPv6 禁用,针对CentOS8,三个可选项:disabled、auto、manualnmcli c m ens33 connection.autoconnect yes # 开机启动xxxxxxxxxxecho #用于在终端输出字符串或变量提取后的值[root@localhost ~]# echo "wellcome to Linux"wellcome to Linux[root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/binxdate #用于显示日期及设置系统时间%Y 年%m 月%d 日%H 小时(24小时制)%M 分钟%l 小时(12小时制)%S 秒%j 今年中的第几天-s 设置系统时间 #date -s "2024-02-18 12:00:00"
[root@localhost ~]# date2024年 02月 18日 星期日 22:17:39 CST[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S %j"2024-02-18 22:18:21 049xxxxxxxxxxreboot #立即重启shutdown -r now #立即重启shutdown -r 10 #10分钟后重启shutdown -r 23:00 #23:00重启xxxxxxxxxxpoweroff #关机halt #关机shutdown -h now #立即关机shutdown -h 10 #10分钟后关机xxxxxxxxxxifconfig #用于查看网卡信息
[root@localhost ~]# ifconfigens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.126.128 netmask 255.255.255.0 broadcast 192.168.126.255 inet6 fe80::ce9e:cc46:4321:ccf8 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:80:09:67 txqueuelen 1000 (Ethernet) RX packets 31766 bytes 43393644 (41.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 13107 bytes 993373 (970.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0xxxxxxxxxxuname #用于查看系统内核及系统版本等信息-a #显示所有信息-m #显示处理器类型-n #显示主机名-r #显示内核版本号-s #显示操作系统名称-v #显示操作系统版本
[root@localhost ~]# uname -aLinux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linuxxxxxxxxxxxfree #用于显示内存状态信息-b #以字节为单位显示-m #以mb为单位显示-k #以kb为单位显示-h #以合适单位显示
[root@localhost ~]# free -h total used free shared buff/cache availableMem: 972M 228M 169M 7.5M 575M 589M #物理内存Swap: 2.0G 0B 2.0G #交换分区xxxxxxxxxxwho #用于查看当前登录系统的用户信息-q #只显示登录系统的账号和总人数-m #和who am i相同
[root@localhost ~]# whoroot tty1 2024-02-18 21:05root pts/0 2024-02-18 21:06 (192.168.126.1)[root@localhost ~]# who -qroot root# 用户数=2[root@localhost ~]# who -mroot pts/0 2024-02-18 21:06 (192.168.126.1)xxxxxxxxxxlast #用看系统的登录记录-n #显示行数-R #省略来源终端-d #将IP地址转换成主机名-f #指定记录文件-x #显示系统开关机信息
[root@localhost ~]# lastroot pts/0 192.168.126.1 Sun Feb 18 21:06 still logged in root tty1 Sun Feb 18 21:05 still logged in reboot system boot 3.10.0-1160.el7. Sun Feb 18 20:39 - 22:37 (01:57)
wtmp begins Sun Feb 18 20:39:28 2024xxxxxxxxxxhistory #用于显示历史执行过的命令-d #将指定序号的命令删除-c #清空所有历史命令Ctrl+r #历史命令中搜索执行过的命令!123 #将序号为123的命令再执行一遍!pas #将以pas开头的命令再执行一遍
[root@localhost ~]# history 1 nmtui 2 date "+%l" 3 echo "wellcome to Linux" 4 echo $PATH 5 date 6 date "+%Y-%m-%d %H:%M:%S %j"xxxxxxxxxxtracepath #用于检测数据包到达目的主机时途径的路由信息
[root@localhost ~]# tracepath www.jokercat.com.cn 1?: [LOCALHOST] pmtu 1500 1: gateway 0.236ms 1: gateway 0.097ms xxxxxxxxxxnetstat #用于显示如网络连接、路由表、接口状态等网络相关信息-a #显示所有连线中的socket-A #列出网络类型连线中的相关地址-c #持续列出网络状态-C #显示路由器配置的快取信息-e #显示网络其他相关信息-F #显示路由缓存-n #直接使用IP地址,而不通过域名服务器-t #显示tcp协议的连线状况-u #显示udp协议的连线状况-i #显示网卡列表信息-r #显示路由信息-l #仅列出正在监听的服务状态
[root@localhost ~]# netstat -rKernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Ifacedefault gateway 0.0.0.0 UG 0 0 0 ens32192.168.126.0 0.0.0.0 255.255.255.0 U 0 0 0 ens32[root@localhost ~]# netstat -tunlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1531/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1669/master tcp6 0 0 :::22 :::* LISTEN 1531/sshd tcp6 0 0 ::1:25 :::* LISTEN 1669/master udp 0 0 127.0.0.1:323 0.0.0.0:* 989/chronyd udp 0 0 0.0.0.0:68 0.0.0.0:* 1340/dhclient udp6 0 0 ::1:323 :::* 989/chronyd xxxxxxxxxxalias #用于定义别名命令alias guanji=poweroff #将poweroff定义为别名guanjiunalias #删除别名命令alias #查看系统中已有的别名命令#使用alias定义的别名命令在系统重启之后将会失效xxxxxxxxxxblkid #查看设备的UUID
[root@localhost ~]# blkid/dev/sda1: UUID="4039f7cb-6754-4cfc-bd60-ba6e2ff399de" TYPE="xfs" /dev/sda2: UUID="FUlQyE-cwAW-UIvb-rxz9-6fVz-dU5Y-h2Oty0" TYPE="LVM2_member" /dev/mapper/centos-root: UUID="e83bfb80-6366-4b14-8b9a-95a4dadb8a88" TYPE="xfs" /dev/mapper/centos-swap: UUID="6a212b88-fdc3-44c7-85d7-584e40ccc365" TYPE="swap" xxxxxxxxxxtree #以树状结构显示目录-L #根据指定层数显示目录
[root@localhost ~]# tree -L 1 //├── bin -> usr/bin├── boot├── dev├── etc├── home├── lib -> usr/lib├── lib64 -> usr/lib64├── media├── mnt├── opt├── proc├── root├── run├── sbin -> usr/sbin├── srv├── sys├── tmp├── usr└── var
19 directories, 0 filesxxxxxxxxxxfind #按照指定条件查找文件所对应位置-name #按文件名查找-user #按所有者查找-group #按所属组查找-mtime #按修改内容的时间查找(+7,7天以前;7,第7天;-7,最近7天)-atime #按访问时间查找-ctime #按修改文件属性的时间查找-type #按文件类型查找(b,块设备;d,目录;f,文件;c,字符设备;l,链接文件;p,管道)-size #按大小查找(+1M,大于1M;1M,等于1M;-1M,小于1M)-perm #按权限查找-exec #对查找到文件进一步操作[root@localhost ~]# find / -user joker -exec cp -a {} ~/joker/ \; #将find查找到文件复制到~/joker/目录下#组合查找:find / -name "hosts" -o -type f -d -name "hostname" #在根目录下查找名为hosts或者hostname的文件rm -f $(find /data -name "file*") -type f -mtime -7 #删除最近7天/data目录下以file开头的文件xxxxxxxxxxlocate #用于查找符合条件的文档,因为locate是在数据库中查找,因此查找之前先进行updatedb同步内存中的数据到磁盘-c #只输出找到的数量-n #最多显示n个输出-i #忽略大小写
[root@localhost ~]# updatedb[root@localhost ~]# locate passwd/etc/passwd/etc/passwd-xxxxxxxxxxwhereis #查看二进制文件、源代码文件以及man手册页-b #只查找二进制文件-B #只在设定目录下查找二进制文件-m #只查找说明文件-s #只查找源代码文件-S #只在设定目录下查找源代码文件
[root@localhost ~]# whereis rebootreboot: /usr/sbin/reboot /usr/share/man/man8/reboot.8.gzxxxxxxxxxxwhich #用于在环境变量$PATH设置的目录里查找符合条件的文件
[root@localhost ~]# which reboot/usr/sbin/rebootxxxxxxxxxxtouch #用于创建文件-a #修改读取时间-m #修改修改时间-d #修改读取时间和修改时间xxxxxxxxxxcp #用于复制文件或目录-p #保留文件的原始属性-r #递归持续复制-d #若文件为链接文件,则保留该链接文件的属性-a #相当于pdrxxxxxxxxxxpwd #用于查看当前所在路径xxxxxxxxxxls #用于查看目录下的文件及目录信息-l #查看详细信息-a #查看所有文件(包括隐藏文件)-d #只查看目录-h #人性化显示文件大小-t #按照修改时间排序-R #递归显示目录中的所有子文件和子目录xxxxxxxxxxcd #用于切换所在目录- #切换到上一次所在目录.. #切换到上一级目录/ #切换到根目录~ #切换到用户的家目录. #表示当前目录xxxxxxxxxxmkdir #用于创建目录-p #递归创建目录xxxxxxxxxxmv #移动、剪切、重命名-b #当目标文件存在时,在执行覆盖前会为其创建一个备份文件-n #不要覆盖任何已存在的文件或目录-u #当源文件比目标文件新或者目标文件不存在时,才会执行此操作xxxxxxxxxxrm #用于删除文件或目录-r #删除模流-f #强制删除xxxxxxxxxxdd #从指定文件中提取制定个数指定大小的文件if #指定从哪个文件中提取of #输出文件的名称count #指定提取的个数bs #指定提取文件的大小
[root@localhost ~]# dd if=/dev/zero of=/home/test count=1 bs=200M记录了1+0 的读入记录了1+0 的写出209715200字节(210 MB)已复制,1.06094 秒,198 MB/秒xxxxxxxxxxfile #判断文件的类型xxxxxxxxxxcat #用于查看文本文件的内容(适合小文件)-n #显示行号-b #显示行号,空行不编号-E #在每行结尾显示$xxxxxxxxxxmore #查看文本文件内容(适合大文件)+n #从第n行开始-n #定义屏幕大小为n行-c #从顶部清屏然后显示-s #把连续多个空行显示为1行Enter #向下翻页空格键/Ctrl+f #向下滚动一屏Ctrl+b #向上滚动一屏= #输出当前行号:f #输出文件名和当前行号v #调用vi编辑器!#调用shell,并执行命令q #退出xxxxxxxxxxless #用于查看文本文件的内容v #进入编辑模式F #类似于tail -f效果,动态监控内容xxxxxxxxxxhead #用于查看文件的前n行内容,默认为前10行-n #指定行数-q #隐藏文件名-v #显示文件名-c 数字 #显示前n个字节xxxxxxxxxxtail #用于查看文件的后n行内容,默认为后10行-n #指定行数-f #循环动态读取,一般适用于读取变化的日志文件xxxxxxxxxxcut #用于按列提取文件内容-b #以字节为单位进行分割-c #以字符为单位进行分割-d #自定义分割符-f #与-d一起使用,指定显示哪些列xxxxxxxxxxdiff #用于比较多个文本的差异-b #不检查空格字符的不同-B #不检查空白行-c #显示全部内容,并标记不同之处-i #不检查大小写的不同-q #仅显示有无差异-w #忽略全部的空格字符-y #以并列形式显示文件的异同之处xxxxxxxxxxuniq #去除文本文件中连续的重复行-c #在每列旁边显示该行重复出现的次数-d #仅显示重复出现的列-u #仅显示出现一次的列xxxxxxxxxxtr #转换文本文件中的字符-c #反选设定字符
cat a.txt | tr [a-z][A-Z]xxxxxxxxxxsort #对文件中的内容进行排序-f #忽略大小写-b #忽略缩进与空格-n #以数值进行排序-r #反向排序-u #去除重复行-t #指定间隔符-k #设置字段范围xxxxxxxxxxtar #用于打包压缩文件-c #创建压缩文件-x #解压文件-t #查看压缩包内有哪些文件-j #用bzip2格式压缩或解压文件,文件后缀名为tar.bz-v #显示压缩或解压过程-f #目标文件名-p #使用绝对路径压缩-P #保留原始的文件权限或属性-C #制定解压到的目录-h #打包软连接--exclude #排除打包
tar zcvf /tmp/pai.tar.gz ./test/ --exclude=file1xxxxxxxxxxgrep #在文本文件中执行关键字过滤-c #仅显示找到的行数-i #忽略带小写-n #显示行号-v #反选-E #相当于egrep,支持扩展正则表达式xxxxxxxxxxsed #将文本中数据进行选取、替换、增加、删除-n #一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed处理的行输出到屏幕-e #允许对输入数据应用多条sed命令编辑-f 脚本文件名 #从sed脚本中读入sed操作,和awk的-f选项非常类似-r #在sed中支持扩展正则表达式-i #用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出动作a \ #追加,在当前行后添加一行或多行。当添加多行时,除最后一行外,每行末尾需要用"\"代表数据未完结cat a.txt|sed ‘2a 123456789’ 在a.txt的第2行后增加123456789c \ #行替换,用c后面的字符串替换原数据行。当替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结cat a.txt|sed ‘2c 123456789’ 将a.txt的第2行替换成123456789i \ #插入,在当前行前插入一行或多行。当插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结cat a.txt|sed ‘2i 123456789’ 在a.txt的第2行前插入123456789d #删除指定行cat a.txt |sed '5d' 删除a.txt的第5行s #字符串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字串/新字串/g”(和Vim中的替换格式类似)xxxxxxxxxxawk #一种文本处理语言,是一个强大的文本分析工具,主要用于文本文件的格式化print #打印awk '{print $1,$2}' test.txt # 以默认空格为分隔符,提取test.txt文件中第1、2列内容awk '{print "第一列",$1,"第二列",$2,"第三列",$4}' test.txt # 以默认空格为分隔符,提取第1、2、3列内容,并分别在内容前添加“第一列”“第二列”“第三列”
NF #当前行的字段个数(即当前行被分割成了几列)awk -F ':' '{print $1,$(NF-1),$NF}' test.txt # 以“:”为分隔符显示文件的第一列、倒数第二列、最后一列
$n #指定分割符后,提取第n列的字段$O #整行输出awk '{print}' test.txt 或 awk '{print $0}' test.txt # 输出整行内容awk '{print NR,$0}' test.txt # 给每一行添加行号
FS #指定文本分隔符,默认分隔符为空格NR #当前记录数,行数awk 'NR==5' test.txt # 输出第五行内容 第一个“=”号是修改变量值的意思,第二个“=”号是关系运算符awk 'NR==2,NR==5' test.txt # 输出行号2到5的内容awk 'NR==3,NR==5 {print NR,$0}' test.txt # 显示文件3到5行,且输出行号
FNR #各文件分别计数的行号RS #指定输入时的换行符ORS #输出时用指定符号代替换行符FILENAME #当前文件名ARCC #命令行参数的个数ARCV #数组,保存的是命令行所给定的参数
awk -F '#' '{print $1}' test.txt # 指定以#号为分割符awk -v FS="#" '{print $1}' test.txt # 搭配-v选项修改FS变量为“#”awk -v FS='#' -v OFS='---' '{print $1,$2}' test.txt # 指定以“#”为分隔符,打印第1、2列内容,并指定输出分隔符为“---”输出分隔符与逗号:awk是否存在输出分隔符,主要在于'{print $1,$3}'逗号的区别。添加逗号,默认是空格分隔符,不添加逗号,默认输出没有输出分隔符xxxxxxxxxx标准输入重定向(STDIN,文件描述符为0),默认从键盘输入,也可以从其他命令输入< 输入重定向 wc -l < /etc/passwdxxxxxxxxxx标准输出重定向(STDOUT,文件描述符为1),默认输出到屏幕错误输出重定向(STDERR,文件描述符为2),默认输出到屏幕> 标准覆盖输出重定向>> 标准追加输出重定向2> 错误覆盖输出重定向2>> 错误追加输出重定向2>&1 将标准输出和错误输出重定向到文件&>> 将标准输出和错误输出重定向到文件(追加到文件原内容后面)xxxxxxxxxx管道符 |用于将前面命令的执行结果交给后面的命令继续执行grep "root" /etc/passwd | wc -lxxxxxxxxxx* 表示匹配0个或多个字符? 表示匹配单个字符[0-9] 匹配0-9之间单个数字[a-z] 匹配a-z之间的单个字母[A-Z] 匹配A-Z之间的单个字母[abc] 匹配abc之间单个字母[ABC] 匹配ABC之间单个字母[135] 匹配135之间单个数字xxxxxxxxxx\ 反斜杠,使\后的变量变成单纯的字符串' ' 单引号,转义其中所有的变量为单纯的字符串" " 双引号,保留其中的变量属性,不进行转义处理` ` 反引号,把其中的命令执行后返回结果xxxxxxxxxx$HOME 用户的家目录$SHELL 用户在使用的shell解释器名称$HISTSIZE 输出的历史命令记录条数$MAIL 邮件保存路径$LANG 系统语言和语系名称$RANDOM 生成一个随机数$PS1 bash解释器的名称$PATH 定义解释器搜索用户执行命令的路径$EDITOR 用户默认的文本编辑器
定义变量:PRICE=500 #将500赋值给变量PRICEecho $PRICE #使用echo提取变量PRICE的值xxxxxxxxxx[root@db01 ~]# echo 'PS1="\[\e[1;32m\][\[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh[root@db01 ~]# bash[root@db01 ~]#