linux发展史及入门
cpu利用率?
cpu没有空闲,只有空转
并发并行?
并发一人吃3个馒头,并行3人吃3个馒头
缓冲缓存?
缓存是加速读取,缓冲是加速写入
计算机系统分为软件和硬件
操作系统os分类主要有3类,服务器os,桌面os,移动设备os
操作系统相关概念:接口,api,posix,系统调用system call 和函数库 Library function,用户和内核空间,编程语言
服务器三大操作系统:windows,unix,linux
图形界面gui 命令行cli
bash命令行和内存的接口,工具集
shell 是Linux系统的用户界面,提供了用户与内
核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行 . shell也被称为LINUX的命令解释器(command interpreter),Shell 本身是一个程序。将用户输入的命 令行拆解为”命令名“与”参数“。接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化, 然后将刚才解析出来的参数传给该程序并执行
修改命令提示符
rocky:
修改命令提示符
[mage@rocky ~]$ PS1='[\u@\h \w\t]\$ '
[mage@rocky ~19:08:08]$
修改颜色
临时生效
[mage@rocky /opt]$ PS1='\e[36m[\u@\e[33m\h \e[36m\w]\$ \e[0m'
永久生效
[root@rocky ~]$ echo "PS1='\e[36m[\u@\e[33m\h \e[36m\w]\$ \e[0m'" > /etc/profile.d/color
ubuntu:
临时生效:
root@ubuntu22:~# PS1='\e[36m[\u@\e[34m\h \e[36m\w]\$ \e[0m'
永久生效
root@ubuntu22:~# echo "PS1='\e[36m[\u@\e[34m\h \e[36m\w]\$ \e[0m'" >> .bashrc
root@ubuntu22:~# ls -a
. .. .bash_history .bashrc .cache .profile snap .ssh .viminfo .Xauthority
root@ubuntu22:~# . .bashrc
[root@ubuntu22 ~]$
$PS1变量常用选项
\d #曰期,格式为"星期 月 日"
\H #完整的主机名。如默认主机名"localhost.localdomain"。
\h #简写的主机名。如默认主机名"localhost"。
\t #24小时制时间,格式为"HH:MM:SS"。
\T #12小时制时间,格式为"HH:MM:SS"。
\A #24小时制时间,格式为"HH:MM"。
\@ #12小时制时间,格式为"HH:MM am/pm"。
\u #当前用户名。
\v #Bash版本信息。
\w #当前所在目录的完整名称。
\W #当前所在目录的最后一个目录。
\# #执行的第几条命令。
\$ #提示符。如果是 root 用户,则会显示提示符为"#";如果是普通用户,则会显示提示符为"$"
#各颜色表示方式
字体颜色 背景色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
修改主机名
ubuntu:
临时:hostname name
长期:hostnamectl set-hostname name
rocky:
临时:hostname name
长期:hostnamectl set-hostname name
输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
内部命令外部命令
内部命令:由shell自带的,而且通过某命令形式提供,用户登录后自动加载并常驻内存中
外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除
type
区分是外部命令还是内部命令
type COMMAND
type ls #区分是内部命令还是外部命令
type -t echo #简写,只给出类型,builtin|alias|file|keyword
type -a echo #列出所有,有可能是内部命令,也同时会是外部命令
有内部命令,又有外部命令,因为不是所有主机都使用标准shell,所以常用内部命令会有一个外部命令 的备份,防止内部命令执行失败。
在命令执行时,shell 先判断是否是内部命令,如果是,则执行内部命令,如果不是,则去特定目录下寻 找外部命令。 bash shell 自身就是一个程序,里面有很多小工具,有用户通过终端连接主机,则该终端就有一个bash 在后台运行着。
内部相关命令
help #查看所有内部命令及帮助
enable #查看所有启用的内部命令
enable cmd #启用 cmd 命令
enable -n cmd #禁用内部 cmd 命令
enable -n #查看所有禁用的内部命令
外部命令
which -a |--skip-alias
whereis
范例
[root@rocky ~]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
ubuntu:
#不显示别名
[root@ubuntu22 ~]$ which ls
/usr/bin/ls
#跳过别名
[root@rokcy8 ~]# which --skip-alias ls
/usr/bin/ls
# -a 表示在所有路径中查找匹配的命令,使用该命令时匹配第一个找到的
[root@rokcy8 ~]# which -a echo
/usr/bin/echo
#外部命令都存在$PATH路径中
[root@rocky ~]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的 路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不 存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率。 hash 只对当前用户的当前终端进程有效,是一组临时数据; 切换用户后无效; 退出重新登录后会被重置;
常用命令
hash #显示当前终端进程中的hash 缓存
hash -l #显示详创建此条hash 的命令,可作为输入使用
hash -p path name #手动创建hash
hash -t name #输出路径
hash -d name #删除指定hash
hash -r #清空所有hash
root@ubuntu2204:~# hash
hits command
1 /usr/bin/mesg
2 /usr/bin/which
1 /usr/bin/su
3 /usr/bin/ls
root@ubuntu2204:~# hash -l
builtin hash -p /usr/bin/mesg mesg
builtin hash -p /usr/bin/which which
builtin hash -p /usr/bin/su su
builtin hash -p /usr/bin/ls ls
#手动创建hash
root@ubuntu2204:~# builtin hash -p /abc abc
root@ubuntu2204:~# hash
hits command
1 /usr/bin/mesg
2 /usr/bin/which
0 /abc
1 /usr/bin/su
3 /usr/bin/ls
#输出路径
root@ubuntu2204:~# hash -t su
/usr/bin/su
#删除指定hash
root@ubuntu2204:~# hash -d su
#清空所有hash
root@ubuntu2204:~# hash -r
别名alias
对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
alias #显示当前shell进程所有可用的命令别名
alias name #查看指定别名
alias NAME='VALUE' #定义别名NAME,其相当于执行命令VALUE
unalias #撤消别名
#查看指定别名
root@ubuntu2204:~# alias ls
alias ls='ls --color=auto'
root@ubuntu2204:~# pwd
/root
#定义别名
root@ubuntu2204:~# alias cdnet='cd /etc/systemd/network'
#执行
root@ubuntu2204:~# cdnet
#查看当前目录
root@ubuntu2204:/etc/systemd/network# pwd
/etc/systemd/network
#撤销别名
root@ubuntu2204:/etc/systemd/network# unalias cdnet
root@ubuntu2204:/etc/systemd/network# cdnet
cdnet: command not found
#撤销所有别名
root@ubuntu2204:~# unalias -a
root@ubuntu2204:~# alias
root@ubuntu2204:~#
在命令行中定义的别名仅对当前用户和shell进程窗口有效
如果需要永久有效,则要写配置文件
对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc, /etc/bash.bashrc(ubuntu)
编辑配置文件新加的别名不会立即生效,要退出重新登录或在当前进程中重新读取配置文件
source 环境变量
如果别名同原命令同名,如果要执行原命令,可使用(ls举例)
\ls
“ls”
‘ls’
command ls
/path/commmand #只适用于外部命令
内部命令外部命令运行顺序
命令运行顺序:别名------内部命令-----hash表-----外部命令
常见命令
命令格式:命令+选项+参数
/
查看硬件信息s's
查看cpulscpu
lscpu 命令可以查看cpu信息
cat /proc/cpuinfo也可看查看到
[root@ubuntu2204 ~]# lscpu
Architecture: x86_64
M57-Magedu
1.7.1.2 查看内存大小
free 命令补充
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 45 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Vendor ID: GenuineIntel
Model name: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
CPU family: 6
Model: 140
Thread(s) per core: 1 #每个core 有几个线程
Core(s) per socket: 1 #每个槽位有1个core
Socket(s): 2 #服务器面板上有2个cpu 槽位
Stepping: 1
BogoMIPS: 5990.42
Flags: ...
Virtualization features:
Hypervisor vendor: VMware
Virtualization type: full
Caches (sum of all):
L1d: 96 KiB (2 instances)
L1i: 64 KiB (2 instances)
L2: 2.5 MiB (2 instances)
L3: 24 MiB (2 instances)
NUMA:
NUMA node(s): 1
NUMA node0 CPU(s): 0,1
[root@ubuntu2204 ~]# cat /proc/cpuinfo
查看内存大小free
[root@ubuntu22 /etc]$ free
total used free shared buff/cache available
Mem: 1974528 310812 1294240 1276 369476 1499096
Swap: 2097148 0 2097148
#1秒刷新一次数据
[root@rocky ~]$ free -hs 1
total used free shared buff/cache available
Mem: 1.7Gi 584Mi 560Mi 10Mi 641Mi 1.0Gi
Swap: 2.0Gi 0B 2.0Gi
total used free shared buff/cache available
Mem: 1.7Gi 584Mi 559Mi 10Mi 641Mi 1.0Gi
Swap: 2.0Gi 0B 2.0Gi
total used free shared buff/cache available
Mem: 1.7Gi 584Mi 559Mi 10Mi 641Mi 1.0Gi
Swap: 2.0Gi 0B 2.0Gi
total used free shared buff/cache available
Mem: 1.7Gi 584Mi 559Mi 10Mi 641Mi 1.0Gi
Swap: 2.0Gi 0B 2.0Gi
^C
[root@rocky ~]$
#刷新2次数据后退出
[root@rocky ~]$ free -hc 2
total used free shared buff/cache available
Mem: 1.7Gi 584Mi 560Mi 10Mi 641Mi 1.0Gi
Swap: 2.0Gi 0B 2.0Gi
total used free shared buff/cache available
Mem: 1.7Gi 584Mi 560Mi 10Mi 641Mi 1.0Gi
Swap: 2.0Gi 0B 2.0Gi
total #系统总的可用物理内存大小
used #已被使用的物理内存大小
free #还有多少物理内存可用
shared #被共享使用的物理内存大小
buff/cache #被 buffer 和 cache 使用的物理内存大小
available #还可以被 应用程序 使用的物理内存大小
查看硬盘和分区信息lsblk
[mage@rocky ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─rl_bogon-root
│ 253:0 0 70G 0 lvm /
├─rl_bogon-swap
│ 253:1 0 2G 0 lvm [SWAP]
└─rl_bogon-home
253:2 0 127G 0 lvm /home
sr0 11:0 1 10.5G 0 rom
#系统识别的设备
[mage@rocky ~]$ cat /proc/partitions
major minor #blocks name
11 0 10950656 sr0
8 0 209715200 sda
8 1 1048576 sda1
8 2 208665600 sda2
253 0 73400320 dm-0
253 1 2125824 dm-1
[root@ubuntu22 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 193M 1.3M 192M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 97G 5.2G 87G 6% /
tmpfs 965M 0 965M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 129M 1.7G 8% /boot
tmpfs 193M 4.0K 193M 1% /run/user/0
#查看分区信息,真实存在的设备
[root@ubuntu22 ~]$ fdisk -l
Disk /dev/loop0: 79.95 MiB, 83832832 bytes, 163736 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop1: 111.95 MiB, 117387264 bytes, 229272 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop2: 61.89 MiB, 64901120 bytes, 126760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop3: 40.86 MiB, 42840064 bytes, 83672 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 31412E52-47AA-43D7-91D0-759B620A34FF
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 4198399 4194304 2G Linux filesystem
/dev/sda3 4198400 419428351 415229952 198G Linux filesystem
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 99 GiB, 106296246272 bytes, 207609856 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
fdisk -l ,cat /proc/partitions,df -h ,lsblk区别
fdisk命令用于列出系统中所有硬盘分区信息,包括分区类型,起始扇区等详细信息,可以显示主分区和扩展分区,以及在每个分区中可能存在的逻辑分区
cat /proc/partitions用于查看当前分区列表。包括主分区和详细分区,不详细列出来
df -h该命令用于显示磁盘分区的使用情况,包括每个分区的容量、已用空间、可用空间以及挂载点等。
它可以帮助您了解每个分区的磁盘使用情况,以及分区是否已满或接近满。
lsblk该命令用于列出系统中的块设备信息,包括硬盘、分区、挂载点等。
它以树状结构展示设备之间的关系,并提供了更多的设备信息,如设备大小、设备类型、文件系统等。
综合来看,fdisk -l 提供了详细的硬盘分区信息,cat /proc/partitions 列出了分区列表,df -h 显示分区的使用情况,而 lsblk 提供了更直观的块设备展示和更多的设备信息。它们可以相互补充,一起使用可以更全面地了解系统中存储设备和分区情况。
查看系统版本信息arch
[mage@rocky ~]$ arch
x86_64
查看内核版本uname
[root@ubuntu22 ~]$ uname -r
5.15.0-91-generic
查看操作系统版本release
#查看发行版
[mage@rocky ~]$ cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)
[mage@rocky ~]$ cat /etc/os-release
NAME="Rocky Linux"
VERSION="8.6 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.6"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.6 (Green Obsidian)"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:rocky:rocky:8:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky Linux"
ROCKY_SUPPORT_PRODUCT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
[root@ubuntu22 /etc]$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04 LTS
Release: 22.04
Codename: jammy
[root@ubuntu22 /etc]$ cat /etc/issue
Ubuntu 22.04 LTS \n \l
日期和时间
Linux的两种时钟
系统时钟:由Linux内核通过CPU的工作频率进行的
硬件时钟:主板
date
[root@ubuntu22 /etc]$ date +%F
2023-12-28
[root@ubuntu22 /etc]$ date -R
Thu, 28 Dec 2023 08:33:56 +0000
[root@ubuntu22 /etc]$ date +%s
1703752449
[root@ubuntu22 /etc]$ date -d@1703752449
Thu Dec 28 08:34:09 AM UTC 2023
[root@ubuntu22 /etc]$ date -d@`date +%s`
Thu Dec 28 08:38:01 AM UTC 2023
[root@ubuntu22 /etc]$ date -d@1703752449 +%F_%T
2023-12-28_08:34:09
[root@ubuntu22 /etc]$ date -d@`date +%s` +%F_%T
2023-12-28_08:38:46
[root@ubuntu22 /etc]$ date -d"2023-12-24" +%S
00
[root@ubuntu22 /etc]$ date -d"2023-12-24" +%s
1703376000
clock,hwclock显示硬件时钟
clock [function] [option...]
hwclock [function] [option...]
#常用选项
-s|--hctosys #以硬件时钟为准,校正系统时钟
-w|--systohc #以系统时钟为准,校正硬件时钟
root@rocky ~]$ ll /usr/sbin/clock
lrwxrwxrwx. 1 root root 7 May 10 2022 /usr/sbin/clock -> hwclock
[root@rocky ~]$ clock -s
[root@ubuntu22 /etc]$ ll /usr/sbin/clock
ls: cannot access '/usr/sbin/clock': No such file or directory
[root@ubuntu22 /etc]$ ll /usr/sbin/hwclock
-rwxr-xr-x 1 root root 51704 Feb 21 2022 /usr/sbin/hwclock*
时区timedatectl
[root@ubuntu22 /etc]$ timedatectl list-timezones
[root@ubuntu22 ~]$ timedatectl status
Local time: Thu 2023-12-28 09:38:10 UTC
Universal time: Thu 2023-12-28 09:38:10 UTC
RTC time: Thu 2023-12-28 09:38:10
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[root@ubuntu2204 ~]# timedatectl set-timezone Asia/Shanghai
[root@ubuntu22 ~]$ cat /etc/timezone
Asia/Shanghai
[root@ubuntu22 ~]$ ll /etc/localtime
lrwxrwxrwx 1 root root 33 Dec 28 17:48 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
日历cal
Usage:
cal [options] [[[day] month] year]
cal [options]
[root@ubuntu22 ~]$ cal
December 2023
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
关机和重启
关机
halt
poweroff
init 0
shutdown -h now
重启
reboot
init 6
shutdown -r now
#ctrl+alt+delete 三键
关机或重启:shutdown shutdown 程序会广播己登录的用户,被看作是安全的关机命令,是一个计划关机任务,可撤销
shutdown [OPTION]... [TIME] [MESSAGE]
shutdown #一分钟后关机
shutdown +10 #10分钟后关机
shutdown 01:02 #1点过两分关机
shutdown -r|--reboot #一分钟后重启
shutdown -r now #现在重启
shutdown -H|--halt #一分钟后调用halt 关机
shutdown -P|--poweroff #一分钟后调用poweroff 关机
shutdown -c #取消关机计划
#-r 表示一分钟后重启,如果想立即执行 shutdown -r now
[root@ubuntu2204 ~]# shutdown -r
Shutdown scheduled for Sun 2022-06-12 20:11:05 CST, use 'shutdown -c' to cancel.
#取消重启
[root@ubuntu2204 ~]# shutdown -c
用户登录信息查看
whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作
[root@ubuntu22 ~]$ whoami
root
[root@ubuntu22 ~]$ who am i
root pts/0 2023-12-28 17:36 (10.0.0.1)
who
#who [选项]... [ 文件 | 参数1 参数2 ]
#显示当前已登录的用户信息。
who #列出在当前主机上所有登录用户
who -u | --users #列出当前主机上所有用户的空闲时间 . 表示最近一分钟还是活跃状态 old 表
示用户己经空闲超过24小时
who -s | --short #列出在当前主机上所有登录用户,等同于who
who -q | --count #登录用户统计
who -b | --boot #上次系统启动时间
who -a | --all #多选项组合
who -m #who am i
w
#w [options] #显示当前所有登录用户的具体信息
[root@rocky ~]$ w
19:18:07 up 9:18, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 17:52 0.00s 0.03s 0.00s w
mage pts/1 10.0.0.1 19:17 58.00s 0.00s 0.00s -bash
#登录名 终端 来源IP 登录时间 空闲时间 当前终端中所有进程使用cpu的时间,不包括后台作业占用的时 间 当前进程使用的cpu的时间
#load average 表示平均负载,最近一分钟,最近五分钟,最近15分钟 #
查看特定用户 w root
会话管理screen
#centos8安装screen
[root@centos8 ~]# dnf -y install epel-release
[root@centos8 ~]# dnf -y install screen
#ubuntu
[root@ubuntu ~]# apt install screen
screen –S [SESSION] #创建新screen会话
screen –x [SESSION] #加入screen会话
screen -r [SESSION] #恢复某screen会话
screen -ls #显示所有已经打开的screen会话
Ctrl+a,d #剥离当前screen会话
exit #退出并关闭screen会话
输出信息echo
echo 命令可以将后面跟的字符进行输出 功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号
#echo: echo [-neE] [字符串]
-n #输出完成后不换行
-e #转义特定字符串
-E #不转义,原样输出,默认选项
#启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
\a #发出警告声
\b #退格键
\c #最后不加上换行符号
\e #escape,相当于\033
\n #换行且光标移至行首
\r #回车,即光标移至行首,但不换行
\t #插入tab
\\ #插入\字符
\0nnn #插入nnn(八进制)所代表的ASCII字符
\xHH #插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
#用变量值替换,弱引用
[root@rocky ~]$ echo "$BASHPID"
38011
#变量不会替换,强引用
[root@rocky ~]$ echo '$BASHPID'
$BASHPID
字符集
[root@rocky /etc/yum.repos.d]$ dnf -y install man-pages
[root@rocky /etc/yum.repos.d]$ man ascii
默认系统为英文环境,可以修改为中文环境,从而查看帮助或提示可以变为中文
临时修改LANG变量实现中文语言提示
[root@ubuntu22 ~]$ echo $LANG
en_US.UTF-8
[root@centos7 ~]#LANG=zh_CN.UTF-8
[root@ubuntu22 ~]$ localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: n/a
X11 Layout: us
X11 Model: pc105
[root@ubuntu22 ~]$ echo $LANG
en_US.UTF-8
[root@rocky8 ~]# localectl list-locales
命令行扩展
··和$()
把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令
变量:
双引号,弱引用,可以解析内容
单引号,强引用,原样输出
[root@ubuntu22 ~]$ echo "$hostname"
[root@ubuntu22 ~]$ echo "$HOSTNAME"
ubuntu22
[root@ubuntu22 ~]$
[root@ubuntu22 ~]$ echo '$HOSTNAME'
[root@ubuntu22 ~]$ echo (echo '$HOSTNAME')
-bash: syntax error near unexpected token `echo'
[root@ubuntu22 ~]$ echo `echo '$HOSTNAME'`
$HOSTNAME
[root@ubuntu22 ~]$ echo `echo "$HOSTNAME"`
ubuntu22
单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻"
双引号:弱引用,不能识别命令,可以识别变量,"半傻不精"
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容
当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明"
[root@ubuntu22 ~]$ echo "my name is $HOSTNAME"
my name is ubuntu22
[root@ubuntu22 ~]$ echo "i am `whoami`"
i am root
[root@ubuntu22 ~]$ echo $(date +%F%T).txt
2023-12-2820:39:52.txt
[root@ubuntu22 ~]$ ll `touch $(date +%F).txt`
-rw-r--r-- 1 root root 0 Dec 28 20:46 2023-12-28.txt
范例:$( ) 和 ``
[root@ubuntu22 ~]$ ll `echo $(date +%F).txt`
-rw-r--r-- 1 root root 0 Dec 28 20:46 2023-12-28.txt
[root@ubuntu22 ~]$ ll $(echo $(date +%F).txt)
-rw-r--r-- 1 root root 0 Dec 28 20:46 2023-12-28.txt
[root@ubuntu22 ~]$ ll $(echo `date +%F`.txt)
-rw-r--r-- 1 root root 0 Dec 28 20:46 2023-12-28.txt
括号扩展:{}
[mage@rocky ~]$ echo {1,3,4}.log
1.log 3.log 4.log
[mage@rocky ~]$ echo {1..100}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
[mage@m57-152 ~]$ echo {1..100..2}
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 7[mage@m57-152 ~]$ hostnamectl set-hostname ubuntu22
[mage@rocky ~]$ echo {1,2,3}{a,b,c}.log
1a.log 1b.log 1c.log 2a.log 2b.log 2c.log 3a.log 3b.log 3c.log
关闭和启用{}的功能
[mage@rocky ~]$ echo $-
himBHs
[mage@rocky ~]$ echo {1..10}.log
1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log 10.log
[mage@rocky ~]$ set +B
[mage@rocky ~]$ echo $-
himHs
[mage@rocky ~]$ echo {1..10}.log
{1..10}.log
[mage@rocky ~]$ set -B
[mage@rocky ~]$ echo $-
himBHs
[mage@rocky ~]$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
命令行历史
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|erasedups #控制命令历史的记录方式
ignoredups #是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace #忽略所有以空白开头的命令
ignoreboth #相当于ignoredups, ignorespace的组合
erasedups #删除重复命令
持久保持变量
以上变量可以 export 变量名="值" 形式存放在 /etc/profile 或 ~/.bash_profile
[root@ubuntu2204 ~]# cat .profile
# ~/.profile: executed by Bourne-compatible login shells.
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
mesg n 2> /dev/null || true
PATH=$PATH:$HOME/bin
export PATH
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T "
[root@ubuntu2204 ~]# history
1 2023-05-08 11:14:58 shutdown -h now
2 2023-05-08 11:14:58 passwd
3 2023-05-08 11:14:58 vim /etc/ssh/sshd_config
4 2023-05-08 11:14:58 systemctl restart sshd
调用命令行历史
#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入!-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 开头的命令,并获取它的所有参数
快捷键
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 + # #提示输入指定字符后,重复显示该字符#次