Linux基础_1

news2025/1/15 10:58:12

目录

一、用户登录

1、root用户

2、普通(非特权)用户

二、终端terminal

1、终端类型

2、查看当前的终端设备

三、交互式接口

1、概念:启动终端后,在终端设备附加一个交互式应用程序

2、类型

3、什么是Shell

4、各种Shell

5、bash shell

四、执行命令

1、执行命令过程

2、Shell中可执行的2种命令

3、命令别名

4、命令格式

五、简单命令

1.1、更改主机名(临时修改)

1.2、更改主机名(永久修改)

2、命令提示符

3.1、查看硬件信息_CPU

3.2、查看硬件信息_内存大小

3.3、查看硬件信息_硬盘和分区情况

4.1、查看系统版本信息

4.2、查看操作系统发行版本

5.1、时间与修改

5.2、时区与修改

5.3日历

6、关机和重启

7、用户登录信息查看命令

8、文本编辑

9、会话管理

9.1screen

9.2tmux

10、输出信息echo

六、字符集和编码

1、ASCII码

2、Unicode

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

1、反引号` ` 和 $() (相同功能)

2、括号拓展:{ }

八、tab键补全

作用:tab键可以实现命令和路径等的补全,提高输入效率,避免出错

1、命令补全

2、路径补全

3、双击tab键

九、命令行历史

过程:

命令历史相关环境变量:

持久保存变量:

调用命令行历史:

bash的快捷键:


一、用户登录

1、root用户

特殊的管理账户,也称为超级用户,已经具有接近完整的系统控制能力

对系统损害几乎具有无限的能力,非必要不登陆root

2、普通(非特权)用户

权限有限

造成损害的能力有限


二、终端terminal

1、终端类型

①控制台终端:/dev/console

②串行终端:/dev/ttyS#

③虚拟终端:tty:teletypewriters,/dev/tty#,tty可有n个,Ctrl+Alt+F#

④图形终端:startx,xwindows

        CentOS 6:Ctrl+Alt+F7

        CentOS 7:在哪个终端启动,即在哪个虚拟终端

⑤伪终端:pty:pseudo-tty,/dev/pts/#        如:SSH远程连接

⑥设备终端:键盘+鼠标+显示器

如Ubuntu登陆后,这就是一个终端,在以前称为物理终端

 2、查看当前的终端设备

tty

tty命令可以查看当前所在终端 

接下来我们测试我们的CentOS6、7、8(下面简称C6、C7、C8)以及Ubuntu(ubt)的终端

CentOS 6:

CentOS 7:

CentOS 8:

 Ubuntu:


 同时,我们查看一下我们机器的地址,使用hostname -I命令

hostname -I

C6:

 C7:

 C8:

 Ubuntu:

即按照我们设置的网络地址从10.0.0.201-10.0.0.204的四台机子


这样以后就可以远程连接我们的服务器

①接下来我使用MobaXterm远程连接我的C8,网络地址为10.0.0.201

点击OK,输入密码后即可连接成功

 我们在内部输入tty和hostname -I命令

②接下来我使用Xshell远程连接我的C8,网络地址为10.0.0.201

点击左上角的添加,然后输入名称和主机的地址

 点击左侧的用户身份验证,输入用户名和密码,点击确定即可

同样的,我们输入tty和hostname-I命令

可见是pts/2

此时就相当于我们通过2个终端窗口连接到同一台电脑上,而两个终端互不影响


同时,如果我们想要查看有几个用户,即有几台终端连接,我们可以使用命令who

who

 随便一个终端里输入后,可以看到

