Linux 基础入门

目录

1 Linux 基础


1 Linux 基础

1.1 用户类型

root 用户
一个特殊的管理帐户,也被称为超级用户,root已接近完整的系统控制
对系统损害几乎有无限的能力,除非必要,不要登录为 root

普通( 非特权 )用户
权限有限,造成损害的能力比较有限

1.2 什么是shell

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

1.3各种Shell

* sh:Steve Bourne
* bash:Bourne-Again Shell,GPL,CentOS 和 Ubuntu 默认使用
* csh:c shell , C 语言风格
* tcsh
* ksh :Korn Shell, AIX 默认 shell
* zsh: MacOS默认shell

1.3.1 bash shell

GNU Bourne-Again Shell(bash)是GNU计划中重要的工具软件之一,目前也是 Linux标准的shell,与sh兼容

显示当前使用的shell

echo ${SHELL}

显示当前系统使用的所有shell

cat /etc/shells

1.4 设置主机名

#临时生效
hostname NAME


#持久生效,支持CentOS7和Ubuntu18.04以上版本
hostnamectl set-hostname NAME


#例:
[root@centos8 ~]#hostname  bj-yz-k8s-node1-100-10.local




#注意:
#主机名不支持使用下划线,但支持横线,可使用字母,横线或数字组合
#有些软件对主机名有特殊要求

#例:
[root@centos8 ~]#hostnamectl set-hostname centos8.3
[root@centos8 ~]#systemctl restart postfix
Job for postfix.service failed because the control process exited with error
code.
See "systemctl status postfix.service" and "journalctl -xe" for details.

1.5 命令提示符 prompt

登录Linux后,默认的系统命令提示符毫无没有个性,无法明显辨别生产和测试环境,而导致误操作。可以通过修改PS1变量实现个性的提示符格式,避免这种低级错误

[root@centos8 ~]#  管理员账户         
[root@centos8 ~]$  普通用户


