2.Linux基础入门

1.命令基本格式

1.1命令提示符基本格式

[root@centos8 ~]# 
  • root:表示当前用户

  • @:分隔符没有实际意义

  • centos8:主机名

  • ~:当前所在目录

  • #:命令提示符。#表示超级用户,$表示普通用户

[root@centos8 ~]# su user
[user@centos8 root]$ 

1.2命令基本格式

COMMAND [OPTIONS...] [ARGUMENTS...]
  • []:表示其中的内容是可选的

  • OPTIONS:命令的附加功能

    ​ 长选项:GUN风格,如--human

    ​ 短选项:UNIX 风格选项,如-l

    ​ BSD风格选项:一个字母,例如:a,使用相对较少

  • ARGUMENTS:命令的作用对象,如文件、用户等

[root@centos8 home]# ll -h
[root@centos8 home]# ll --human
[root@centos8 home]# ps aux

注意:多个命令可以用 ";" 符号分开,一个命令可以用\分成多行

1.3命令的执行

1.3.1 执行命令过程

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

1.3.2 shell中可执行的两类命令

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

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

  • 命令查找顺序依次为别名→内部命令→外部命令

使用type可以判断命令类型

[root@centos8 ~]# type -a bash
bash is /usr/bin/bash
[root@centos8 ~]# type echo
echo is a shell builtin

1.3.3 Hash缓存表

系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的 路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不 存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率

  • hash -l 显示hash缓存及name
  • hash -p path name 将命令全路径path起别名为name
  • hash -d name 清除name缓存
  • hash -r 清除所有hash缓存
  • hash -t name 查看name缓存的路径
[root@centos8 ~]# hash -l
builtin hash -p /usr/bin/lscpu lscpu
builtin hash -p /usr/bin/lsblk lsblk
[root@centos8 ~]# hash -d lscpu
[root@centos8 ~]# hash -l
builtin hash -p /usr/bin/lsblk lsblk

2.常见的命令

2.1查看系统硬件信息

2.1.1 查看cpu的信息

lscpu

cat /proc/cpuinfo

[root@centos8 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1 #每个core 有几个线程
Core(s) per socket: 4 #每个槽位有4个core
Socket(s): 2 #服务器面板上有2个cpu 槽位
NUMA node(s): 2 #nodes的数量

[root@centos8 ~]# cat /proc/cpuinfo

2.1.2 查看内存大小

free

cat /proc/meminfo

[root@centos8 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1870836      202132      842644        1996      826060     1503060
Swap:             0           0           0

[root@centos8 ~]# cat /proc/meminfo 
MemTotal:        1870836 kB
MemFree:          842872 kB
MemAvailable:    1503288 kB
Buffers:            2104 kB
Cached:           758672 kB
SwapCached:            0 kB
...

2.1.3 查看硬盘和分区情况

lsblk

[root@centos8 ~]# lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  50G  0 disk 
└─vda1 253:1    0  50G  0 part /

2.2查看系统信息

2.2.1 查看系统版本信息

uname:查看系统内核版本

[root@centos8 ~]# uname -r
4.18.0-193.14.2.el8_2.x86_64

cat /etc/redhat-release(查看系统发行版本)

[root@centos8 ~]# cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core) 
[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"

#ubuntu查看发行版本
[root@ubuntu1804 ~]#cat /etc/os-release
[root@ubuntu1804 ~]#cat /etc/issue
[root@ubuntu1804 ~]#lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic

2.2.2设置主机名称

hostname name(此方法临时生效)

[root@centos8 ~]#hostname bj-yz-k8s-node1-100-10.lx

主机名设置应当遵循一定的规范,如上格式为城市+区域+业务格式,生产中应根据公司实际业务进行设置

2.3管理内部命令

enable 管理内部命令

  • enable cmd 启用内部命令
  • enable –n cmd 禁用内部命令
  • enable –n 查看所有禁用的内部命令

2.4日期和时间

2.4.1 cal

cal [options] [[[day] month] year]

[root@centos8 ~]# cal 7 2019
      July 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     

2.4.2 date

显示和设置系统日期和时间

date

date [OPTION]... [+FORMAT]

date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]][.ss]]

  • -d, --date=STRING display time described by STRING, not 'now'

  • %F full date; same as %Y-%m-%d

  • %T time; same as %H:%M:%S

  • %u day of week (1..7); 1 is Monday