第一个是我在VMware里打开的C8(图形界面i),第二个pst/1是MobaXterm远程连接的C8,第三个pst/2是Xshell远程连接的C8(2个字符界面


同时,我们还可以使用free -h(单位为G)/free命令来查看系统所消耗内存数

C8:

 Ubt:更少,因为基本属于最小安装没有图形


在上面基础上,我们还可以将图形模式关闭,即将图形模式转换成字符模式

先使用runlevel命令查看当前模式

runlevel

显示 N 5,即当前使用5模式,即图形模式,N代表上一次的模式(上次没有模式)

 同时使用free -h查看系统所消耗内存数,大概1.0G

接下来,使用init 3命令来将模式改为字符模式

init 3

 再次使用runlevel 查看模式与free -h查看内存数

显示5 3,即上次使用5模式(图形模式),当前是3模式(字符模式)

内存数从1.0G降到370M,缩减三分之二

三、交互式接口

1、概念:启动终端后,在终端设备附加一个交互式应用程序

2、类型

①GUI:Graphic User Interface图形终端

X protocol协议、window manager、desktop

        Desktop分为:GNOME(C、图形库gtk)、KDE(C++、图形库qt)、XFCE(轻量级桌面)

②CLI:Command Line Interface命令行接口

          Shell

3、什么是Shell

Shell(壳)是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行

Shell是一种高级程序设计语言,也被称为Linux的命令解释器,即将我们输入的英文字符转化成二进制供内核理解并执行操作

4、各种Shell

sh:Steve Bourne

bash:Bourne-Again Shell、GPL、CentOS、Ubuntu默认使用

csh:c Shell、C语言风格

tcsh

ksh:Korn Shell、AIX默认Shell

zsh:MacOS默认Shell


而我们可以使用echo $SHELL命令来查看我们当前是使用系统的Shell

echo $SHELL

C8:

Ubuntu:


同时,我们可以使用cat /etc/shells命令来查看系统支持的Shell类型 

cat /etc/shells

 Ubuntu:

C8:


 同时我们知道,windows里有任务管理器

里面显示了我们后台运行的各种服务

而在Linux里,我们可以使用ps aux命令来查看系统后台运行的所有程序

ps aux

Ubt:

 可以看到bash服务

C8:

 

 5、bash shell

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


四、执行命令

1、执行命令过程

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

shell本身也是一个程序,(当用户登录时,它就自动加载到内存中运行)它集成了很多小的工具(即内部命令,加载到内存中)。放在bash里

因此不属于shell的就是外部命令,存放于磁盘上,运行时需要先去磁盘上找到外部命令

我们可以使用type命令来查看我们输入的命令是内部命令或外部命令

type +命令名

 而上面这种显示出路径的是外部命令

而下面这种显示shell不显示路径的是内部命令

而有些是特殊的,比如ls显示的是别名


 而不是随便一个文件夹都可以存放外部命令的,我们可以使用echo $PATH命令来查看存放外部命令的文件夹

echo $PATH

 以:为间隔分出5个存放外部命令的文件夹

当我们输入一个命令,如果不是内部命令,则按照这个顺序依次寻找外部命令,找到则加载到内存中运行,否则报错


作为对比,内部命令直接就存放在内存中,因此优先执行,效率更高

因此,如果我们每次执行外部命令时系统都从磁盘里寻找,则效率很低 

所以,Linux中有一个逻辑:记录上次运行的外部命令的路径到内存(即hash哈希),因此再次执行时不需要再去磁盘中寻找,直接去记录的路径寻找

同时,可以使用hash命令来查看执行过的外部命令的路径与执行次数

hash

再次执行外部命令时,上面次数会+1


同时,我们可以使用enable / help 来查看所有的内部命令

enable / help

 注意第一个命令 . 点,功能同source命令,使我们写入的配置文件即刻生效

. / source

即我们修改字体颜色时,我们如果重新登陆/注销/重启 太麻烦,因此我们写上.或source +刚才修改文件的代码,就可以使系统重新读取文件内容使其生效

2、Shell中可执行的2种命令

①内部命令:由shell自带的,而且通过某命令形式提供

②外部命令:在文件系统路径下有对应的可执行程序文件

因为内部命令优先级高于外部命令,因此正常情况下,若有和内部命令同名的外部命令,则外部命令一般不会运行,因为找到内部命令就不再去磁盘寻找命令

echo就有同名的外部命令

我们可以使用type -a echo命令来查看echo同名的外部命令

type -a echo

当然,也不是说外部命令一定不会执行,方法之一是我们将内部命令禁用

使用enable -n echo命令即可禁用echo命令(临时禁用)

enable -n echo

禁用后,不仅type命令不显示内部命令,enable命令也不显示echo内部命令了

help命令里echo前带有个*号


 同时,我们使用enable echo命令可以恢复echo这个内部命令

 

 由于enable也是个内部命令,所以也可以被临时禁用

不过由于是临时禁用,我们注销后就恢复了


而对于外部命令,有which命令和whereis命令来查看外部命令的路径

which +外部命令
whereis +外部命令

如果是内部命令,which会显示没有

而whereis不仅会显示命令的文件路径,还会显示命令的帮助文件的路径


对于hash命令:

hash         显示hash缓存
hash -I      显示hash缓存,可作为输入使用
hash -p path name 将命令全路径path起别名为name
hash -t name 打印缓存中name的路径
hash -d name 清楚名为name的缓存
hash -r      清空缓存

3、命令别名

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

我们可以使用alias命令来给某条命令或地址起别名

alias +命令/地址

如现在我们有这么个地址,我们要访问的话,要写很长的地址

接下来,我们把后面的地址/etc/sysconfig/network-scripts/起别名为cdnetwork

首先要确定cdnetwork是不是内部或外部命令

 这样就实现了将那个地址命名为别名,以后就可以通过别名访问这个地址


如果我们强行把一个地址起别名与一个内部命令同名会怎么样?

如图,enable是内部命令,我们起别名后,再次使用内部命令则系统运行的是我们起的别名

这意味着,系统命令的优先级顺序是:

别名 > 内部命令 > 外部命令 > 找不到

同时,我们这样起的别名不是永久的,当我们注销后就恢复,因此,如果想永久生效,则需要修改文件

首先使用ls -a命令显示出各个用户下的文件(只ls不行,因为文件是隐藏的)

ls -a

 别名的配置文件也就是这个 .bashrc文件

使用nano命令进入文本编辑

在这里就可以添加别名,并永久生效

我们使用./source使其生效

然后直接使用别名cdnetwork

已经永久生效

同时,我们可以使用alias命令查看所有的别名

alias

而如果想取消别名,可以使用unalias命令/unalias -a取消全部别名(都是临时)

unalias +别名
unalias -a

已经 取消 

注意:

①对当前用户生效:~/.bashrc

②对所有用户生效:/etc/bashrc

③如果别名与原某个命令重名,而还想要运行原命令:

\别名
'别名'
"别名“
command 别名
/path/command (只适用于外部命令)

4、命令格式

 各种命令的格式:

command [options...] [arguments...]

command:命令名称

options:选项 用于启用或关闭命令某个或某些功能

分为3种

①短选项:UNIX风格,如 -c、-l、-h等

ls -a
ls -l

②长选项:GNU风格,如 --word、--all、--human等

ls --all

③BSD风格:仅一个字母,如 a 

ps a

argument:参数 命令的作用对象,如文件名、用户名等

有些命令支持①,有些支持②,有些支持③,有些支持①②,有些支持①②③

完整的一个命令如:查看root的uid

id -u root

注意:①多个选项以及多参数和命令之间使用空白字符分隔

如:

ls -a -l
ls -l -a
ls -la
ls -al
ls --all -l

作用效果完全相同,不过不是所有命令都支持前后顺序随意

②取消命,强行退出:Ctrl+C  终止命令,正常退出:Ctrl+D

③批量执行:多个命令用 ; 分号分开

④一个命令可以用\分成多行

不过一般只有很长的命令才这么干


五、简单命令

 1.1、更改主机名(临时修改)

可以使用 hostname +主机名 来更改主机名

hostname +主机名

不过Ubt里正常我们使用的自己账户,没有root权限,没法更改主机名。

 这里我们使用sudo -i命令来切换到root用户,并输入密码

sudo -i

 

这样就切换到了root权限的用户,我们再次使用hostname命令更改主机名,并使用hostname命令查看主机名

注意:这样修改的主机名不是永久生效(存储在内存中),当系统重启后就失效

我们可以使用reboot或者init 6命令来重启系统,init 0是关机命令

reboot
init 6

 正在重启

再次使用hostname命令查看主机名

没有变化


1.2、更改主机名(永久修改)

可以使用 hostnamectl set-hostname +主机名 来更改主机名

hostnamectl set-hostname +主机名

 重启后再次查看主机名

 已经更改


注意:

①主机名不要用下划线_ 可以用-.

②默认情况下,root管理员权限后缀是 # 井号,而普通用户是 $ 符

 同时,我们可以修改这个提示符

先使用echo $PS1命令来查看当前格式,再使用PS1=命令修改提示符

echo $PS1
PS1=

C8: 

 可见已经修改成NANA,不过这只是临时修改,原理同上面修改主机名

重启/重新登陆后恢复


因此,我们可以使用一些命令来修改我们的文字,以区分不同的系统

如在CentOS系列系统中使用:PS1="\[\e[1;33m\][\u@\h \W]\\$\[\e[0m\]"

而命令的不同,显示的效果也有不同

 不过,这样重启/注销后重新登录仍然会失效

因此我们写入到文件中

echo 'PS1="\[\e[1;38m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh

这样就永久修改颜色,并加上时间,重启也存在

2、命令提示符

这个界面就是命令提示符

 Windows也有:不过显示的是文件夹


3.1、查看硬件信息_CPU

lscpu 或 cat /proc/cpuinfo 命令可以查看cpu信息

lscpu 
cat /proc/cpuinfo (核心单个信息显示)

3.2、查看硬件信息_内存大小

cat /proc/meminfo 命令可以查看内存大小

cat /proc/meminfo

3.3、查看硬件信息_硬盘和分区情况

lsblk 命令可以查看硬盘

lsblk

而使用cat /proc/partitions命令可以查看分区情况


注意:proc/ 文件夹中的数据存在内存里,不存在硬盘上,因此我们使用ls -l命令查看硬盘上proc/meninfo或cpuinfo文件夹大小都会是0

4.1、查看系统版本信息

使用uname -r命令可以查看系统版本信息

uname -r
C6:2.6.32-754.el6.x86_64
C7:3.10.0-1160.71.1.el7.x86_64
C8:4.18.0-348.el8.x86_64
Ubt:4.15.0-212-generic

4.2、查看操作系统发行版本

对于我们的CentOS系列系统(红帽公司),可以使用cat /etc/redhat-release命令来查看系统发行版本

cat /etc/redhat-release

各个版本:

C6:CentOS release 6.10 (Final)
C7:CentOS Linux release 7.9.2009 (Core)
C8:CentOS Linux release 8.5.2111

而Ubt不是红帽公司的,因此不能用这个命令,而是使用cat /etc/os-release命令来查看,有些系统也可以使用,上面CentOS就可以(C6不行)

cat /etc/os-release

Ubt:

 C8:

 5.1、时间与修改

Linux有2种时间:

①系统时间:由Linux内核通过CPU的工作频率进行的

②硬件时间:主板上记录的时间

可以使用date命令来查看系统时间

date

使用clock或hwclock命令来查看硬件时间

clock
hwclock


当然,我们可以修改时间,使用 date +月日小时分年.秒 的格式修改时间

date +月日小时分年.秒

不过由于是保存在内存里的系统时间,重启后时间会恢复,而硬件时间不会


同时,这里有2个命令:

①clock -s 或 clock -hctosys :以硬件时间为准,校正系统时间

②clock -w 或 clock -systohc:以系统时间为准,校正硬件时间


5.2、时区与修改

使用ll /etc/localtime命令来查看当前时区

ll /etc/localtime

可以查看就可以修改时区 

使用timedatectl list-timezones命令来查看所有的时区

然后使用timedatectl set-timezone +时区名 命令修改时区(支持C7及以上)

 再使用date 与 ll /etc/localtime命令来查看时区

 已经修改

如果想改回,可以直接使用timedatectl set-timezone +时区名 命令修改时区

 5.3日历

cal         显示当月日历
cal -y      显示当年月历
cal ye      显示ye年的时间
cal mon ye  显示ye年mon月的日历

6、关机和重启

关机命令:

halt
poweroff

重启命令:

reboot
-f    强制关机,不调用shutdown
-p    切断电源

关机或重启:

shutdown [OPTION]... [TIME] [MESSAGE]

OPTION/选项:

① -r:reboot

② -h:halt

③ -c:cancel

TIME/时间:

①无指定,默认相当于+1(C7)

②now:立刻,相当于+0

③+#:相对时间表示法,几分钟后,如+3

④hh:mm:绝对是就表示法,指明一个具体的关闭的时间

 测试:

十分钟后关机

 22:30关机

7、用户登录信息查看命令

whoami  显示当前登录有效用户
who     系统当前所有的登录
w       系统当前所有的用户登录及其所进行的操作 

测试:

8、文本编辑

目前先认识这两个

nano    可以实现文本的编辑
gedit   图形工具

9、会话管理

命令行的典型使用方式:打开一个终端窗口,在里面输入命令,这样用户与计算机开始交互,这称为一次会话(session)

会话有一个重要特点:窗口与其启动的进程连接,打开窗口,会话开始;关闭窗口,会话结束,里面的程序也会终止。

而我们使用终端复用器就可以将会话与窗口彻底分离,使窗口关闭时,会话仍在运行,可以进行下一次连接

9.1screen

使用dnf/yum -y install screen命令可以安装screen

dnf/yum -y install screen

打开screen

 

我输入yes,他会一直输出y下去

 

关闭窗口

 打开新的窗口查看

我们使用w命令是看不到的 

我们使用ps aux命令查看后台运行的所有程序

仍在运行 ,这就实现了终端关闭但程序并不结束


同时,使用screen可以实现远程协助:

首先2台设备要连接同一个终端

然后在需要被连接的一方输入screen -S [name];name可以随便定义

 回车后进入

这时我们在其他设备输入screen -ls命令即可查看所有的screens

然后在另一台设备输入screen -x [name];与上面相同的name

 然后2台设备就实现了同步

 如果要主动退出远程协助,可以先同时按Ctrl+a,再按d键

 这样就退出了,不过此时,被帮助一方仍在screen里,仍然可以被其他人加入

因此,如果被帮助一方不再需要帮助,可以主动退出,输入exit退出screen

 screen常用命令:

screen -S [NAME]    创建新screen会话
screen -x [NAME]    加入screen会话
exit                退出并关闭screen会话
Ctrl+a,d            退出当前screen会话
screen -ls          显示所有已打开的screen会话
screen -r [NAME]    恢复某screen会话

9.2tmux

类似于screen,但更强,功能更多

功能:

①允许在单个窗口中,同时访问多个会话。便于同时运行多个命令行程序

②可以使新窗口连接上已经存在的会话

③允许每个会话有多个连接窗口,因此可以多人实时共享会话

④支持窗口任意的垂直和水平拆分


常用命令 :

tmux    启动tmux
exit    退出tmux
tmux new -s [NAME]      新建名为NAME的会话
tmux new-window         创建新窗口
tmux new-window -n [NAME] 新建名为NAME的窗口
tmux ls/list-session    查看当前所有的tmux会话
tmux detach 或 ctrl b,d 将当前会话与窗口分离
tmux attach -t [NAME]   接入某个已存在的会话
tmux kill-session -t [NAME]      结束某个会话
tmux switch             切换会话
tmux split-window 或 ctrl b,"    将窗口上下分开
tmux split-window -h 或 ctrl b,% 将窗口左右分开 
tmux select-window -t [NUMBER]   切换到指定编号的窗口
tmux select-window -t [NAME]     切换到指定名称的窗口

tmux list-keys    显示所有的快捷键,及其对应的Tmux命令
tmux list-commands 列出所有的Tmux命令及其参数

同时,窗口有很多快捷键

Ctrl b,%    划分左右两个窗格
Ctrl b,"    划分上下两个窗格
Ctrl b,方向键上下左右    光标移动到其他窗格
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 方向键上下左右    按箭头方向调整窗格大小
Ctrl b,q    显示窗格编号
Ctrl b,c    创建一个新窗口,状态栏上会显示多个窗口的信息
Ctrl b,p    切换到上一个窗口
Ctrl b,n    切换到下一个窗口
Ctrl b,w    从列表选择窗口
Ctrl b,编号  切换到指定编号的窗口
Ctrl b,,    窗口重命名

10、输出信息echo

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

echo -[OPTIONS][string]

OPTIONS:

① -E:默认,不支持\解释功能

② -n:不自动换行

③ -e:启用\字符解释功能,即下面的\命令

显示变量:$表示后面的是变量名

echo "$VAR_NAME"    // 用变量值替换,弱引用
echo '$VAR_NAME'    // 变量不会替换,强引用

单引号强引用,将所有在其中的字符作为字符串输出

 双引号弱引用,可以识别里面的变量:将$HOSTNAME识别为变量输出

而单引号是直接作为字符串输出

-e 启用命令选项,若字符串出现以下命令,则特别加以处理,不会将其当成一般文字输出

\a    发出警告声音
\b    退格键
\c    最后不加上换行符
\e escape 相当于\033
\n    换行且光标移至行首
\r    回车,即光标移至行首,但不换行
\t    插入tab
\     转义字符
\0nnn 插入nnn(八进制)所代表的ASCII字符
\xHH  插入HH(十六进制)所代表的ASCII码数字(man 7 ascii)

echo -e "\a" 即可使计算机发出警告声,当我们执行较长时间命令即可加上,使任务完成时发出警告声提示 

 echo -e '\0XXX' 可以输出八进制代表的字符(八进制0123转换成字符是S,0130是X)

 echo -e '\xXX' 可以输出十六进制代表的字符(十六进制x67转换成字符是g,x57是W)


对于 \转义字符,可以使特殊符号原有的功能改变

如: echo $PATH本身可以输出PATH的目录,但加上\后,将$PATH视为一个普通字符串输出

又如:我们要输出\,使用\\,第一个转义功能,第二个是被转义的

或\\\\,第一第三个转义功能,第二第四被转义输出


六、字符集和编码

许多场合下,字符集和编码这2个概念被混为一谈,但二者有很大区别。

字符集:character set,简称charset,即二进制和字符的对应关系,不关注最终的存储形式

字符集编码/编码:charset encoding,简称encoding,实现如何将字符转化为实际的二进制进行存储或相反,决定了空间的使用大小

1、ASCII码

在计算机内部,所有信息最终都是一个二进制值。

ASCII:American Standard Code for Information Interchange

一共规定128个字符的编码,占用了一个字节的后面7位,最前面一位统一规定为0

2、Unicode

ASCII只为处理127个字母,但处理中文显然不够,至少需要2个字节,因此,中国制定了GB2312编码,用来将中文编写进去

日本将日文编进Shift_JIS,韩国将韩文编进Euc-kr,各国有不同的标准,使用将会有问题

Unicode:万国码,一个很大的字符集合,规定了每个字符对应的二进制代码


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

1、反引号` ` 和 $() (相同功能)

· command· 执行其中命令
$(command)

反引号可以使它其中的命令运行

如:命令hostname,使其执行

又如:" "双引号里命令不会执行,只看变量。而' '单引号就直接输出

只有` `反引号可以执行其中的命令

同时$()也有相同作用

 总结:

①单引号:变量和命令都不识别,全部作为普通字符串输出

②反向单引号:变量和命令都识别,将其中的内容当作命令执行后,再交给调用反向单引号的命令继续执行

③双引号:不能识别命令,可以识别变量

功能展示:

①date +%F命令可以显示出当前日期

date +%F

我们在创建一个名为日期的文件时,可以直接使用反向单引号`date +%F`来创建一个日期为今天的文件,就不用再手动查看日期再把日期命名

可以使用nano或touch命令来创建文件

 ②还可以在日期前加上`hostname`来使文件前带上我们主机名

 ③echo可以查看文件

 ll加上文件名可以查看具体信息

那我们想直接ll echo出的文件呢?

就可以用到反向单引号的功能:ll `echo `date +%F`.txt` 

这个命令是命令嵌套命令

无法运行,因为有4个单引号,系统不知道哪两个结合

因此,``的缺点就在于这里:不能嵌套命令

但是$()可以

 同时还可以``和$()同时使用

2、括号拓展:{ }

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

输入命令            结果
echo {1,3,5}			1 3 5
echo 1 3 5			    1 3 5
echo babe{1,3,5}		babe1 babe3 babe5
echo babe{1,3,5}.text	babe1.text babe3.text babe5.text
echo babe{1..8}		    babe1 babe2 babe3 babe4 babe5 babe6 babe7 babe8
echo babe{3..8}		    babe3 babe4 babe5 babe6 babe7 babe8
echo babe{12..8}		babe12 babe11 babe10 babe9 babe8
echo babe{12..8..2}	    babe12 babe10 babe8
echo babe{3..8..2}		babe3 babe5 babe7
echo {a..f}			    a b c d e f
echo {a..f..2}			a c e
echo {000..8}           000 001 002 003 004 005 006 007 008
echo {000..8..2}        000 002 004 006 008

有些特殊的

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
echo {a..Z}    a ` _ ^ ]  [ Z
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
echo {Z..a}    Z [  ] ^ _ ` a
echo {a..A}    a ` _ ^ ]  [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
echo {z..A}    z y x w v u t s r q p o n m l k j i h g f e d c b a ` _ ^ ]  [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
笛卡尔乘积:
echo bave{1..5}.{txt,log}    bave1.txt bave1.log bave2.txt bave2.log bave3.txt bave3.log bave4.txt bave4.log bave5.txt bave5.log

八、tab键补全

作用:tab键可以实现命令和路径等的补全,提高输入效率,避免出错

1、命令补全

  • 内部命令
  • 外部命令
  • 命令的子命令补全
注意:如果用户给定的字符串只有唯一对应的命令,则按下tab直接补全,否则再次按tab给出命令列表

2、路径补全

原理同上,如果用户给定的字符串只有唯一对应的路径,则按下tab直接补全,否则再次按tab给出列表

3、双击tab键

command 按2次tab	显示所有子命令或命令补全
string  按2次tab	以string开头命令
/		按2次tab	显示所有根目录下一级目录,包括隐藏目录
./		按2次tab	显示当前目录下子目录,包括隐藏目录
*		按2次tab 显示当前目录下子目录,不包括隐藏目录
~		按2次tab 所有用户列表
$		按2次tab 所有变量列表
@		按2次tab /etc/hosts记录 (centos7不支持)
=		按2次tab 相当于ls -A	(centos7不支持)

九、命令行历史

过程:

  • 执行命令后,系统默认会在内存中记录执行过的命令

  • 当用户正常退出后,系统会将内存的命令历史存放到对应历史文件中,默认是 ~/.bash_history

  • 当用户登录shell,系统会自动读取命令历史文件下记录的命令加载到内存中

  • 登陆进shell后,新执行的命令会记录在内存的缓冲区中,这些命令会在用户正常退出时存放进历史文件中

作用:可以用它重复执行命令,提高效率

命令:

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` "	记录显示用户和时间
HISTGNORE="str1:str2*..." 忽略str1命令、str2开头的命令
HISTCONTROL	控制命令历史的记录方法
	
ignoredups	默认值,可忽略重复的命令,连续且相同为重复
ignorespace	忽略所有的以空白开头的命令
ignoreboth	相当于前两个命令的组合
erasedups	删除重复命令

持久保存变量:

以上变量可以以 export 变量名="值" 的形式存放在 /etc/profile 或 ~/.bash_profile

export 变量名="值"

调用命令行历史:

重复上一个命令:
使用上方向键 并回车执行
按!!		并回车执行
输入!-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 (向下) 键来上下浏览从前输入的命令
ctr1-r	在命令历史中搜索命令
(reverse-i-search)`':
ctr1+g	从历史搜索模式退出

要重新调用前一个命令中最后一个参数:

!$		表示最后一个参数
ESC .	点击esc松开,再按 . 键
Alt .	按住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 开头的命令,并获取它的所有参数

bash的快捷键:

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

注意:AIt组合快捷键经常和其它软件冲突

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python源码:用turtle画美国队长盾牌

解析: 美国队长盾牌结构分析: 有4个圆和一个五角星组成。 源码如下: import turtle as t #控制画笔的速度 t.speed(10) #画最外面的大圆 t.penup() t.goto(100,-235) t.pendown() t.color("red","red") t.begin_fill(…

iOS 实现多scheme 切换环境完整流程

文章目录 一、 添加configuration二、 添加scheme三、 设置scheme 和 configuration的对应关系四 、 本地配置文件五、 运行 前言 我们在开发中都要涉及到切换环境,很多小伙伴是通过宏定义的方式实现 切换环境的 , 这种方式不优雅,还可造成每…

MySQL基础篇(day02,复习自用)

MySQL第二天 基本的SELECT语句大小规范注释命名规则数据导入指令select语句练习 运算符代码练习 基本的SELECT语句 SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进 每条命令以 ; 或 \g 或 \G 结束 关键字不能被缩写也不能分行 关…

中国开源,迈入“新生代”

提到中国开源,大家会想到什么? “追随者,而不是创造者”“国外一开源,国內就自主”“全球开源社区里的nobody”……如果你带着这些“刻板印象”,参加近两年国內的开源活动,极大可能会受到不小的震撼。 中国…

cglib动态代理 | 如何生成代理类、代理类内容解析

文章目录 简介一、cglib动态代理有什么特点CgLib动态代理:优点:缺点: 二、Cglib如何生成代理类生成代理类的具体代码:生成代理对象的具体代码: 三、代理类内容解析持久化代理类:代理类内容: Cgl…

数据指标体系建设

一、什么是数据指标体系? 指标体系是从不同维度梳理业务,把指标有系统的组织起来。简而言之,指标体系指标体系,所以一个指标不能叫指标体系,几个毫无关系的指标也不叫指标体系。指标体系就像是一个整体、一辆车&#…

MacOS Sonoma 14.0 (23A5276g) Beta2 带 OC 引导双分区黑苹果镜像

苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta2 更新(内部版本号:23A5276g),本次更新距离上次发布隔了 15 天。 镜像下载: 微信公众号: macOS Sonoma 14.0 (23A5276g) Beta2 带 OC 引导双分…

【人工智能】— 深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化

【人工智能】— 深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化 深度神经网络训练训练深度神经网络参数共享 卷积神经网络(CNN)卷积多卷积核卷积全连接最大池化卷积池化拉平向量激活函数优化小结 深度神经网络训练 Pr…

罗大佑、把午睡打造成领域驱动设计创新-UMLChina建模知识竞赛第4赛季第6轮

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题,即可获得本轮优胜。第4题为附加题,对错不影响优胜者的判定&am…

最优化系列 之 线性规划问题的灵敏度分析(1/6)

一、实验目的: 1. 掌握用MATLAB、LINGO 、EXCEL优化工具箱解线性规划的方法; 2. 练习建立实际问题的线性规划模型; 3. 掌握线性规划灵敏度分析原理; 4. 预习线性规划的灵敏度分析原理及方法。 二、实验内容 题目1:求解…

【spring cloud学习】2、Eureka服务注册与发现

前言 一套微服务架构的系统由很多单一职责的服务单元组成,而每个服务单元又有众多运行实例。由于各服务单元颗粒度较小、数量众多,相互之间呈现网状依赖关系,因此需要服务注册中心来统一管理微服务实例,维护各服务实例的健康状态…

终端基础知识

CLI、Terminal、Shell、Prompt 一、CLI CLI is the abbreviation of Command Line Interface. It’s a text-based way of interacting with a computer. 相比于图像界面提供的按钮,你可以使用一行命令来实现你想要的功能,比如说打开、关闭文件&…

Linux用户信息关键文件详解

passwd文件说明 /etc/passwd文件记录了Linux所有用户的信息,是系统的关键文件之一。 文件格式内容如上图。 文件中的条目以“:”为分隔符,各个字段记录的信息依次为: 第一个字段:记录用户名 第二个字段:值x表示该用…

如何做一份干净的git提交记录

背景 毕业工作有一些年头了,之前在写工作代码或者给开源项目贡献的时候,提交代码都不是很规范,甚至可以说十分的随意,想到什么就提交什么,根本没有管理提交记录的概念或者想法(当你身边的人都不怎么在意的…

基于SpringBoot+SpringCloud+vue的智慧养老平台设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

大数据企业开发全套流程

大数据企业开发基础流程 Linux命令 1 Hadoop(HDFSYarn)单机版环境搭建 Hadoop 是一个开源的分布式计算框架,由 HDFS(Hadoop Distributed File System)和 YARN(Yet Another Resource Negotiator)两个核心组件组成。HD…

网络安全的含义及特征

网络安全从其本质上讲就是网络上的信息安全,指网络系统的硬件、软件及数据受到保护。不遭受破坏、更改、泄露,系统可靠正常地运行,网络服务不中断。从用户的角度,他们希望涉及到个人和商业的信息在网络上传输时受到机密性、完整性…

人人都能看懂的Spring源码解析,spring的事件监听机制

人人都能看懂的Spring源码解析,spring的事件监听机制 原理解析事件监听机制ApplicationEventPublisher、ApplicationEventMulticaster、ApplicationEvent、ApplicationListenerAbstractApplicationContext发布的事件类型 代码走读总结 往期文章: 人人都…

大数据Doris(四十八):Steam Load案例和注意事项

文章目录 Steam Load案例和注意事项 一、Steam Load案例 1、准备数据 2、创建 Doris 表 3、创建 Stream Load 导入任务 4、查看任务 5、查询Doris 表结果 二、注意事项 Steam Load案例和注意事项 一、Steam Load案例 下面以导入Linux节点本地磁盘数据到Doris为例&…

Python小游戏集合(开源、开源、免费下载)

Python小游戏集合 0. 前言1. 为什么用Python做游戏2. 小游戏集合及源代码(整理不易,一键三连)2.1 外星人小游戏2.2 塔防小游戏2.3 三国小游戏2.4 打飞机游戏2.5 飞机大战小游戏2.6 玛丽快跑小游戏2.7 涂鸦跳跃小游戏2.8 猜数字小游戏2.9 坦克…