Linux基础入门和帮助

本文最后更新于:2023年12月5日 晚上

终端

- 控制台 /dev/console
- 串行终端 /dev/ttyS#
- 虚拟终端: tty: /dev/tty#
- 伪终端: pty: /dev/pts/#

终端、Shell、tty 和控制台(console)有什么区别? - 知乎
Linux 终端(tty)
Linux 伪终端(pty)

控制台 /dev/console

计算机启动的时候,所有的信息都会显示到控制台上,而不会显示到终端上

串行终端 /dev/ttyS

计算机串行端口连接的终端设备, 这些串行端口所对应的设备名称是/dev/tty0、/dev/tty1 等,分别对应于系统下的 COM1、COM2 等

虚拟终端: tty: /dev/tty

每打开一个 terminal,系统会启动一个 shell 与这个 terminal 关联起来, shell=命令行解释器, tty 和 terminal 是同义词

tty 是虚拟终端, 与之对应的是 console 是物理终端

伪终端: pty: /dev/pts/

使用 tty1-6 的情况一般为 Linux 系统直接连了键盘和显示器,或者是使用了 vSphere console 等虚拟化方案,其它情况下使用的都是伪终端, 通过 SSH 等方式建立的连接中使用的都是伪终端

系统信息

lscpu
free
lsblk 和 df
uname
cat /etc/redhat-release
cat /etc/os-release
cat /etc/centos-release
lsb_release
# 查看cpu
[lujinkai@centos8 ~]$ lscpu
[lujinkai@centos8 ~]$ cat /proc/cpuinfo
# 查看内存
[lujinkai@centos8 ~]$ free -h
[lujinkai@centos8 ~]$ cat /proc/meminfo
# 查看硬盘和分区情况
[root@centos8 ~]# 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  100G  0 part /
├─sda3   8:3    0   50G  0 part /data
├─sda4   8:4    0    1K  0 part
└─sda5   8:5    0    2G  0 part [SWAP]
sr0     11:0    1  1.6G  0 rom
# -f 显示文件系统的信息
[root@centos8 /]# lsblk -f
NAME   FSTYPE  LABEL                      UUID                                 MOUNTPOINT
sda
├─sda1 ext4                               a489cd2b-daf2-4d94-90ab-696a21284f6a /boot
├─sda2 xfs                                30e97194-a6ff-42cb-b6e0-3374d3e614e7 /
├─sda3 xfs                                721abfdb-0d93-4559-9ac1-a487ecabf339 /data
├─sda4
└─sda5 swap                               1b064969-1539-4d0a-ab1f-6f304f99ac9e [SWAP]
sr0    iso9660 CentOS-8-2-2004-x86_64-dvd 2020-06-08-22-08-12-00
[lujinkai@centos8 ~]$ cat /proc/partitions
major minor  #blocks  name

   8        0  209715200 sda
   8        1    1048576 sda1
   8        2  104857600 sda2
   8        3   52428800 sda3
   8        4          1 sda4
   8        5    2097152 sda5
  11        0    1678336 sr0

# 查看系统版本信息
# 查看内核版本
[lujinkai@centos8 ~]$ uname
Linux
[lujinkai@centos8 ~]$ uname -r
4.18.0-80.el8.x86_64
[lujinkai@centos8 ~]$ uname -a
Linux centos8.mageedu.org 4.18.0-80.el8.x86_64 #1 SMP Tue Jun 4 09:19:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
# 查看操作系统发行版本
[lujinkai@centos8 ~]$ cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
[lujinkai@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"
[lujinkai@centos8 ~]$ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 8.0.1905 (Core)
Release:        8.0.1905
Codename:       Core

用户登录信息

# 我是谁
[lujinkai@centos8 ~]$ whoami
lujinkai
# 我是谁 详细
[lujinkai@centos8 ~]$ who am i
lujinkai pts/1        2020-07-27 22:12 (10.0.0.1)
# 当前所有已登录用户信息
[lujinkai@centos8 ~]$ who
root     tty1         2020-07-27 22:21
root     pts/0        2020-07-27 22:11 (10.0.0.1)
lujinkai pts/1        2020-07-27 22:12 (10.0.0.1)
# 当前所有已登录用户信息 显示正在执行的操作
[lujinkai@centos8 ~]$ w
 22:21:22 up 10 min,  3 users,  load average: 0.05, 0.08, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                22:21   18.00s  0.01s  0.01s -bash
root     pts/0    10.0.0.1         22:11   10:12   0.02s  0.02s -bash
lujinkai pts/1    10.0.0.1         22:12    2.00s  0.08s  0.02s w

主机名

hostname NAME                 # 临时生效
hostnamectl set-hostname NAME # 永久生效
# 永久生效还可以修改文件 /etc/hostname
  1. 主机名不支持使用下划线_ , 可以使用字母、横线或数字组合
  2. 主机名不要使用数字结尾,因为有些软件对主机名有要求

命令提示符

[root@centos8 ~]$echo $PS1
\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]$

