1. 查看硬件信息

1.1 查看CPU

使用命令lscpu或者查看文件/proc/cpuinfo可以查看cpu信息

范例 :

[root@centos8 ~]# lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              1
On-line CPU(s) list: 0
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               42
Model name:          Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
Stepping:            7
CPU MHz:             2491.980
BogoMIPS:            4983.96
Hypervisor vendor:   VMware
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            3072K
NUMA node0 CPU(s):   0
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm pti tsc_adjust arat
​
[root@centos8 ~]# cat /proc/cpuinfo 
​

1.2 查看内存大小

[root@centos8 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          3.7Gi       594Mi       2.5Gi        10Mi       602Mi       2.9Gi
Swap:         2.0Gi          0B       2.0Gi
[root@centos8 ~]# cat /proc/meminfo
MemTotal:        3842016 kB
MemFree:         2616792 kB
MemAvailable:    2990184 kB
Buffers:            2232 kB
Cached:           558312 kB
SwapCached:            0 kB
Active:           577092 kB
Inactive:         350020 kB
Active(anon):     368676 kB
Inactive(anon):     9016 kB
Active(file):     208416 kB
Inactive(file):   341004 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        364568 kB
Mapped:           206888 kB
Shmem:             11128 kB
KReclaimable:      56520 kB
Slab:             151824 kB
SReclaimable:      56520 kB
SUnreclaim:        95304 kB
KernelStack:        7212 kB
PageTables:        23388 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4018156 kB
Committed_AS:    2012556 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:            67072 kB
HardwareCorrupted:     0 kB
AnonHugePages:    155648 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      192320 kB
DirectMap2M:     4001792 kB
​

1.3 查看硬盘和分区情况

直接使用lsblk命令查看磁盘和分区信息

  • 语法 : lsblk [options] [device...]

  • OPTIONS

    • -a,--all : 显示所有设备

  • -b,--bytes : 以bytes方式显示设备大小。

    • -d,--nodeps : 不显示 slavesholders

  • -e, --exclude <list> : 排除设备 (default: RAM disks)。

    • -f,--fs : 显示文件系统信息。

  • -h, --help : 显示帮助信息。

    • -i, --ascii : use ascii characters only。

  • -m, --perms : 显示权限信息。

    • -l, --list : 使用列表格式显示。

    • -n, --noheadings : 不显示标题。

    • -o, --output <list> : 输出列。

    • -P, --pairs : 使用key="value"格式显示。

    • -r, --raw : 使用原始格式显示。

    • -t, --topology : 显示拓扑结构信息。

[root@centos8 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   20G  0 disk 
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   19G  0 part 
  ├─cl-root 253:0    0   17G  0 lvm  /
  └─cl-swap 253:1    0    2G  0 lvm  [SWAP]
sr0          11:0    1 1024M  0 rom  
[root@centos8 ~]# lsblk -f
NAME        FSTYPE      LABEL UUID                                   MOUNTPOINT
sda                                                                  
├─sda1      ext4              16ab6947-566e-40c3-94f7-ce21c0404cb1   /boot
└─sda2      LVM2_member       a2gRKG-7KIx-jVdH-tohC-muxh-sKqk-aj9qHH 
  ├─cl-root xfs               d2925a6f-d672-4f9b-9290-634ba6ebd565   /
  └─cl-swap swap              d975df38-618d-4e55-b9b3-6bc0cad44912   [SWAP]
sr0                                                                  
[root@centos8 ~]# lsblk -nl
sda       8:0    0   20G  0 disk 
sda1      8:1    0    1G  0 part /boot
sda2      8:2    0   19G  0 part 
sr0      11:0    1 1024M  0 rom  
cl-root 253:0    0   17G  0 lvm  /
cl-swap 253:1    0    2G  0 lvm  [SWAP]
​
[root@centos8 ~]# lsblk -r
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk 
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 19G 0 part 
sr0 11:0 1 1024M 0 rom 
cl-root 253:0 0 17G 0 lvm /
cl-swap 253:1 0 2G 0 lvm [SWAP]
[root@centos8 ~]# lsblk -t
​
NAME        ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED       RQ-SIZE   RA WSAME
sda                 0    512      0     512     512    1 mq-deadline     254 4096    0B
├─sda1              0    512      0     512     512    1 mq-deadline     254 4096    0B
└─sda2              0    512      0     512     512    1 mq-deadline     254 4096    0B
  ├─cl-root         0    512      0     512     512    1                 128 4096    0B
  └─cl-swap         0    512      0     512     512    1                 128 4096    0B
sr0                 0    512      0     512     512    1 mq-deadline       2  128    0B
​
[root@centos8 ~]# lsblk -d
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0   20G  0 disk 
sr0   11:0    1 1024M  0 rom  
[root@centos8 ~]# lsblk -dnl
sda    8:0    0   20G  0 disk 
sr0   11:0    1 1024M  0 rom  

同样/proc/partitions该文件中主要包括分区设备的主副设备号 , 块数 , 以及对应/dev目录下面的设备名 , 与/dev/devices 中的设备名 , 与主设备号相互对应。查看分区也可以使用此文件

[root@centos8 ~]# cat /proc/partitions 
major minor  #blocks  name
​
   8        0   20971520 sda
   8        1    1048576 sda1
   8        2   19921920 sda2
  11        0    1048575 sr0
 253        0   17821696 dm-0
 253        1    2097152 dm-1

major number : 对应设备的类型 minor number :对应此设备类型的唯一标识

2. 查看系统版本信息

2.1 查看内核版本

uname命令用于显示系统信息。这里如果需要查看linux内核的版本信息,需要使用uname -r命令。

  • 语法 : uname [OPTION]...

  • OPTIONS

    • -a,--all : 显示全部信息

    • -m,--machine : 显示电脑类型

    • -n,--nodename : 显示在网络上的主机名

    • -r ,--release : 显示操作系统的内核版本

    • -s,--sysname : 显示操作系统名称

    • -v : 显示操作系统版本

[root@centos8 ~]#uname -r 
4.18.0-147.el8.x86_64 
[root@centos7 ~]#uname -r 
3.10.0-1062.el7.x86_64
[root@centos6 ~]# uname -r 
2.6.32-754.el6.x86_64 
[root@ubuntu1804 ~]#uname -r 
4.15.0-29-generic
[root@centos8 ~]# uname -a
Linux centos8 4.18.0-193.el8.x86_64 #1 SMP Fri May 8 10:59:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@centos8 ~]# uname -s
Linux
[root@centos8 ~]# uname -a
Linux centos8 4.18.0-193.el8.x86_64 #1 SMP Fri May 8 10:59:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@centos8 ~]# uname -s
Linux
[root@centos8 ~]# uname -n
centos8 
[root@centos8 ~]# uname -m
x86_64

2.2 查看操作系统发行版本

[root@centos8 ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
​
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
​
[root@centos8 ~]# lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 8.2.2004 (Core) 
Release:    8.2.2004
Codename:   Core
​
#ubuntu查看发行版本
[root@ubuntu1804 ~]#cat /etc/os-release 
NAME="Ubuntu" 
VERSION="18.04.1 LTS (Bionic Beaver)" 
ID=ubuntu 
ID_LIKE=debian 
PRETTY_NAME="Ubuntu 18.04.1 LTS" 
VERSION_ID="18.04" 
HOME_URL="https://www.ubuntu.com/" 
SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy- policy" VERSION_CODENAME=bionic 
UBUNTU_CODENAME=bionic
​
[root@ubuntu1804 ~]#cat /etc/issue 
Ubuntu 18.04.1 LTS \n \l 
[root@ubuntu1804 ~]#lsb_release -a 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 18.04.1 LTS 
Release: 18.04 
Codename: bionic
​
[root@node02 ~]# cat /etc/system-release
Rocky Linux release 9.4 (Blue Onyx)
​

2.3 系统本地化(locale)和键盘布局

系统本地化决定系统服务和用户界面的语言环境。键盘布局设置包括文本控制台和用户图形界面两部分。本地化和键盘设置有两种方法 : 直接修改/etc/locale.conf文件、使用localectl配置工具。

系统级别的本地化设置文件是/etc/locale.conf , 这个配置文件会在系统启动的时候被systemd 服务加载。在没有被用户自定义设置文件覆盖的情况下 , /etc/locale.conf对所有服务和用户都有效。

/etc/locale.conf的基本格式是每行一个变量。

LANG=de_DE.UTF-8  
LC_MESSAGES=C  

设定locale就是设定12大类的locale分类属性 , 即 12LC_*。除了这12个变量可以设定以外 , 为了简便起见 , 还有两个变量: LC_ALLLANG。它们之间有一个优先级的关系:

LC_ALL>LC_*>LANG

Centos中通过locale来设置程序运行的不同语言环境 , localeANSI C 提供支持。locale的命名规则为<语言>_<地区>.<字符集编码> , 如zh_CN.UTF-8 ,zh代表中文、CN代表大陆地区、UTF-8表示字符集。在locale环境中 , 有一组变量 , 代表国际化环境中的不同设置。

  • LANG :主语言的环境设置。LC *的默认值,如果LC *没有设置,则使用该值

  • LC_CTYPE :字符(文字)辨识的编码,用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。

  • LC_NUMERIC : 数字显示格式

  • LC_COLLATE : 字符串的比较与排序规则等。

  • LC_TIME : 时间和日期显示格式

  • LC_MONETARY : 货币格式

  • LC_MESSAGES : 信息显示的语言, 例如:错误信息、状态信息、标题、标签、按钮、菜单等。

  • LC_NAME :姓名显示规则

  • LC_ADDRESS : 地址显示规则

  • LC_TRLRPHONE :电话号码显示规则

  • LC_MEASUREMENT : 度量衡表达规则

  • LC_PAPER : 默认纸张尺寸大小

  • LC_IDENTIFICATION : 对locale自身包含信息的概述

  • LC_ALL : 一个宏,如果该值设置了,则该值会覆盖所有的LC_*的设置值。注意:LANG的值不受该宏的影响

2.3.1 locale

将有关当前语言环境或全部公共语言环境的信息写到标准输出上。

[root@centos8 ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL 

2.3.2 localectl

控制系统的本地化与键盘布局。

可用于查询与修改系统的本地化(locale)与键盘布局的设置。 它通过与systemd-localed.service(8) 通信来修改例如/etc/locale.conf /etc/vconsole.conf 之类的配置文件。 本地化设置控制着 用户界面的语言、字符类型与字符编码、 日期时间与货币符号的表达方式 等许多细节。 键盘布局控制着 键盘上每个按键及组合键的含义。

  • OPTIONS

    • set-locale LOCALE : 设置系统的本地化环境变量

    • list-locales : 列出所有可用的 locale , 以帮助正确使用 set-locale 命令

    • list-keymaps : 列出所有可用的控制台键盘映射 , 以帮助正确使用set-keymap命令

    • status : 显示当前的本地化设置与键盘映射 , 这是默认命令

    • set-keymap MAP [TOGGLEMAP] : 设置控制台的键盘映射(中国人应设为 us)。 可选的[TOGGLEMAP]用于设置第二切换键盘映射。 除非明确设置了--no-convert选项 , 否则此命令也会同时设置默认的X11键盘布局(将"MAP"自动转化为最接近的X11键盘布局)

    • set-x11-keymap LAYOUT [MODEL [VARIANT [OPTIONS]]] : 设置默认的X11键盘布局(中国人应设为 us)。 可选的 , 还可以设置Model, Variant, Options 三项(无默认值)。 MODEL一般设为pc104 , VARIANTOPTIONS一般直接忽略 , 详见 kbd(4) 手册。除非明确设置了 --no-convert 选项 , 否则此命令也会同时设置控制台的键盘映射 , 也就是将LAYOUT自动转化为最接近的控制台键盘映射

    • list-x11-keymap-layouts :列出所有可用的X11键盘的 Layout , 以帮助正确使用 set-x11-keymap 命令

示例

[root@centos8 ~]# localectl status 
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us
[root@centos8 ~]localectl set-locale LANG=en_GB.utf8
[root@centos8 ~]localectl set-keymap en_GB

3. 日期和时间

  • 系统时间 : 通常我们执行date命令看到的当前时区时间就是系统时间。

  • 硬件时间 : RTC 硬件时钟(Real Time Clock) , 主板上BIOS中的时间 , 由主板电池来维持运行 , 系统开机时回读取它 , 系统启动后会以它为基准更具系统配置设置系统时间。对于虚拟机 , 硬件时间会根据系统处理方法不同存在差异 , windows虚拟机节点kvm服务一般将localtime传给系统作为硬件时间 , linux虚拟机则会传递UTC时间给系统作为硬件时间。

  • UTC时间 : 是世界协调时间(Universal Time Coordinated)的简称 , 和格林尼治时间GMT大部分情况可视为等同 , 世界其他地区时间都以UTC时间为基准换算。

  • 本地时间LT(Local Time) , 既是各个时区的时间 , 如中国标准时CST(China Standard Time) , 我国处于东八区 , 和UTC时间关系是加8小时。

  • 除此之外你可能还会听到夏令时DST(Daylight Saving Times)和冬令时的概念 , 这是英国为了“节省能源”人为规定的时间制度 , 一般不会遇到 , 也叫英国夏令时BST(British Summer Tim)。夏令时将时间往前调了一个小时 , 到了规定的时间段内调整 , 过了规定时间段会调整回冬令时 , 冬令时就是正常的时间。

3.1 date

显示日期时间,linux 系统启动时从硬件读取日期和时间信息 : 读取完成之后就不再与硬件相关联

  • 语法 : date [OPTION]... [+FORMAT]

  • OPTIONS

    • -d<字符串> : 显示字符串所指的日期与时间。字符串前后必须加上双引号;

    • -s<字符串> : 根据字符串来设置日期与时间。字符串前后必须加上双引号;

    • -u :显示UTC时间

    • -R : 查看硬件时间

    • --help : 在线帮助;

    • --version : 显示版本信息。

  • FORMAT;格式符

    • %F : %Y-%m-%d,(2015-12-08)

    • %T :%H:%M:%S,(18:06:55)

    • %Y : 年

    • %m : 月

    • %d : 日

    • %H : 时

    • %M : 分

    • %S : 秒

    • %s:从1970年1月1号 ( Unix元年 ) 0点0分0秒到命令执行那一刻经过的秒数

#设定日期时间
date [MMDDhhmm[[CC]YY][.ss]]  
date -s "2018-05-17 09:51:50"

如果需要将 data +%s 这个时间转换为具体的年月日的时间 , 可以使用data -d @12343153 "+%Y-%m-%d %H:%M:%S"

范例 :

[root@centos8 ~]# date
Wed Nov  4 15:26:20 CST 2020
[root@centos8 ~]# date -d next-day
Thu Nov  5 15:26:23 CST 2020
[root@centos8 ~]# date -d next-day "+%F %T"
2020-11-05 15:26:26
[root@centos8 ~]# date -d tomorrow "+%F %T"
2020-11-05 15:26:29
[root@centos8 ~]# date -d last-day "+%F %T"
2020-11-03 15:26:55
[root@centos8 ~]# date -d yesterday "+%F %T"
2020-11-03 15:27:19
​
[root@centos8 ~]# date -d next-month  "+%F %T"
2020-12-04 15:27:43
[root@centos8 ~]# date -d next-year  "+%F %T"
2021-11-04 15:27:53
[root@centos8 ~]# date -d "5 days ago"  "+%F %T"
2020-10-30 15:28:09
[root@centos8 ~]# date -d week "+%F %T"
2020-11-11 15:28:36
[root@centos8 ~]# date -d "Nov12 -2 days" "+%F %T"
2020-11-10 00:00:00
[root@centos8 ~]# date -d "12/12 -2 days" "+%F %T"
2020-12-10 00:00:00
[root@centos8 ~]# date -d "2 days" "+%F %T"
2020-11-06 15:29:55
[root@centos8 ~]# date -d "2" "+%F %T"
2020-11-04 02:00:00
​

3.2 clock ,hwclock

硬件时钟 , 显示和设置硬件时钟

  • OPTIONS

    • -s , --hctosys : 以硬件为准 , 把系统调整为与硬件时钟一样

    • -w, --systohc:以系统为准 , 把硬件时钟调整为与系统时钟一样。

3.3 cal

显示日历

  • 语法 : cal [[month] year]

  • OPTIONS

    • -s,--sunday :显示时以周日为每个星期第一天

    • -m,--monday : 显示时以周一为每个星期第一天

    • -n,--months numbers : 以系统所在时间月份开始,显示numbers个月

    • -y,--year : 显示一整年时间

    • -Y,--twelve : 显示接下来的12个月

    • -w,--week[=number] : 在显示的日历中显示星期的序号

[root@centos6 ~]# cal 1 2019
    January 2019    
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
​
[root@centos6 ~]# cal 2 2019
    February 2019   
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
​
​

3.4 timedatectl

控制系统的时间和日期 , Centos7以后的命令

  • 语法 : timedatectl [OPTIONS...] COMMAND ...

  • OPTIONS

    • -h : 显示帮助信息

    • -H,--host=[USER@]HOST : 查看远程主机

    • -p ,--property=NAME :显示指定的属性

  • COMMAND

    • status : 显示现在的时间状态信息

    • show : 显示systemd-timesyncd属性(Centos8特有)

    • set-time TIME : 设置系统时间

    • set-timezone ZONE : 设置时区

    • list-timezones : 显示所有可以使用的时区

    • set-local-rtc BOOL : true,表示硬件时间显示和本地时间一致;false,表示硬件时间按照UTC时间显示。

    • set-ntp BOOL : 设置是否开启ntp

  • systemd-timesyncd Commands(Centos8特有)

    • timesync-status : 显示systemd-timesyncd状态

    • show-timesync : 显示systemd-timesyncd属性

[root@centos7 ~]# timedatectl set-time "2018-08-11 11:11:11"
[root@centos7 ~]#timedatectl set-time "YYYY-MM-DD HH:MM:SS"
[root@centos7 ~]#timedatectl set-time "YYYY-MM-DD"
[root@centos7 ~]#timedatectl set-time "HH:MM:SS"
[root@centos7 ~]# timedatectl status
      Local time: Sat 2018-08-11 11:11:16 CST
  Universal time: Sat 2018-08-11 03:11:16 UTC
        RTC time: Sat 2018-08-11 03:11:16
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
​
[root@centos8 ~]# timedatectl status 
               Local time: Wed 2020-11-11 15:35:16 CST
           Universal time: Wed 2020-11-11 07:35:16 UTC
                 RTC time: Wed 2020-11-11 07:35:16
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
[root@centos8 ~]# timedatectl set-local-rtc 1
[root@centos8 ~]# timedatectl status 
               Local time: Wed 2020-11-11 15:39:14 CST
           Universal time: Wed 2020-11-11 07:39:14 UTC
                 RTC time: Wed 2020-11-11 15:39:14
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: yes
​
Warning: The system is configured to read the RTC time in the local time zone.
         This mode cannot be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.
#当set-local-rtc 1 时,timedatectl 中显示时间会和本地时间一样显示,因为硬件时钟不能保存时区和夏令时调整 ,  修改后就无法从硬件时钟中读取出准确标准时间;不建议修改。

3.5 时区

linux中 , 记录时区的文件为/etc/localtime

linux修改时区的通用方法是将/etc/localtime软连接到指定时区文件 , 当然拷贝覆盖也可以 , 如ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime , /usr/share/zoneinfo这个目录下有七大洲所有支持的时区城市。

注: Ubuntu/etc/localtime文件中记录的是直接记录的是对应时区

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

linux中有另外一个文件记录时间配置/etc/sysconfig/clock。只对 hwclock 命令有效 , 且只在系统启动和关闭的时候才有用(修改了其中的UTC=trueUTC=false的前后 , 执行hwclock(--utc,--localtime,要重启系统后才生效);

/etc/sysconfig/clockUTC=false时,datehwclockhwclcok --localtime输出的时间应该都一致 , 且此时hwclock --utc是没有意义的;

/etc/sysconfig/clock UTC=ture 时 , datehwclock 的输出是一致的,hwclock --localtime的输出则是UTC时间;

这个配置文件里面支持UTC, ARC, SRM,ZONE这几个配置选项 , 关于这几个配置选项详解如下 :

  • UTC: 指定BIOS中保存的时间是否是GMT/UTC时间,true表示BIOS里面保存的时间是UTC时间,false表示BIOS里面保存的时间是本地时间

  • ZONE : 指定时区,ZONE的值是一个文件的相对路径名,这个文件是相对/usr/share/zoneinfo目录下的一个时区文件。比如ZONE的值可以是 : Asia/Shanghai, US/Pacific,UTC

  • ARC : 这个选项一般配置false , 在一些特殊硬件(Alpha)下才配置该选项为true

  • SRM :它同ARC , 该选项一般配置false , 在一下特殊硬件下才配置该选项为false

  • /etc/sysconfig/clock的配置实例

    ZONE=”Asia/Shanghai”
    UTC=true
    ARC=false

4. 关机和重启

4.1 shutdown

关机

  • 语法 : shutdown [OPTIONS...] [TIME] [WALL...]

  • OPTIONS

    • -h : halt

    • -r : reboot

    • -c : cancel

    • TIME:

      • now 立刻关机

      • hh:mm

      • +m , +0 :相对时间表示法 , 从命令提交开始多久之后;例如 +3;

    • WALL:表示这个位置的字符会通知所有屏幕的用户 , 默认会通知所有用户。

单独有WALL这个命令 , 使用WALL "HELLO" , 则所有屏幕的用户都会显示HELLO这一串字符 , 这里使用shutdown 时 , 默认会通知所有用户

4.2 halt

halt是最简单的关机命令 , 其实际上是调用shutdown -h命令。halt执行时 , 杀死应用进程 , 文件系统写操作完成后就会停止内核。

  • 语法 : halt OPTION

  • OPTIONS

    • -f : 没有调用shutdown而强制关机或重启

    • -i : 关机或重新启动之前 , 关掉所有的网络接口

    • -p : 关机时调用poweroff , 此选项为缺省选项

4.3 poweroff

  • 语法 : poweroff OPTIONS

  • OPTIONS

    • -n : 关闭系统时不执行 sync 操作 , 即不把已更改的数据写入硬盘

    • -i : 关闭系统前关闭所有网络连接

    • -f : 强制关闭操作系统

    • -w : 并不关闭系统 , 但把关机数据写入"/var/log/wtmp" 日志文件中。(可以理解为模拟关机)

    • -d : 关机时不把关机记录写入 "/var/log/wtmp" 日志文件中

    • -h : 把硬件设为备用模式 ( 也就是常说的电脑待机 )

4.4 reboot

  reboot的工作过程与halt类似 , 其作用是重新启动 , 而halt是关机。其参数也与halt类似。reboot命令重启动系统时是删除所有的进程 , 而不是平稳地终止它们。因此 , 使用reboot命令可以快速地关闭系统 , 但如果还有其它用户在该系统上工作时 , 就会引起数据的丢失。所以使用reboot命令的场合主要是在单用户模式

4.5 init0,init 6

  init是所有进程的祖先 , 其进程号始终为1。init用于切换系统的运行级别 , 切换的工作是立即完成的。init 0命令用于立即将系统运行级别切换为0 , 即关机init 6命令用于将系统运行级别切换为6 , 即重新启动

5. 用户登录信息查看命令

5.1 w

用于显示目前登入系统的用户信息。执行这项指令可得知目前登入系统的用户有哪些人 , 以及他们正在执行的程序。

单独执行 w 指令会显示所有的用户 , 您也可指定用户名称 , 仅显示某位用户的相关信息。

  • 语法 : w [-fhlsuV][用户名称]

  • OPTIONS

    • -f : 开启或关闭显示用户从何处登入系统。

    • -h : 不显示各栏位的标题信息列。

    • -l :使用详细格式列表 , 此为预设值。

    • -s : 使用简洁格式列表 , 不显示用户登入时间 , 终端机阶段作业和程序所耗费的CPU时间。

    • -u : 忽略执行程序的名称 , 以及该程序耗费CPU时间的信息。

    • -V : 显示版本信息。

范例 :

#显示当前用户
[root@localhost /]# w
 16:55:35 up  5:05,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      19:51     ?     0.33s  0.33s -bash
root     pts/1    192.168.74.1     20:19     ?     0.10s  0.00s w
​
# 不显示登录位置
[root@localhost /]# w -f
 16:55:57 up  5:06,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1      19:51     ?     0.33s  0.33s -bash
root     pts/1     20:19     ?     0.10s  0.00s w -f
​
#以简洁模式显示
[root@localhost /]# w -s
 16:56:24 up  5:06,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM              IDLE WHAT
root     tty1                        ?    -bash
root     pts/1    192.168.74.1       ?    w -s
​
#不显示标题
[root@localhost /]# w -h
root     tty1                      19:51     ?     0.33s  0.33s -bash
root     pts/1    192.168.74.1     20:19     ?     0.11s  0.00s w -h

5.2 who

显示关于当前在本地系统上的所有用户的信息

  • OPTIONS

  • -a : 处理 /etc/utmp 文件或有全部信息的指定文件。等同于指定-bdlprtTu标志。

  • -b : 指出最近系统启动的时间和日期。

  • -d : 显示没有被 init 重新生成的所有到期的进程。退出字段用于显示死进程并包含死进程的终止和退出值(由 wait 进程返回的)。(这个标志用于通过察看应用程序返回的错误号来确定一个进程的结束原因。)

  • -l : 列出任何登录进程。

  • -m : 仅显示关于当前终端的信息。who -m 命令等同于 who am i 命令。

  • -p : 列出任何当前活动的和以前已由 init 生成的活动进程。

  • -q : 打印一份在本地系统上的用户和用户数的快速清单。

  • -r : 显示当前进程的运行级别。

  • -s : 仅列出名字、线路和时间字段。这个标志是缺省值;因此 , who who-s 命令是等效的。

  • -t : 显示 root 用户上一次用 date 命令对系统时钟做的更改。如果 date 命令自从系统安装以来还没有被运行过 , who -t 命令就不产生输出。

  • -u-i : 显示每个当前用户的用户名、tty、登录时间、线路活动和进程标识。

  • -A : 显示在 /etc/utmp 文件中的所有记帐项。这些项是通过 acctwtmp 命令生成的。

  • -H :显示一个标题

  • -T-w : 显示 tty 的状态并如下显示谁能够对 tty写入

命令

功能说明

w

显示登录用户信息

who

显示目前登入系统的用户信息。

whoami

显示的是有效用户ID

who am i

显示的是实际用户ID即用户登陆的时候的用户ID

5.4 last/lastb

linux系统中 , lastlastb命令用来列出目前与过去登录系统的用户相关信息。指令英文原义:

last, lastb - show listing of last logged in users

单独执行last指令时 , 它会读取位于/var/log/wtmp的文件 , 并把该给文件的内容记录的登录系统的用户名单全部显示出来。

单独执行lastb指令 , 它会读取位于/var/log/btmp的文件 , 并把该文件内容记录的登入系统失败的用户名单 , 全部显示出来。

  • OPTIONS

    • -a : 把从何处登入系统的主机名称或IP地址 , 显示在最后一行;

    • -d : 将IP地址转换成主机名称。当用户从远端而非本地主机登入系统时 , 所记录的将不仅是主机名称 , 还包括该远端主机的IP地址。 默认情况下会用IP地址来显示远端的主机 , 使用这项参数可将其换成主机名称;

    • -f : 指定记录文件。预设last指令会去读取/var/log目录里的btmp文件 ;

    • -n : 设置列出名单的显示列数 , 如果你只想查询最后登入系统的10位用户名称 , 可将显示列数设成"10" , 想查询最后的30位用户 , 则设为"30" , 依此类推;

    • -R : 不显示登入系统的主机名称或IP地址;

    • -x : 可显示系统关机、重新开机 , 以及执行等级的改变等信息。

[root@node01 ~]# last
root     pts/4        192.168.45.165   Mon Aug  9 18:04   still logged in   
root     pts/4        192.168.41.246   Mon Aug  9 15:48 - 18:02  (02:13)    
root     pts/6        192.168.41.246   Mon Aug  9 12:23 - 14:47  (02:24)    
root     pts/5        192.168.45.165   Mon Aug  9 11:13   still logged in   
root     pts/4        192.168.45.165   Mon Aug  9 09:53 - 13:23  (03:30)    
root     pts/1        172.16.25.240    Sat Aug  7 18:22 - 18:22  (00:00)    
reboot   system boot  4.14.37-4.el7.x8 Sat Aug  7 15:52 - 18:45 (2+02:52)   
root     pts/5        192.168.46.91    Fri Aug  6 16:35 - crash  (23:16)    
root     pts/3        192.168.46.91    Fri Aug  6 16:32 - crash  (23:20)    
root     pts/2        172.16.25.72     Fri Aug  6 16:29 - 17:04  (00:35)    
root     pts/7        172.16.25.72     Fri Aug  6 16:11 - 17:04  (00:53)    
  • 第一列信息 : 用户名 , 或者显示reboot(启动或者重启操作在这里会记录成reboot)

  • 第二列信息 : 终端位置 , pts/0 (伪终端或虚拟终端) 意味着从诸如SSHtelnet的远程连接的用户。

    tty (teletypewriter) 意味着直接连接到计算机或者本地连接的用户,如果是启动或者重启操作 , 这里会显示成system boot

  • 第三列信息 : 登录ip或者内核 , 如果你看见:0.0 或者什么都没有 , 这意味着用户通过本地终端连接。也有在状态中显示内核版本的信息 , 笔者猜测这些记录应该是属于系统的操作 , 如开机 , 关机 , 重启等操作

  • 第四列信息 : 开始时间,其中的日期格式为date +"%a %b %d"

  • 第五列信息 : 结束时间(still login in : 还未退出 ; down : 直到正常关机; crash : 直到强制关机 )

  • 第六列信息 : 持续时间

6. 会话管理

6.1 screen

Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话 , 并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

  • 会话恢复 : 只要Screen本身没有终止 , 在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断 , 用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候 , 也可以执行分离命令detach , 在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

  • 多窗口 : 在Screen环境下 , 所有的会话都独立的运行 , 并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换 , 并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作 , 如复制粘贴等 ; 还提供了类似滚动条的功能 , 可以查看窗口状况的历史记录。窗口还可以被分区和命名 , 还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话 , 并共享会话的所有特性( 比如可以看到完全相同的输出 )。它同时提供了窗口访问权限的机制 , 可以对窗口进行密码保护。

流行的Linux发行版 ( 例如Red Hat Enterprise Linux ) 通常会自带screen实用程序 , 如果没有的话 , 可以从GNU screen的官方网站下载。

[root@centos7 ~]# yum install screen 
[root@centos7 ~]# rpm -qi screen 
Name        : screen
Version     : 4.1.0
Release     : 0.27.20120314git3c2946.el7_9
Architecture: x86_64
Install Date: Tue 10 Aug 2021 02:32:11 PM CST
Group       : Applications/System
Size        : 936378
License     : GPLv2+
Signature   : RSA/SHA256, Fri 09 Apr 2021 11:59:43 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : screen-4.1.0-0.27.20120314git3c2946.el7_9.src.rpm
Build Date  : Tue 09 Mar 2021 11:26:52 PM CST
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.gnu.org/software/screen
Summary     : A screen manager that supports multiple logins on one terminal
Description :
The screen utility allows you to have multiple logins on just one
terminal. Screen is useful for users who telnet into a machine or are
connected via a dumb terminal, but want to use more than just one
login.
​
Install the screen package if you need a screen manager that can
support multiple logins on one terminal.
  • 语法

    • screen [ -options ] [ cmd [ args ] ]

    • screen -r [[pid.]tty[.host]]

    • screen -r sessionowner/[[pid.]tty[.host]]

  • OPTIONS

    • -A : 将所有的视窗都调整为目前终端机的大小。

    • -d <作业名称> : 将指定的screen作业离线。

    • -h <行数> :  指定视窗的缓冲区行数。

    • -m :  即使目前已在作业中的screen作业 , 仍强制建立新的screen作业。

    • -r <作业名称> :  恢复离线的screen作业。

    • -R :  先试图恢复离线的作业。若找不到离线的作业 , 即建立新的screen作业。

    • -s :  指定建立新视窗时 , 所要执行的shell。

    • -S <作业名称> : 指定screen作业的名称。

    • -v :  显示版本信息。

    • -x :  恢复之前离线的screen作业。

    • -X : 发送命令至

    • -ls/--list : 显示目前所有的screen作业。

    • -wipe :  检查目前所有的screen作业 , 并删除已经无法使用的screen作业。

  • session中的快捷键(所有命令都以 ctrl+a(C-a) 开始。)

    • C-a ? : 显示所有键绑定信息

    • C-a c : 创建一个新的运行shell的窗口并切换到该窗口

    • C-a n : (Next),切换到下一个window

    • C-a p : (Previous), 切换到前一个window

    • C-a 0..9 : 切换到第 0..9 window

    • C-a [Space] : 由视窗0循序切换到视窗9

    • C-a C-a : 在两个最近使用的 window 间切换

    • C-a x : 锁住当前的Window, 需用用户密码解锁

    • C-a d : (detach) , 暂时离开当前session , 将目前的 screen session (可能含有多个 windows) 丢到后台执行 , 并会回到还没进 screen 时的状态 , 此时在 screen session 里 , 每个 window 内运行的 process (无论是前台/后台)都在继续执行 , 即使 logout 也不影响。

    • C-a z : 把当前session放到后台执行 , 用shellfg命令则可回去。

    • C-a w : 显示所有窗口列表

    • C-a t : time,显示当前时间和系统负载

    • C-a k : kill window, 强行关闭当前的window

    • C-a [ : 进入copy mode,在copy mode 下可以回滚、搜索、复制就像使用vi一样。

      • C-b :Backward,PageUp

      • C-f : Forward,PageDown

      • H(大写) : High,将光标移至左上角

      • L:Low,将光标移至左下角

      • 0 : 移到行首

      • $ : 移到行末

      • w : forward one word ,以字为单位往前移

      • b : backward one word ,以字为单位往后移

      • Space :第一次按为标记区起点,第二次按为终点

      • Esc : 结束copy mode

    • C-a ] : paste,把刚刚在copy mode选定的内容贴上。

创建一个新的窗口

安装完成后 , 直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字 , 实践上推荐为每个screen会话取一个名字 , 方便分辨:

[root@centos8 ~]# screen -S david 

screen启动后 , 会创建第一个窗口 , 也就是窗口No. 0 , 并在其中打开一个系统默认的shell , 一般都会是bash。所以你敲入命令screen之后 , 会立刻又返回到命令提示符 , 仿佛什么也没有发生似的 , 其实你已经进入Screen的世界了。当然 , 也可以在screen命令之后加入你喜欢的参数 , 使之直接打开你指定的程序 , 例如:

[root@centos8 ~]# screen vi david.txt

screen创建一个执行vi david.txt的单窗口会话 , 退出vi 将退出该窗口/会话。

会话分离与恢复

你可以不中断screen窗口中程序的运行而暂时断开(detach) screen会话 , 并在随后时间重新连接(attach)该会话 , 重新控制各窗口中运行的程序。例如 , 我们打开一个screen窗口编辑/tmp/david.txt文件:

[root@centos8 ~]# screen vi /tmp/david.txt

之后我们想暂时退出做点别的事情 , 比如出去散散步 , 那么在screen窗口键入C-a d , Screen会给出detached提示: 暂时中断会话

半个小时之后回来了 , 找到该screen会话

[root@centos8 ~]# screen -ls

重新连接会话 :

[root@centos8 ~]# screen -r 12865

如果会话还是在连接状态(attached)

[root@centos7 ~]# screen -ls
There is a screen on:
        7052.pts-0.centos7      (Attached)
1 Socket in /var/run/screen/S-root.

[root@centos7 ~]# screen -d 7052
[7052.pts-0.centos7 detached.]

清除dead 会话

如果由于某种原因其中一个会话死掉了 ( 例如人为杀掉该会话 ) , 这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:

img

关闭或杀死窗口

正常情况下 , 当你退出一个窗口中最后一个程序(通常是bash)后 , 这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k , 这个快捷键杀死当前的窗口 , 同时也将杀死这个窗口中正在运行的进程。

如果一个Screen会话中最后一个窗口被关闭了 , 那么整个Screen会话也就退出了 , screen进程会被终止。

除了依次退出/杀死当前Screen会话中所有窗口这种方法之外 , 还可以使用快捷键C-a : , 然后输入quit命令退出Screen会话。需要注意的是 , 这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多 , 包括分屏可以输入split等 , 这也是实现Screen功能的一个途径 , 不过个人认为还是快捷键比较方便些。

会话锁定与解锁

Screen允许使用快捷键C-a s锁定会话。锁定以后 , 再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应 , 但你的输入都会被Screen中的进程接收到。快捷键C-a q可以解锁一个会话。

也可以使用C-a x锁定会话 , 不同的是这样锁定之后 ,会话会被Screen所属用户的密码保护 , 需要输入密码才能继续访问这个会话。

发送命令到screen会话

Screen会话之外 , 可以通过screen命令操作一个Screen会话 , 这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围 , 这里只看一个例子 , 体会一下在会话之外对Screen的操作 :

[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com

通过添加-d-x选项,来告诉screen,这个命令针对的screen 类型, Attached/Detached

屏幕分割

现在显示器那么大 , 将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键C-a S将显示器水平分割 , Screen 4.00.03版本以后 , 也支持垂直分屏 , 快捷键是C-a |。分屏以后 , 可以使用C-a <tab>在各个区块间切换 , 每一区块上都可以创建窗口并在其中运行进程。

可以用C-a X快捷键关闭当前焦点所在的屏幕区块 , 也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭 , 还可以通过窗口切换找到它。

screen-spilt

示例:

#创建一个test session,并进入到其中。
[root@centos7 ~]# screen -S  test

#显示所有运行的screen
[root@centos7 ~]# screen -ls
There is a screen on:
	4421.test	(Detached)
1 Socket in /var/run/screen/S-root.

#直接恢复到指定session中
[root@centos7 ~]# screen -r 4421
[root@centos7 ~]# screen -r test

#加入到指定屏幕中
[root@centos7 ~]# screen -x 4421

#screen创建一个执行vi david.txt的单窗口会话 ,  退出vi 将退出该窗口/会话,并且删除该窗口
[root@centos7 ~]#screen vi david.txt

#退出并关闭screen 会话
[root@centos7 ~]#exit

显示帮助信息:C-a ?

screen-ctrl-a.png

6.2 tmux

Tmux 是一个终端复用器 ( terminal multiplexer ) , 非常有用 , 属于常用的开发工具。

Tmux 就是会话与窗口的"解绑"工具 , 将它们彻底分离。

  • 它允许在单个窗口中 , 同时访问多个会话。这对于同时运行多个命令行程序很有用。

  • 它可以让新窗口"接入"已经存在的会话。

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

  • 它还支持窗口任意的垂直和水平拆分。

类似的终端复用器还有 GNU ScreenTmux 与它功能相似 , 但是更易用 , 也更强大。

Tmux 一般需要自己安装。

# Ubuntu 或 Debian
$ sudo apt-get install tmux

# CentOS 或 Fedora
$ sudo yum install tmux

# Mac
$ brew install tmux

安装完成后 , 键入tmux命令 , 就进入了 Tmux 窗口。

$ tmux

上面命令会启动 Tmux 窗口 , 底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称 ) , 右侧是系统信息。

bg2019102006

按下Ctrl+d或者显式输入exit命令 , 就可以退出 Tmux 窗口。

$exit

Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b , 即先按下Ctrl+b , 快捷键才会生效。

举例来说 , 帮助命令的快捷键是Ctrl+b ?。它的用法是 , 在 Tmux 窗口中 , 先按下Ctrl+b , 再按下? , 就会显示帮助信息。

然后 , 按下 ESC 键或q键 , 就可以退出帮助。

以下是 Tmux 的最简操作流程。

  1. 新建会话tmux new -s my_session

  2. Tmux 窗口运行所需的程序。

  3. 按下快捷键Ctrl+b d将会话分离。

  4. 下次使用时 , 重新连接到会话tmux attach-session -t my_session

会话管理

  • 新建会话

    第一个启动的 Tmux 窗口 , 编号是0 , 第二个窗口的编号是1 , 以此类推。这些窗口对应的会话 , 就是 0 号会话、1 号会话。

    使用编号区分会话 , 不太直观 , 更好的方法是为会话起名。

    $ tmux new -s <session-name>

    上面命令新建一个指定名称的会话

  • 分离会话

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

    $tmux detach

    上面命令执行后 , 就会退出当前 Tmux 窗口 , 但是会话和里面的进程仍然在后台运行。

    tmux ls命令可以查看当前所有的 Tmux 会话。

    $ tmux ls
    # or
    $ tmux list-session
  • 接入会话

    tmux attach命令用于重新接入某个已存在的会话。

    # 使用会话编号
    $ tmux attach -t 0
    
    # 使用会话名称
    $ tmux attach -t <session-name>
  • 杀死会话

    tmux kill-session命令用于杀死某个会话。

    # 使用会话编号
    $ tmux kill-session -t 0
    
    # 使用会话名称
    $ tmux kill-session -t <session-name>
  • 切换会话

    tumx switch命令用户切换会话

    # 使用会话编号
    $ tmux switch -t 0
    
    # 使用会话名称
    $ tmux switch -t <session-name>
  • 重命令会话

    tmux rename-session命令用于重命名会话。

    $ tmux rename-session -t 0 <new-name>

    上面命令将0号会话重命名。

  • 会话快捷键

    • Ctrl+b d : 分离当前会话。

    • Ctrl+b s : 列出所有会话。

    • Ctrl+b $ : 重命名当前会话。

窗口操作

Tmux 可以将窗口分成多个窗格(pane ) , 每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。

  • 划分窗格

    tmux split-window命令用来划分窗格。

    # 划分上下两个窗格
    $ tmux split-window
    
    # 划分左右两个窗格
    $ tmux split-window -h

    image-20250724232958238

  • 移动光标

    tmux select-pane命令用来移动光标位置。

    # 光标切换到上方窗格
    $ tmux select-pane -U
    
    # 光标切换到下方窗格
    $ tmux select-pane -D
    
    # 光标切换到左边窗格
    $ tmux select-pane -L
    
    # 光标切换到右边窗格
    $ tmux select-pane -R
  • 交换窗格位置

    tmux swap-pane命令用来交换窗格位置。

    # 当前窗格上移
    $ tmux swap-pane -U
    
    # 当前窗格下移
    $ tmux swap-pane -D
  • 窗格快捷键

    • 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>
  • 重命名窗口

    tmux rename-window命令用于为当前窗口起名 ( 或重命名 ) 。

    $ tmux rename-window <new-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
​
# 列出当前所有 Tmux 会话的信息
$ tmux info
​
# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf

7. 其他命令

7.1 sz,rz

这个命令用处即直接将文件在linuxWindows系统中相互传递 ,需要安装lrzsz-0.12.20.tar.gz

  • sz filename : 直接将文件传递到本地

  • rz : 运行这个命令 , 打开一个窗口 , 将选择文件传递到linux 系统中

7.2 echo

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

  • 功能 : 显示字符

  • 语法 : echo [-neE][字符串]

  • 选项 :

    • -E : (默认)不支持\解释功能

    • -n : 不自动换行

    • -e : 启用\字符的解释功能

  • 显示变量

    • echo "$var_name" 变量会替换 , 弱引用

    • echo '$var_name' 变量不会替换 , 强引用 。启用命令选项-e ,若字符串中出现以下字符 , 则特别加以处理 , 而不会将他当成一般文字输出

    • \a :发出警告声

    • \b : 退格键

    • \c : 最后不加上换行符号

    • \n : 换行且光标移动至行首

    • \r : 回车 , 即光标一直行首 , 但不还行

    • \t : 插入tab

    • \\ : 插入\字符

    • \0nnn插入nnn(八进制)所代表的ASCII字符

    • \xHH 插入HH(十六进制)所代表的ASCII字符

关于"" ,'',`` ,\$(),{} , 各种括号的用法 。

对于"" ,表示弱引用 , 会将""里面有$的字符串 , 当做变量显示 。 '' 表示强引用 , 直接将里面的字符当做字符串显示出来 。

``,将里面的字符串当做命令执行 , 并将执行的结果显示出来 。 $():用法与``一样 {}直接用几个例子加以说明

[root@localhost mnt]# touch file{1,10}
[root@localhost mnt]# ls
file1  file10
[root@localhost mnt]# touch file{1..10}
[root@localhost mnt]# ls
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
[root@localhost mnt]# touch file{1..10..2}
[root@localhost mnt]# ls
file1  file3  file5  file7  file9
[root@localhost mnt]# touch file{0000..10..2}
[root@localhost mnt]# ls
file0000  file0002  file0004  file0006  file0008  file0010
[root@localhost mnt]# 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@localhost mnt]# echo {A..z..2}{1..3}
A1 A2 A3 C1 C2 C3 E1 E2 E3 G1 G2 G3 I1 I2
I3 K1 K2 K3 M1 M2 M3 O1 O2 O3 Q1 Q2 Q3 S1
S2 S3 U1 U2 U3 W1 W2 W3 Y1 Y2 Y3 [1 [2 [3 
]1 ]2 ]3 _1 _2 _3 a1 a2 a3 c1 c2 c3 e1 e2 
e3 g1 g2 g3 i1 i2 i3 k1 k2 k3 m1 m2 m3 o1
o2 o3 q1 q2 q3 s1 s2 s3 u1 u2 u3 w1 w2 w3 
y1 y2 y3
​

7.3 chvt

Linux系统中 , 虚拟控制台(VTs)是一种允许多个用户或任务同时访问系统的机制。每个VT都是一个独立的终端会话 , 可以在其中运行不同的命令和程序。默认情况下 , Linux通常会配置多个VTs , 可以通过快捷键 ( 如Ctrl+Alt+F1F6 ) 在不同的VTs之间切换。

chvt命令允许用户直接从一个VT切换到另一个VT , 而无需使用快捷键。这对于脚本编程或自动化任务来说是非常有用的。 chvt 1 : 切换至 /dev/tty1

7.4 rev

rev命令 将文件中的每行内容以字符为单位反序输出 , 即第一个字符最后输出 , 最后一个字符最先输出 , 依次类推。

[root@localhost ~]# cat iptables.bak
# Generated by iptables-save v1.3.5 on Thu Dec 26 21:25:15 2013
*filter
:INPUT DROP [48113:2690676]
:FORWARD accept [0:0]
:OUTPUT ACCEPT [3381959:1818595115]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Thu Dec 26 21:25:15 2013
​
[root@localhost ~]# rev iptables.bak 
3102 51:52:12 62 ceD uhT no 5.3.1v evas-selbatpi yb detareneG #
retlif*
]6760962:31184[ PORD TUPNI:
]0:0[ TPECCA DRAWROF:
]5115958181:9591833[ TPECCA TUPTUO:
 TPECCA j- ol i- TUPNI A-
 TPECCA j- 22 tropd-- pct m- pct p- TUPNI A-
 TPECCA j- 08 tropd-- pct m- pct p- TUPNI A-
 TPECCA j- DEHSILBATSE,DETALER etats-- etats m- TUPNI A-
 TPECCA j- pmci p- TUPNI A-
 TPECCA j- ol o- TUPTUO A-
TIMMOC
3102 51:52:12 62 ceD uhT no detelpmoC #

7.5 iconv

iconv命令是用来转换文件的编码方式的 ( Convert encoding of given files from one encoding to another ) , 比如它可以将UTF8编码的转换成GB18030的编码 , 反过来也行。JDK中也提供了类似的工具native2asciiLinux下的iconv开发库包括iconv_open,iconv_close,iconvC函数 , 可以用来在C/C++程序中很方便的转换字符编码 , 这在抓取网页的程序中很有用处 , 而iconv命令在调试此类程序时用得着。

首先 , 我们要知道支持的字符编码有哪些 , 这个可以用-l参数得到(List known coded character sets ) 。

格式 : iconv -l

其次 , 是怎样转换 , 如下所示 :

格式 : iconv -f from-encoding -t to-encoding inputfile

上面的调用方式 , 会把输出打印在屏幕上 , 如果要输出到文件 , 可以像下面这样

格式 : iconv -f from-encoding -t to-encoding inputfile -o outputfile

示例 1 : 基本编码转换

GB2312 编码的文件转换为 UTF-8 :

iconv -f GB2312 -t UTF-8 input.txt -o output.txt

示例 2 : 处理标准输入输出

通过管道转换文本 :

cat gb2312_file.txt | iconv -f GB2312 -t UTF-8

示例 3 : 忽略无法转换的字符

iconv -f GBK -t UTF-8//IGNORE input.txt -o output.txt

7.6 xxd

xxd 是一个 Linux 下的命令行工具,用于将文件或数据转换为十六进制格式显示,类似于十六进制查看器。

xxd 命令也可以将十六进制数据重新转换为二进制文件。

xxd 命令通常用于调试、文件内容分析和数据转换。

  • 语法格式: xxd [options] [inputfile [outputfile]]

  • 参数说明

    • -r : 将十六进制数据还原为二进制 ( 反向操作 ) 。

    • -p : 以连续的纯十六进制形式 ( 不带偏移地址和 ASCII ) 输出。

    • -c cols : 每行输出多少个字节,默认为 16。

    • -g bytes : 每组显示多少字节,默认为 2。

    • -s offset : 从文件的某个偏移位置开始读取 ( 支持负数表示从文件末尾开始 ) 。

    • -l length : 只显示指定长度的字节。

    • -u : 将输出的十六进制字符转为大写。

    • -i : 以 C 语言的数组格式输出。

    • -b : 将输出转换为二进制格式,而不是十六进制。

示例显示

  1. 将文件内容以十六进制显示

    xxd filename.txt

    此命令会输出文件 filename.txt 的十六进制表示,默认每行显示 16 个字节的数据。

    输出示例 :

    00000000: 4865 6c6c 6f0a                           Hello.
  2. 指定每行输出的字节数

    xxd -c 8 filename.txt

    每行显示 8 个字节。

    输出示例:

    00000000: 4865 6c6c 6f0a 0000                      Hello...
  3. 将十六进制还原为原始文件

    xxd -r hexfile.txt original.bin

    此命令会将十六进制数据 hexfile.txt 还原为二进制文件 original.bin

  4. 从文件的某个偏移位置开始显示

    xxd -s 0x10 filename.txt

    从偏移量 0x10 开始显示十六进制内容。

  5. 以纯十六进制格式输出 ( 不带偏移地址和 ASCII )

    xxd -p filename.txt

    输出纯十六进制数据,所有数据连续排列。

    输出示例 :

    48656c6c6f0a
  6. 生成 C 语言中的数组格式

    xxd -i filename.txt

    此命令会将文件内容以 C 语言数组的形式输出。

    输出示例 :

    unsigned char filename_txt[] = {
      0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x0a
    };
    unsigned int filename_txt_len = 6;
  7. 将输出的十六进制字母变为大写

    xxd -u filename.txt

    此命令将十六进制字母输出为大写。

    输出示例 :

    00000000: 4865 6C6C 6F0A                           Hello.
  8. 只显示一定长度的数据

    xxd -l 16 filename.txt

    此命令仅显示前 16 个字节的数据。

  9. 将数据输出为二进制形式

    xxd -b filename.txt

    此命令会将文件内容以二进制位显示,而不是十六进制。

    输出示例 :

    00000000: 01001000 01100101 01101100 01101100 01101111 00001010  Hello.

7.7 hexdump

hexdumpLinux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。

参数

  • -n length : 只格式化输入文件的前length个字节。

  • -C : 输出规范的十六进制和ASCII码。

  • -b : 单字节八进制显示。

  • -c : 单字节字符显示。

  • -d : 双字节十进制显示。

  • -o : 双字节八进制显示。

  • -x : 双字节十六进制显示。

  • -s : 从偏移量开始输出。

  • -e : 指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:'a/b "format1" "format2"'。

示例:

  1. 以8进制显示文件里面的字符。

    [root@DB-Server ~]# cat >test.txt
    ABCDEF    
    GHIJKM
    123456
    [root@DB-Server ~]#  hexdump -b test.txt
    0000000 101 102 103 104 105 106 012 107 110 111 112 113 115 012 061 062
    0000010 063 064 065 066 012                                            
    0000015

    注意:一行共16个字节,一行开始以十六进制显示偏移值(如下所示,第一行字符串只显示到D,第十六个字节,后面的F12*DFDF换行显示)

    [root@DB-Server ~]# cat >test.txt
    ABCDEFGHIJKLMNODF12*DFDF
     
    [2]+  Stopped                 cat > test.txt
    You have new mail in /var/spool/mail/root
    [root@DB-Server ~]# hexdump -b test.txt 
    0000000 101 102 103 104 105 106 107 110 111 112 113 114 115 116 117 104
    0000010 106 061 062 052 104 106 104 106 012                            
    0000019
    [root@DB-Server ~]# hexdump -c test.txt 
    0000000   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   D
    0000010   F   1   2   *   D   F   D   F  \n                            
    0000019
  2. ASCII字符显示文件中字符

    [root@DB-Server ~]# hexdump -c test.txt 
    0000000   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   D
    0000010   F   1   2   *   D   F   D   F  \n                            
    0000019

    hexdumpASCII字符显示时,可以输出换行符,这个功能可以用来检查文件是!的换行符格式还是Widows格式换行符。如下所示

    73542-20151226104325093-1257976423

  3. 16进制和相应的ASCII字符显示文件里的字符

    [root@DB-Server ~]# hexdump -C test.txt 
    00000000  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e 4f 44  |ABCDEFGHIJKLMNOD|
    00000010  46 31 32 2a 44 46 44 46  0a                       |F12*DFDF.|
    00000019
  4. 只显示格式文件中前n个字符

    [root@DB-Server ~]# hexdump -C -n 5 test.txt 
    00000000  41 42 43 44 45                                    |ABCDE|
    00000005
  5. 以偏移量开始格式输出。如下所示指定参数-s 5 ,前面的ABCDE字符没有了。

    [root@DB-Server ~]# hexdump -C test.txt 
    00000000  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e 4f 44  |ABCDEFGHIJKLMNOD|
    00000010  46 31 32 2a 44 46 44 46  0a                       |F12*DFDF.|
    00000019
    [root@DB-Server ~]# hexdump -C -s 5 test.txt 
    00000005  46 47 48 49 4a 4b 4c 4d  4e 4f 44 46 31 32 2a 44  |FGHIJKLMNODF12*D|
    00000015  46 44 46 0a                                       |FDF.|
    00000019


参考链接

知乎:白魁耀: 第2章 系统本地化和键盘设置

博客园:lyongerr:【摘】linux之shutdown、halt和reboot命令详解 博客园:asxe:Linux date命令的用法 ( 转 ) CSDN:vc66vcc:linux的/etc/sysconfig/clock和/etc/localtime有什么区别

博客园:小学徒V : alias指令 : 设置命令别名 博客园:夜落朦空:【Linux笔记】ldconfig、ldd CSDN: winycg:linux ldconfig命令,环境变量文件配置详解

CSDN:生命只剩百分之一:last与lastb文件详解

CSDN:大大大zzc:screen

Tmux 使用教程 - 阮一峰的网络日志

Linux xxd 命令 | 菜鸟教程

Linux iconv 命令 | 菜鸟教程

Linux命令学习总结:hexdump - 潇湘隐者 - 博客园

熊熊