[root@centos8 ~]# date
Sat Nov 28 16:48:36 CST 2020
#设置当前日期为2020-11-29
[root@centos8 ~]# date 112922552020
Sun Nov 29 22:55:00 CST 2020
[root@centos8 ~]# date +%Y/%m/%d
2020/11/28
[root@centos8 ~]# touch `date +%F_%H-%M-%S`.log
[root@centos8 ~]# ls
2020-11-30_06-33-23.log  anaconda-ks.cfg  a.txt  
#显示当前时间,格式:2016-06-18 10:20:30
[root@centos8 ~]# date '+%F %T'
2020-11-30 06:25:06
#显示前天是星期几
[root@centos8 ~]# date -d '-2 day' +%u
5

2.4.3 clock\hwclock

显示硬件时间

-s --hctosys 以硬件时钟为准,校正系统时钟

-w --systohc 以系统时钟为准,校正硬件时钟

2.5计算器

bc

[root@centos8 ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1+11
12
#输出十进制,输入二进制
obase=10
ibase=2
101
5

2.6关机和重启

2.6.1命令

halt:关机

poweroff:关机

shutdown:关机和重启

shutdown [OPTIONS...] [TIME] [WALL...]
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7)
	now: 立刻,相当于+0
	+#: 相对时间表示法,几分钟之后;例如 +3
	hh:mm: 绝对时间表示,指明具体时间

reboot:重启

init 0:重启

2.6.2正确关机方法

资料同步sync

执行关机或重启命令

2.7用户登陆信息查看

w:显示系统中所有登陆的用户及正在进行的操作

[root@centos8 ~]# w
 17:14:30 up 15 days, 18:00,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    110.152.182.41   13:44    1.00s  0.19s  0.00s w

whoami: 显示当前登录有效用户

[root@centos8 ~]# whoami
root
[root@centos8 ~]# who am i 
root     pts/0        2020-11-29 02:39 (10.0.0.1)

who: 系统当前所有的登录会话

[root@centos8 ~]# who
root     pts/0        2020-11-28 13:44 (110.152.182.41)

2.8会话管理

用户使用终端窗口与计算机进行交互的过程称为会话(session)

会话的一个重要特点是,窗口与其中启动的进程是连在一起的。关闭窗口,会话内部的进程也随之结束,即使进程没有运行完

我们使用终端复用器软件可以解决这个问题

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

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

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

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

2.8.1 screen

系统最小化安装没有screen软件,需要自己安装,这里使用yum安装

#centos8要使用于epel源
yum -y install screen

screen –S [SESSION]:创建一个会话

screen –x [SESSION]:加入一个会话

exit:退出并关闭会话

Ctrl+a,d:脱离当前会话

screen -ls:显示所有打开的会话

screen -r [SESSION]:回复某个会话

2.8.2 tmux(作为了解即可)

[root@centos8 ~]# yum -y install screen
[root@centos8 ~]# tmux

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

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

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

新建会话

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

tmux new -s <session-name>
类似于在命令行中执行tmux,所以在已经开启的会话中执行命令会报下面错误
sessions should be nested with care, unset $TMUX to force

tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话

[root@centos8 ~]# tmux ls
0: 1 windows (created Sun Nov 29 02:20:25 2020) [187x43] (attached)

分离会话

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

[root@centos8 ~]# tmux detach

接入会话

[root@centos8 ~]# tmux attach -t 0

结束会话

[root@centos8 ~]#tmux kill-session -t <session-name>