\e   # 控制符\033
\u   # 当前用户
\h   # 主机名简称
\H   # 主机名
\w   # 当前工作目录
\W   # 当前工作目录基名
\t   # 24小时时间格式
\T   # 12小时时间格式

命令

命令格式

三种风格:短选项(UNIX)、长选项(GNU)、BSD 风格选项

ctrl + c : 终止命令执行;ctrl + d : 退出终端

内部命令和外部命令

内部命令是 shell 内置的,外部命令是自己安装的

type -a COMMAND  # 判断一个命令是内部命令还是外部命令

# 内部命令:
enable COMMAND  # 启用内部命令
enable -n COMMAND # 禁用内部命令
enable -n   # 查看所有禁用的内部命令

# 外部命令:
which COMMAND  # 查看外部命令的执行文件路径
whereis COMMAND  # 除了查看外部命令执行文件路径,还能查看man文件的路径等信息

命令执行顺序

别名 > 内部命令 > hash > $PATH > command not found

echo

打印变量的时候,变量加引号的规则和 php 一样,单引号当成字符串输出,双引号则解析变量

-e:启用 \ 字符的解释功能 (escapes 转义符)

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

# 示例:
$echo -e "\a"

字符集和编码

Unicode 是字符集, Unicode 的编码方案有 UTF-8、UTF-16、UTF-32

bash shell

# 显示当前使用的shell
echo $SHELL
# 显示当前系统使用的所有shell
cat /etc/shells

bash 快捷键

Ctrl + a 光标移到命令行首,相当于 Home
Ctrl + e 光标移到命令行尾,相当于 End

hash 缓存表

shell 内部命令本来就在内存中, hash 缓存的是外部命令的路径

# 显示hash缓存
hash
# 清除某条命令缓存
hash -d COMMAND
# 清除所有命令的内存
hash -r

日期和时间

date
  -d # display time described by STRING, not 'now'
  -s # set time described by STRING
clock
timedatectl
cal
# 显示时间戳
[lujinkai@centos8 ~]$ date +%s
1595857012
# 将时间戳格式化
[lujinkai@centos8 ~]$ date -d @`date +%s`
Mon Jul 27 21:40:31 CST 2020
[lujinkai@centos8 ~]$ date -d @`date +%s` +%F
2020-07-27
[lujinkai@centos8 ~]$ date -d @1595857012 +%F_%T
2020-07-27_21:40:34
[lujinkai@centos8 ~]$date "+%F %T"
2021-03-16 01:12:53
# 昨天
[lujinkai@centos8 ~]$ date -d '-1 day' +%F
2020-07-27
# 明天
[lujinkai@centos8 ~]$ date -d '1 day' +%F
2020-07-29

# %F  完整日期格式,等价于 %Y-%m-%d
# %T  时间,等于%H:%M:%S
# 以硬件时间为准, 校正系统时间
[root@centos8 ~]# clock -s
# 以系统时间为准, 校正硬件时间
[root@centos8 ~]# clock -w
# 显示系统全部的时区
[root@centos8 ~]# timedatectl list-timezones
# 查找上海
[root@centos8 ~]# timedatectl list-timezones | grep 'Shanghai'
Asia/Shanghai
# 设置时区为上海
[root@centos8 ~]# timedatectl set-timezone Asia/Shanghai
# 查看
[root@centos8 ~]# timedatectl status
               Local time: Mon 2020-07-27 21:56:19 CST
           Universal time: Mon 2020-07-27 13:56:19 UTC
                 RTC time: Mon 2020-07-27 13:56:19
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
# 查看当前所在的时区
[root@centos8 ~]# ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Jul 23 16:33 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
# 日历
# 显示全年日历
[root@centos8 ~]# cal -y
[root@centos8 ~]# cal 2020
# 显示一个月的日历
[root@centos8 ~]# cal 7 2020

