Linux基础和入门

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 + # #提示输入指定字符后,重复显示该字符#次
登陆前提示
帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值