切换会话

[root@centos8 ~]#tmux switch -t <session-name>

窗格快捷键

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:显示窗格编号

窗口快捷键

Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n:切换到下一个窗口。
Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号
Ctrl+b w:从列表中选择窗口
Ctrl+b ,:窗口重命名

2.9输出信息echo

echo:display a line of text

  • -e:enable interpretation of backslash escapes(启用反斜杠转义功能)

启用-e选项会将下面字符进行特殊处理,而不会输出字符本身

  • \a 发出警告声

  • \b 退格键

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

  • \e escape,相当于\033

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

  • \r 回车,即光标移至行首,但不换行

  • \t 插入tab

  • \ \插入\字符

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

  • \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)

[root@centos8 ~]# ls
anaconda-ks.cfg
[root@centos8 ~]# echo 123 > a.txt
[root@centos8 ~]# ls
anaconda-ks.cfg  a.txt
[root@centos8 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos8 ~]# echo -e '\a'

2.10命令行扩展

`` ,' ' , " ",$(),{}用法展示

[root@centos8 ~]# echo "echo $HOSTNAME"
echo centos8
[root@centos8 ~]# echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@centos8 ~]# echo `echo $HOSTNAME`
centos8
[root@centos8 ~]# echo $(echo $HOSTNAME)
centos8
[root@centos8 ~]# echo name{1,2,3}
name1 name2 name3
[root@centos8 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@centos8 ~]# echo {1..20..2}
1 3 5 7 9 11 13 15 17 19

[root@centos8 ~]#ll `echo `date +%F`.txt`
-bash: .txt: command not found
ls: cannot access 'date': No such file or directory
ls: cannot access '+%F': No such file or directory
[root@centos8 ~]#ll $(echo $(date +%F).txt)
-rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt

通过以上的命令实例我们不难得出下面结论

  • " ":能识别引号内变量
  • ' ':不能识别引号内的命令和变量,只会将内容当作字符串处理
  • ` `:既能识别变量也能识别命令
  • $():既能识别变量也能识别命令,效果基本与``相同,不过涉及到命令嵌套时需使用$()
  • {}:能将{}内部的字符串全部输出,并可以依次与外部字符串组合,从而简化打印

2.11 Tab键

2.11.1 补全命令

  • 补全内部及外部命令
  • 补全命令的子命令,需安装 bash-completion

2.11.2 补全路径

对用户输入的路径进行补全操作

2.11.3补全规则

唯一则直接补全(单击Tab),不唯一则列出所有相匹配的命令或者路径(双击Tab)

2.12历史命令

2.12.1 执行方式

系统会将执行的命令保存在内存当中

当用户正常退出时,会将内存中的历史命令放入~/.bash_history文件中

再次登陆时系统会将~/.bash_history文件中的命令加载到内存当中,而此时新执行的命令又会保存在内存中,当用户正常退出时,系统会把新的命令保存至配置文件中

2.12.2 命令选项

history

-c:清除内存中的所有历史命令

-d offset:删除第offset条历史命令

n:显示最近n条历史

-a:将本次会话新执行的命令历史列表添加至历史文件

-s:向历史命令列表中添加一条命令,但这条命令不真正的执行

2.12.3 相关变量

HISTSIZE:命令历史记录的条数

HISTFILE:指定历史文件,默认为~/.bash_history

HISTFILESIZE:命令历史文件记录历史的条数

HISTTIMEFORMAT="%F %T whoami" 显示时间和用户

HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史

HISTCONTROL:控制命令历史的记录方式

  • ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”

  • ignorespace 忽略所有以空白开头的命令

  • ignoreboth 相当于ignoredups, ignorespace的组合

  • erasedups 删除重复命令

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