关机和重启

halt     # 关机 相当于 shutdown -h
poweroff # 关机 相当于shutdown -p
reboot   # 重启 相当于shutdown -r

shutdown -h +3                    # 定时关机 3分钟后自动关机
shutdown -h 00:00 "class is over" # 定时关机 00:00关机 并提示'class is over'
shutdown -c                       # 取消关机

但是在 VMware 中, CentOS7、8 和 Ubuntu18.04 关机的时候, 使用halt会报错, 使用shutdown -h now就能顺利关机, 不知道为什么?

计算器 bc

-q 表示不显示欢迎信息

bc 有四个内置变量,我们在计算时会经常用到,如下表所示:

变量名 作 用
scale 指定精度,也即小数点后的位数;默认为 0,也即不使用小数部分。
ibase 指定输入的数字的进制,默认为十进制。
obase 指定输出的数字的进制,默认为十进制。
last 或者 . 表示最近打印的数字

注意:obase 要尽量放在 ibase 前面,因为 ibase 设置后,后面的数字都是以 ibase 的进制来换算的

命令历史 history

# 显示最近5条历史命令
[root@4710419222 test]# history 5
 7618  2020-07-28 19:19:03 root set -B
 7619  2020-07-28 19:19:05 root ls {1,4,6}.log
 7620  2020-07-28 19:21:46 root history
 7621  2020-07-28 19:22:06 root history 10
 7622  2020-07-28 19:22:16 root history 5
 # 清除此次登录记录的命令
[root@4710419222 ~]# history -c
[root@4710419222 ~]# history
    1  2020-07-28 19:23:15 root history
 # !n 执行第n条历史命令
 # !$ 调用前一条命令的最后一个参数
 # !* 调用前一条命令的所有参数
 # ctrl + r 搜索历史命令快捷键
 # !string 执行上一条以string开头的命令

相关环境变量:

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

获得帮助 (重点)

# 第一步: 判断命令为内部命令还是外部命令, 如果二者都是, 则查询内部命令
[root@4710419222 ~]# type -a echo
echo is a shell builtin
echo is /usr/bin/ech
# 第二步: 使用whatis查询man的分组
[root@4710419222 ~]# whatis echo
echo (1)             - display a line of text
echo (3x)            - curses input options
# 第三步
[root@4710419222 ~]# man 1 echo
# 如果是外部命令, 简单的查询可以省略第二步, 直接 --help
[root@4710419222 ~]# type hostname
hostname is /usr/bin/hostname
[root@4710419222 ~]# hostname --help

范例二:

[root@centos8 ~]# type -a history
history is a shell builtin
[root@centos8 ~]# whatis history
history (1)          - bash built-in commands, see bash(1)
[root@centos8 ~]# man 1 history
# 此时发现找不到history
# 可以使用 /keyword 进行搜索, 使用 n 和 N 进行上下查找
# 然后很容易就找到了history的man手册

man 页面分组

不同类型的帮助称为不同的“章节”,统称为 Linux 手册

       1   Executable programs or shell commands
       2   System calls (functions provided by the kernel)
       3   Library calls (functions within program libraries)
       4   Special files (usually found in /dev)
       5   File formats and conventions eg /etc/passwd
       6   Games
       7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
       8   System administration commands (usually only for root)
       9   Kernel routines [Non standard]
1:用户命令
2:系统调用
3:C库调用
4:设备文件及特殊文件
5:配置文件格式
6:游戏
7:杂项
8:管理类的命令
9:Linux 内核API

man 帮助段落说明

  • NAME 名称及简要说明
  • SYNOPSIS 用法格式说明
  • [] 可选内容
  • <> 必选内容
  • a|b 二选一
  • { } 分组
  • … 同一内容可出现多次
  • DESCRIPTION 详细说明
  • OPTIONS 选项说明
  • EXAMPLES 示例
  • FILES 相关文件
  • AUTHOR 作者
  • COPYRIGHT 版本信息
  • REPORTING BUGS bug 信息
  • 从 SEE ALSO 其它帮助参考

man 命令的操作方法

  • space 下一页
  • b 上一页
  • 1G 回到首部
  • G 翻至文件尾部
  • /keyword 搜索关键字, 使用 n 和 N 上下查找

Linux基础入门和帮助
http://blog.lujinkai.cn/运维/基础/Linux基础入门和帮助/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议