#显示提示符格式
[root@centos8 ~]#echo $PS1
\[\e[1;35m\][\u@\h \W]\$\[\e[0m\]


#修改提示符格式范例
[root@centos8 ~]#vim .bashrc

PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\
[\e[0m\]\\$"



# 提示符格式说明:
\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数
# 开机后命令历史数



#例:在CentOS系统实现持久保存提示符格式
[root@centos8 ~]# echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\
[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh
[root@centos8 ~]#cat /etc/profile.d/env.sh
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\
[\e[0m\]\\$"
[root@centos8 ~]# exit
logout
[15:28:40 root@centos8 ~]#




#例:实现Ubuntu系统持久保存提示符格式
[root@ubuntu2004 ~]#echo "PS1='\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\]'" >> .bashrc
[root@ubuntu2004 ~]#tail -1 .bashrc
PS1='\[\e[1;35m\][\u@\h \W]\$\[\e[0m\]'

1.6 执行命令

输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来

内部命令:由shell自带的,而且通过某命令形式提供, ,用户登录后自动加载并常驻内存中
外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行
完毕后从内存中删除

区别指定的命令是内部或外部命令

type COMMAND


#例: 查看是否存在对应内部和外部命令
[root@centos8 ~]#type -a echo
echo is a shell builtin
echo is /usr/bin/echo

 内部命令相关

help 内部命令列表
enable 管理内部命令
enable cmd 启用内部命令
enable –n cmd 禁用内部命令
enable –n 查看所有禁用的内部命令

 执行外部命令

#查看外部命令路径:

which  -a |--skip-alias
whereis

Hash缓存表

系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率
hash 命令常见用法:
          hash 显示hash缓存
          hash -l 显示hash缓存,可作为输入使用
          hash -p path name 将命令全路径path起别名为name
          hash -t name 打印缓存中name的路径
          hash -d name 清除name缓存
          hash -r 清除缓存

1.6.1命令别名

对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行

# 显示当前shell进程所有可用的命令别名
alias


# 定义别名NAME,其相当于执行命令VALUE
alias NAME='VALUE'

# 例: 扫描新加的磁盘
[root@centos8 ~]#alias scandisk='echo - - - >
/sys/class/scsi_host/host0/scan;echo - - - >
/sys/class/scsi_host/host1/scan;echo - - - > /sys/class/scsi_host/host2/scan'


# 例: 持久保存别名,撤消别名:unalias
unalias [-a] name [name ...]
unalias -a  #取消所有别名


# 注意:在命令行中定义的别名,仅对当前shell进程有效
#如果想永久有效,要定义在配置文件中
#仅对当前用户:~/.bashrc
#对所有用户有效:/etc/bashrc
#编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件


source /path/to/config_file
. /path/to/config_file


# 如果别名同原命令同名,如果要执行原命令,可使用
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand  #只适用于外部命令

1.7 常见命令

# 查看系统版本信息, 查看系统架构
     root@ubuntu2004:~# arch
     [root@centos8 ~]# arch
     [root@rhel5 ~]# arch


# 查看内核版本
     [root@ubuntu1804 ~]#uname -r
     [root@centos8 ~]#uname -r


# 查看CPU:
     [root@centos8 ~]# lscpu
     [root@centos8 ~]# cat /proc/cpuinfo

# 查看内存大小
     [root@centos8 ~]#free
     [root@centos8 ~]#cat /proc/meminfo

# 查看硬盘和分区情况
     [root@centos8 ~]#lsblk
     [root@centos8 ~]#cat /proc/partitions


# 查看操作系统发行版本
   
   #CentOS  查看发行版本
     [root@centos8 ~]#cat /etc/redhat-release
     [root@centos8 ~]#lsb_release -a
     [root@centos8 ~]#hostnamectl
   
   #ubuntu查看发行版本
     [root@ubuntu1804 ~]#cat /etc/os-release
     [root@ubuntu1804 ~]#cat /etc/issue
     [root@ubuntu1804 ~]#lsb_release -a
     

# 查看 OS 版本

[root@centos8 ~]#lsb_release -is
CentOS
[root@centos8 ~]#lsb_release -cs
Core
[root@centos8 ~]#lsb_release -rs
8.2.2004
[root@centos7 ~]#lsb_release -is
CentOS
[root@centos7 ~]#lsb_release -cs
Core
[root@centos7 ~]#lsb_release -rs
7.9.2009
[root@centos6 ~]#lsb_release -is
CentOS
[root@centos6 ~]#lsb_release -cs
Final
[root@centos6 ~]#lsb_release -rs
6.10
root@ubuntu2004:~# lsb_release -is
Ubuntu
root@ubuntu2004:~# lsb_release -cs
focal
root@ubuntu2004:~# lsb_release -rs
20.04

1.8 日期和时间

Linux的两种时钟
系统时钟:由Linux内核通过CPU的工作频率进行的
硬件时钟:主板

# date 显示和设置系统时间
  # 例:
       [root@centos8 ~]#date +%s
       1584689051
       [root@centos8 ~]#date -d @`date +%s`
       Fri Mar 20 15:24:18 CST 2020
       [root@centos8 ~]#date -d @1584689051
       Fri Mar 20 15:24:11 CST 2020
       [root@centos8 ~]#date -d @1584689051 +%F_%T
       2020-03-20_15:24:11
       

       [root@ubuntu ~]#date -d "2020-02-02" +%s
       1580572800


# clock,hwclock: 显示硬件时钟
  -s, --hctosys #以硬件时钟为准,校正系统时钟
  -w, --systohc #以系统时钟为准,校正硬件时钟

# 例:[root@centos8 ~]#ll /usr/sbin/clock
      lrwxrwxrwx. 1 root root 7 Apr 24  2020 /usr/sbin/clock -> hwclock



# 时区
  /etc/localtime
  
  # 例:
[root@centos8 ~]#timedatectl list-timezones
[root@centos8 ~]#timedatectl set-timezone Asia/Shanghai
[root@centos8 ~]#timedatectl status
       Local time: Mon 2020-07-27 17:20:56 CST
     Universal time: Mon 2020-07-27 09:20:56 UTC
        RTC time: Mon 2020-07-27 09:20:56
       Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
      NTP service: active
    RTC in local TZ: no
[root@centos8 ~]#ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Dec 11 11:19 /etc/localtime -> 
../usr/share/zoneinfo/Asia/Shanghai

root@ubuntu1804:~# cat /etc/timezone
Asia/Shanghai




# 显示日历: cal -y
#例
[16:47:36 root@centos8 ~]#cal 9 1752
 September 1752 
Su Mo Tu We Th Fr Sa
   1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30 

1.9 关机和重启

关机:
halt
poweroff
重启:
reboot
-f: 强制,不调用shutdown
-p: 切断电源
ctrl+alt+delete 三个键

# 关机或重启:shutdown
shutdown [OPTION]... [TIME] [MESSAGE]
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7)
now: 立刻,相当于+0
+#: 相对时间表示法,几分钟之后;例如 +3
hh:mm: 绝对时间表示,指明具体时间

2.0用户登录信息查看命令

whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作

2.1会话管理

2.1.1  screen

利用screen 可以实现会话管理,如:新建会话,共享会话等
注意:CentOS7 来自于base源,CentOS8 来自于epel源

# 例:
   安装 screen

#CentOS7 安装screen
[root@centos7 ~]#yum -y install screen

#CentOS8 安装screen
[root@centos8 ~]#dnf -y install epel-release
[root@centos8 ~]#dnf -y install screen

#screen命令常见用法:
#创建新screen会话
screen –S [SESSION]

#加入screen会话
screen –x [SESSION]

# 退出并关闭screen会话
  exit

# 剥离当前screen会话
  Ctrl+a,d

# 显示所有已经打开的screen会话
  screen -ls

# 恢复某screen会话
  screen -r [SESSION]

2.1.2  tmux
Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,功能如下
它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
它可以让新窗口"接入"已经存在的会话。
它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
它还支持窗口任意的垂直和水平拆分

# 安装:
    yum install tmux
    
# 启动与退出
    [root@centos8 ~]#tmux
    [root@centos8 ~]#exit
    logout




# mux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是 Ctrl+b ,即先按下
Ctrl+b ,快捷键才会生效。帮助命令的快捷键是 Ctrl+b ? 然后,按下 q 键,就可以退出帮助

#新建会话
#第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0
#号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定
#名称的会话。
    tmux new -s <session-name>


#tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话
    tmux ls
    tmux list-session


#分离会话
#在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。
    tmux detach


#接入会话
tmux attach 命令用于重新接入某个已存在的会话。
    tmux attach -t <session-name>


#范例:
    tmux attach -t 0


#杀死会话,tmux kill-session命令用于杀死某个会话。
    tmux kill-session -t <session-name>


#切换会话,tmux switch命令用于切换会话
    tmux switch -t <session-name>


#可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
#上下分窗格
    tmux split-window
    ctrl+b,"

#左右分窗格
    tmux split-window -h
    ctrl+b,%

#窗格快捷键
    Ctrl+b %:划分左右两个窗格
    Ctrl+b ":划分上下两个窗格
    Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换
到下方窗格,就按方向键↓
    Ctrl+b ;:光标切换到上一个窗格
    Ctrl+b o:光标切换到下一个窗格。
    Ctrl+b {:当前窗格左移
    Ctrl+b }:当前窗格右移
    Ctrl+b Ctrl+o:当前窗格上移
    Ctrl+b Alt+o:当前窗格下移
    Ctrl+b x:关闭当前窗格
    Ctrl+b !:将当前窗格拆分为一个独立窗口
    Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小
    Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小
    Ctrl+b q:显示窗格编号


#窗口管理
#除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口

#新建窗口
tmux new-window命令用来创建新窗口
    tmux new-window

#新建一个指定名称的窗口
    tmux new-window -n <window-name>

#切换窗口
tmux select-window命令用来切换窗口
#切换到指定编号的窗口
    tmux select-window -t <window-number>

#切换到指定名称的窗口
    tmux select-window -t <window-name>

#窗口快捷键
    Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
    Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
    Ctrl+b n:切换到下一个窗口。
    Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号
    Ctrl+b w:从列表中选择窗口
    Ctrl+b ,:窗口重命名

#列出所有快捷键,及其对应的 Tmux 命令
    tmux list-keys

#列出所有 Tmux 命令及其参数
    tmux list-commands



2.2 输出信息echo

echo的基本用法:

echo 命令可以将后面跟的字符进行输出
功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号

echo [-neE][字符串]


#选项:
-E (默认)不支持 \ 解释功能
-n 不自动换行
-e 启用 \ 字符的解释功能


#显示变量
echo "$VAR_NAME”  #用变量值替换,弱引用
echo '$VAR_NAME’  #变量不会替换,强引用


#启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
    \a 发出警告声
    \b 退格键
    \c 最后不加上换行符号
    \e escape,相当于\033
    \n 换行且光标移至行首
    \r 回车,即光标移至行首,但不换行
    \t 插入tab
    \\ 插入\字符
    \0nnn 插入nnn(八进制)所代表的ASCII字符
    \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)


#例:
    [root@centos8 ~]#echo -e 'a\x0Ab'
    a
    b
    [root@centos8 ~]#echo -e '\033[43;31;1;5xxxxx\e[0m'
    xxxxx
    [root@centos8 ~]#echo -e '\x57\x41\x4E\x47'
    WANG
    [root@centos8 ~]#echo \$PATH
    $PATH
    [root@centos8 ~]#echo \
    [root@centos8 ~]#echo \\
    \
    [root@centos8 ~]#echo \\\
    >
    [root@centos8 ~]#echo \\\\
    \\
    [root@centos8 ~]#echo "$PATH"
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@centos8 ~]#echo '$PATH'
    $PATH

2.3 系统语言环境

默认系统为英文环境,可以修改为中文环境,从而查看帮助或提示可以变为中文

#例:临时修改LANG变量实现中文语言提示
[root@centos7 ~]#echo $LANG
en_US.UTF-8
[root@centos7 ~]#liang
-bash: liang: command not found
[root@centos7 ~]#LANG=zh_CN.UTF-8
[root@centos7 ~]#echo $LANG
zh_CN.UTF-8
[root@centos7 ~]#liang
-bash: liang: 未找到命令


#例: Rocky 修改语言环境为中文
[root@rocky8 ~]#localectl status
 System Locale: LANG=en_US.UTF-8
   VC Keymap: us
  X11 Layout: us
[root@rocky8 ~]#echo $LANG
en_US.UTF-8
[root@rocky8 ~]#localectl list-locales
C.utf8
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE.utf8
en_IE@euro
en_IL
en_IN
en_NG
en_NZ
en_NZ.utf8
en_PH
en_PH.utf8
en_SC.utf8
en_SG
en_SG.utf8
en_US
en_US.iso885915
en_US.utf8
en_ZA
en_ZA.utf8
en_ZM
en_ZW
en_ZW.utf8
[root@rocky8 ~]#yum list lang*
Last metadata expiration check: 1:00:42 ago on Sun 19 Sep 2021 10:34:15 AM CST.
Installed Packages
langpacks-en.noarch      1.0-12.el8                    
   @AppStream
Available Packages
......
langpacks-vi.noarch      1.0-12.el8    AppStream
langpacks-xh.noarch      1.0-12.el8    AppStream
langpacks-zh_CN.noarch    1.0-12.el8    AppStream
langpacks-zh_TW.noarch    1.0-12.el8    AppStream
langpacks-zu.noarch      1.0-12.el8    AppStream
langtable.noarch       0.0.51-4.el8   AppStream
[root@rocky8 ~]#yum -y install langpacks-zh_CN.noarch
[root@rocky8 ~]#localectl list-locales
C.utf8
en_AG
en_AU
.......
zh_CN
zh_CN.gb18030
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.utf8
zh_SG



#例: Ubuntu18,04 修改语言环境为中文
[root@ubuntu1804 ~]#localectl status
 System Locale: LANG=en_HK.UTF-8
         LANGUAGE=en_HK:en
   VC Keymap: n/a
  X11 Layout: us
   X11 Model: pc105
[root@ubuntu1804 ~]#apt install language-pack-zh-hans -y
[root@ubuntu1804 test]#localectl list-locales
C.UTF-8
en_AG
......
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
zh_CN.utf8
zh_SG.utf8
[root@ubuntu1804 ~]#localectl set-locale LANG=zh_CN.utf8
[root@ubuntu1804 ~]#exit
[root@ubuntu1804 ~]#localectl status
 System Locale: LANG=zh_CN.utf8
   VC Keymap: n/a
  X11 Layout: us
   X11 Model: pc105
[root@ubuntu1804 ~]#echo $LANG
zh_CN.utf8

2.4命令行扩展和被括起来的集合

 命令行扩展:`` 和 $(),把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令 $(COMMAND)==`COMMAND`

#例:比较 “ ” ,‘ ’, ``三者区别
[root@centos8 ~]#echo "echo $HOSTNAME"
echo centos8.localdomain
[root@centos8 ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@centos8 ~]#echo `echo $HOSTNAME`
centos8.localdomain
#结论:
#单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻"
#双引号:弱引用,不能识别命令,可以识别变量,"半傻不精"
#反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内
容当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明"


#例:
[09:18:04 root@centos8 data]#echo "This system's name is $(hostname)"
This system's name is centos8.liang.org
[09:18:55 root@centos8 data]#echo "I am `whoami`"
I am root
[09:15:37 root@centos8 data]#touch $(date +%F).log
[09:16:29 root@centos8 data]#ls
2019-12-13.log
[09:16:31 root@centos8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 13 09:16 2019-12-13.log
[09:16:34 root@centos8 data]#touch `date +%F`.txt
[09:17:14 root@centos8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 13 09:16 2019-12-13.log
-rw-r--r--. 1 root root 0 Dec 13 09:17 2019-12-13.txt
[09:17:15 root@centos8 data]#touch `hostname`-`date +%F`.log
[09:18:02 root@centos8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Dec 13 09:16 2019-12-13.log
-rw-r--r--. 1 root root 0 Dec 13 09:17 2019-12-13.txt
-rw-r--r--. 1 root root 0 Dec 13 09:18 centos8.liang.org-2019-12-13.log
[root@centos8 ~]#touch `date +%F_%H-%M-%S`.log
[root@centos8 ~]#touch `date -d '-1 day' +%F`.log



#例:$( ) 和 ``
[root@centos8 ~]#ll `echo `date +%F`.txt`
-bash: .txt: command not found
ls: cannot access 'date': No such file or directory
ls: cannot access '+%F': No such file or directory
[root@centos8 ~]#ll $(echo $(date +%F).txt)
-rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt
[root@centos8 ~]#ll `echo $(date +%F).txt`
-rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt
[root@centos8 ~]#ll $(echo `date +%F`.txt)
-rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt


2.5括号扩展:{ }

{} 可以实现打印重复字符串的简化形式

{元素1,元素2,元素3}

{元素1..元素2}

#例:
echo file{1,3,5} 结果为:file1 file3 file5
rm -f file{1,3,5}
echo {1..10}
echo {a..z}
echo {1..10..2}
echo {000..20..2}


#例:
[root@centos8 ~]#echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
[root@centos8 ~]#echo {a..z..2}
a c e g i k m o q s u w y
[root@centos8 ~]#echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i
j k l m n o p q r s t u v w x y z
[root@centos8 ~]#echo {a..z} {A..Z}
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N
O P Q R S T U V W X Y Z
[root@centos8 ~]#echo {a..z}{1..3}
a1 a2 a3 b1 b2 b3 c1 c2 c3 d1 d2 d3 e1 e2 e3 f1 f2 f3 g1 g2 g3 h1 h2 h3 i1 i2 i3
j1 j2 j3 k1 k2 k3 l1 l2 l3 m1 m2 m3 n1 n2 n3 o1 o2 o3 p1 p2 p3 q1 q2 q3 r1 r2 r3
s1 s2 s3 t1 t2 t3 u1 u2 u3 v1 v2 v3 w1 w2 w3 x1 x2 x3 y1 y2 y3 z1 z2 z3


#例: 关闭和启用{}的扩展功能
[root@centos8 ~]#echo $-
himBHs
[root@centos8 ~]#echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@centos8 ~]#set +B
[root@centos8 ~]#echo $-
himHs
[root@centos8 ~]#echo {1..10}
{1..10}
[root@centos8 ~]#set -B
[root@centos8 ~]#echo $-
himBHs
[root@centos8 ~]#echo {1..10}
1 2 3 4 5 6 7 8 9 10

2.6 命令行历史

当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是 ~/.bash_history
登录shell时,会读取命令历史文件中记录下的命令加载到内存中
登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加”至命令历史
文件中
利用命令历史。可以用它来重复执行命令,提高输入效率
命令:history

#命令:history
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]


#常用选项:
-c: 清空命令历史
-d offset: 删除历史中指定的第offset个命令
n: 显示最近的n条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 展开历史参数成多行,但不存在历史列表中
-s: 展开历史参数成一行,附加在历史列表后


#命令历史相关环境变量
HISTSIZE:命令历史记录的条数
HISTFILE:指定历史文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T `whoami` "  显示时间和用户
HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史
HISTCONTROL:控制命令历史的记录方式
ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth  相当于ignoredups, ignorespace的组合
erasedups   删除重复命令



#持久保存变量
#以上变量可以 export 变量名="值" 形式存放在 /etc/profile 或 ~/.bash_profile
#例:
[root@centos8 ~]#cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T "
[root@centos8 ~]#history
  1  2019-12-13 08:39:05 ls /data
  2  2019-12-13 08:39:05 date
  3  2019-12-13 08:39:05 vie0
  4  2019-12-13 08:39:05 nano .bash_profile
  5  2019-12-13 08:39:05 exit



# 调用命令行历史
#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入!-1 并回车执行
按 Ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!string 重复前一个以“string”开头的命令
!?string 重复前一个包含string的命令
!string:p 仅打印命令历史,而不执行
!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容
!*:p 打印输出 !*(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个string
^string1^string2 将上一条命令中的第一个string1替换为string2
!:gs/string1/string2 将上一条命令中所有的string1都替换为 string2
使用up(向上)和down(向下)键来上下浏览从前输入的命令
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出
#要重新调用前一个命令中最后一个参数
!$ 表示前一个命令中最后一个参数
Esc, .   点击Esc键后松开,然后点击 . 键
Alt+ .   按住Alt键的同时点击 . 键
command !^  利用上一个命令的第一个参数做command的参数
command !$  利用上一个命令的最后一个参数做command的参数
command !*  利用上一个命令的全部参数做command的参数
command !:n 利用上一个命令的第n个参数做command的参数
command !n:^ 调用第n条命令的第一个参数
command !n:$ 调用第n条命令的最后一个参数
command !n:m 调用第n条命令的第m个参数
command !n:* 调用第n条命令的所有参数
command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一个参数
command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的第n个参数
command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数


2.7 bash的快捷键

Ctrl + l 清屏,相当于clear命令
Ctrl + o 执行当前命令,并重新显示本命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出,解锁
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Ctrl + xx 光标在命令行首和光标之间移动
ctrl+ > 光标向右移动一个单词尾,相当于 Alt + f
ctrl+ <   光标向左移动一个单词首,相当于 Alt + b
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r   删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Alt + Backspace 删除左边单词
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + # 提示输入指定字符后,重复显示该字符#次

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值