#要求在执行history命令的时候可以看见执行时间
#这里我们配置在全局配置文件/etc/profile 当中
[root@centos8 ~]# vim /etc/profile
    HOSTNAME=`/usr/bin/hostname 2>/dev/null`
    HISTSIZE=1000
    if [ "$HISTCONTROL" = "ignorespace" ] ; then
        export HISTCONTROL=ignoreboth
    else
        export HISTCONTROL=ignoredups
    fi
    HISTTIMEFORMAT="%F %T "
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL HISTTIMEFORMAT
[root@centos8 ~]# history 
    1  2020-11-29 21:56:41 hostname -I
    2  2020-11-29 21:56:41 hostname -i
    3  2020-11-29 21:56:41 free

2.12.3 调用历史命令的快捷键

#重复前一个命令
!:0 执行前一条命令(去除参数)
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!string 重复前一个以“string”开头的命令
1.13 bash的快捷键
!?string 重复前一个包含string的命令
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出

#重复前一个命令的参数
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 开头的命令,并获取它的所有参数

2.13bash的快捷键

Ctrl + l 清屏,相当于clear命令
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Ctrl + Alt + F1-F7 切换终端
Alt + r 删除当前整行

在xshell中需对ALT键进行设置,不然会因为快捷键冲突导致无法使bash快捷键生效

image-20201129170737133

3获取帮助命令

3.1whatis

Usage: whatis [OPTION...] KEYWORD... 与man -f效果相同

使用数据库来显示命令的简短描述

如果系统刚安装则可能无法使用该命令,此时Centos7以上版本需执行mandb,Centos6之前版本需执行makewhatis

[root@centos8 ~]# whatis whatis
whatis (1)           - display one-line manual page descriptions

3.2查看命令帮助

3.2.1 内部命令

help COMMAND

man bash

[root@centos8 ~]# type echo
echo is a shell builtin
[root@centos8 ~]# help echo
echo: echo [-neE] [arg ...]
    Write arguments to the standard output.
	...
[root@centos8 ~]# man echo
NAME
       echo - display a line of text

SYNOPSIS
       echo [SHORT-OPTION]... [STRING]...
       echo LONG-OPTION
       ...

3.2.2 外部命令

COMMAND --help | -h

man COMMAND

[root@centos8 ~]# man date
NAME
       date - print or set the system date and time

SYNOPSIS
       date [OPTION]... [+FORMAT]	#[]表示内容是可选
       date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]	#|表示或者

DESCRIPTION
       Display the current time in the given FORMAT, or set the system date.

       Mandatory arguments to long options are mandatory for short options too.

       -d, --date=STRING	#简写方式和完整写法
              display time described by STRING, not 'now'

3.2.2 man 命令

提供命令帮助的文件,手册页存放在/usr/share/man

[root@centos8 ~]# whatis vim
vim (1)              - Vi IMproved, a programmer's text editor
vim (5)              - Vi IMproved, a programmer's text editor

上例中的1、5数字代表着man命令的章节,数字与代表内容关系如下

  • 1:使用者在shell环境中可以操作的指令
  • 2:系统可以调用的函数库
  • 3:函数和函数库
  • 4:设备文件及特殊文件
  • 5:配置文件
  • 6:游戏
  • 7:其他系统文档
  • 8:管理员可用的指令
  • 9:与内核相关的API
#查看某个章节的内容
[root@centos8 ~]# man 1 vim
VIM(1)                       General Commands Manual                      VIM(1)

NAME
       vim - Vi IMproved, a programmer's text editor

SYNOPSIS
       vim [options] [file ..]
       vim [options] -
       vim [options] -t tag
       vim [options] -q [errorfile]

man命令的快捷键

  • #:跳转至第#行

  • 1G: 回到文件首部

  • G:翻至文件尾部

  • /KEYWORD

    以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写

    n:下一个

    N:上一个

  • ?KEYWORD

    以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写

    n:跟搜索命令同方向,下一个

    N:跟搜索命令反方向,上一个

  • b:向前翻一页

  • d:向后翻一页

原文地址:https://www.cnblogs.com/bestvae/p/14058822.html