Linux中的shell和基础命令4.2

常见命令

查看硬件信息

查看 cpu

lscpu命令可以查看cpu信息 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的数量
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 44
Stepping:              2
CPU MHz:               2128.025
BogoMIPS:              4256.03
Virtualization:       VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:             256K
L3 cache:             8192K
NUMA node0 CPU(s):     0,2,4,6 #对应的core
NUMA node1 CPU(s):     1,3,5,7

查看内存大小

[root@centos8 ~]#free -h   (加h显示G)

[root@centos8 ~]#cat /proc/meminfo   
root@ubuntu2004:~# free
              total        used        free      shared  buff/cache   available
Mem:        3981632      267128     2979480        1540      735024     3466564
Swap:       3994620           0     3994620

查看硬盘和分区情况

[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   7G  0 rom  
[root@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    7377920 sr0

查看系统架构

root@ubuntu2004:~# arch
x86_64
[root@centos8 ~]# arch
x86_64
[root@rhel5 ~]# arch
i686

查看操作系统发行版本

#CentOS8 查看发行版本
[root@centos8 ~]#cat /etc/redhat-release
CentOS Linux release 8.1.1911 (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"

[root@centos8 ~]#lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 8.1.1911 (Core)
Release: 8.1.1911
Codename: Core
[root@centos8 ~]#
#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/privacypolicy"
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@ubuntu1804 ~]#

修改登录前提示

ls /etc/issue
显示路径
cat /etc/issue.net
显示登录前的提示
vi /etc/issue.net
修改登陆前提示

修改登录后提示

vim /etc/motd

佛祖保佑,永无BUG代码

范例: 查看 OS 版本

根据不同版本使用不同命令

[root@centos8 ~]#lsb_release -is
CentOS
[root@centos8 ~]#lsb_release -cs
Core
[root@centos8 ~]#lsb_release -rs
8.2.2004
[root@centos7 ~]#lsb_release -is
CentOS
[root@centos7 ~]#lsb_release -cs
Core
[root@centos7 ~]#lsb_release -rs
7.9.2009
[root@centos6 ~]#lsb_release -is
CentOS
[root@centos6 ~]#lsb_release -cs
Final
[root@centos6 ~]#lsb_release -rs
6.10
root@ubuntu2004:~# lsb_release -is
Ubuntu
root@ubuntu2004:~# lsb_release -cs
focal
root@ubuntu2004:~# lsb_release -rs
20.04
[root@ubuntu1804 ~]#lsb_release -is
Ubuntu
[root@ubuntu1804 ~]#lsb_release -cs
bionic
[root@ubuntu1804 ~]#lsb_release -rs
18.04

日期和时间

Linux的两种时钟

  • 系统时钟:由Linux内核通过CPU的工作频率进行的
  • 硬件时钟:主板 相关命令

date 显示和设置系统时间
clock,hwclock: 显示硬件时钟

-s, --hctosys #以硬件时钟为准,校正系统时钟  hwclock -s
-w, --systohc #以系统时钟为准,校正硬件时钟

显示日历:

cal –y 
cal 2022

范例:

root@cloud:~# cal 10 2024
    October 2024
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

重启:

  • reboot
    -f: 强制,不调用shutdown
    -p: 切断电源
    ctrl+alt+delete 三个键
    关机或重启:shutdown
shutdown [OPTION]... [TIME] [MESSAGE]
-r: reboot
-h: halt
-c:cancel
 TIME:无指定,默认相当于+1(CentOS7)
 now: 立刻,相当于+0
 +#: 相对时间表示法,几分钟之后;例如 +3
 hh:mm: 绝对时间表示,指明具体时间

查看多久不关机: uptime

会话管理

ps aux查看正在运行的程序
pa aux |grep sleep 查找运行的程序
screen 保活程序
利用screen 可以实现会话管理,如:新建会话,共享会话等 注意:CentOS7 来自于base源,CentOS8 来自于epel源 范例:安装 screen
安装:

#CentOS7 安装screen
[root@centos7 ~]#yum -y install screen
#CentOS8 安装screen
[root@centos8 ~]#dnf -y install epel-release
[root@centos8 ~]#dnf -y install screen

如果提示 No match for argument: screen,先安装 yum install epel-release 后重试
使用: 运行前 输入screen
screen命令常见用法:
创建新screen会话

screen –S [SESSION]

加入screen会话

screen –x [SESSION]

退出并关闭screen会话

exit

剥离当前screen会话

Ctrl+a,d

显示所有已经打开的screen会话

screen -ls

恢复某screen会话

screen -r [SESSION]

创建文件

touch a.txt
touch `date +%F`.log
touch `hostname`.log

-个命令CMD1想调用另一个命令CMD2的执行结果,就需要将CMD2放在反向引号中CMD2 能执行的命令,被调用的命令
#echo $PATH PATH 存的是外部命令的搜索路径

命令行扩展:`` 和 $()

把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令

$(COMMAND)
`COMMAND`

范例:比较 “ ” ,‘ ’, ``三者区别

[root@centos8 ~]#echo "echo $HOSTNAME"
echo centos8.localdomain
[root@centos8 ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@centos8 ~]#echo `echo $HOSTNAME`
centos8.localdomain
#结论:
单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻"
双引号:弱引用,不能识别命令,可以识别变量,"半傻不精"
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内
容当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明"

注意:反向单引号不可嵌套,$() 等同于反向单引号,可嵌套。

括号扩展:{ }

{} 可以实现打印重复字符串的简化形式

{元素1,元素2,元素3}
{元素1..元素2}

范例:

echo file{1,3,5} 结果为:file1 file3 file5
rm -f file{1,3,5}
echo {1..10}
echo {a..z}
echo {1..10..2}
echo {000..20..2}

[root@rocky ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@rocky ~]# echo {1..10..2}
1 3 5 7 9
[root@rocky ~]# echo {2..10..2}
2 4 6 8 10
[root@rocky ~]# echo {a..z..2}
a c e g i k m o q s u w y
[root@rocky ~]# echo {a,b,c}.{txt,log}
a.txt a.log b.txt b.log c.txt c.log
[root@rocky ~]# echo /data/mysql/{data,log,pid}
/data/mysql/data /data/mysql/log /data/mysql/pid

linux的各种快捷键

tab 键补全

tab 键可以实现命令及路径等补全,提高输入效率,避免出错
内部命令: 外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令。

命令的子命令补全,需要安装 bash-completion
contos

yum -y install bash-completio

ubuntu 换位apt
注意:用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次Tab会给出列表 范例:

[root@centos8 ~]#nmcli connection 2TAB
add     delete   edit     help     load     monitor show
clone   down     export   import   modify   reload   up

路径补全

把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名 如果惟一:则直接补全 否则:再次Tab给出列表

双击Tab键

  • command 2Tab 所有子命令或文件补全
  • string2Tab 以string开头命令
  • /2Tab 显示所有根目录下一级目录,包括隐藏目录
  • ./2Tab 当前目录下子目录,包括隐藏目录
  • *2Tab 当前目录下子目录,不包括隐藏目录
  • ~2Tab 所有用户列表
  • $2Tab 所有变量
  • @2Tab /etc/hosts记录 (centos7 不支持)
  • =2Tab 相当于ls –A (centos7不支持)

命令行历史

当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是 ~/.bash_history
登录shell时,会读取命令历史文件中记录下的命令加载到内存中
登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加”至命令历史文件中 利用命令历史。可以用它来重复执行命令,提高输入效率
命令:history

history -anrw [filename]
history -ps arg [arg...]

常用选项:

!64 : 表示调用第64个历史命令
!-2 : 表示调用倒数第2历史命令
-c: 清空命令历史
-d offset: 删除历史中指定的第offset个命令
n: 显示最近的n条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 展开历史参数成多行,但不存在历史列表中
-s: 展开历史参数成一行,附加在历史列表后(假冒历史)

持久保存变量

以上变量可以 export 变量名=“值” 形式存放在 /etc/profile 或 ~/.bash_profile
范例:

[root@centos8 ~]#cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T "
[root@centos8 ~]#history
    1  2019-12-13 08:39:05 ls /data
    2  2019-12-13 08:39:05 date
    3  2019-12-13 08:39:05 vie0
    4  2019-12-13 08:39:05 nano .b

调用命令行历史

#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入!-1 并回车执行
按 Ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!string 重复前一个以“string”开头的命令
!?string 重复前一个包含string的命令
!string:p 仅打印命令历史,而不执行
!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容
!*:p 打印输出 !*(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个string
!?date 包含date的命令
^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 开头的命令,并获取它的所有参数

[root@rocky ~]# cat /etc/issue
\S
Kernel \r on an \m
查看文件属性

[root@rocky ~]# ll /etc/issue
-rw-r--r--. 1 root root 23 Jun  7 21:36 /etc/issue

快捷输入  :
1、 alt+.

2\esc(松手)+.

bash的快捷键

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 + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r     删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Alt + Backspace 删除左边单词

Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + # 提示输入指定字符后,重复显示该字符#次

注意:Alt 组合快捷键经常和其它软件冲突 范例:xshell中启动 alt 键

获得帮助

  • 多层次的帮助
  • whatis
  • command –help
  • man
  • /usr/share/doc/
  • Red Hat documentation 、Ubuntu documentation
  • 软件项目网站
  • 其它网站
  • 搜索

多层次的帮助

whatis

whatis 使用数据库来显示命令的简短描述 此工具在系统刚安装后,不可立即使用,需要制作数据库后才可使用 执行下面命令生成数据库

#CentOS 7 版本以后
mandb
#CentOS 6 版本之前
makewhatis

范例:

[root@centos8 ~]#whatis cal
cal (1) - display a calendar
cal (1p) - print a calendar
[root@centos8 ~]#man -f cal
cal (1) - display a calendar
cal (1p) - print a calendar

范例:

[root@centos8 ~]#whatis ls
ls: nothing appropriate.
#生成man相关数据库
[root@centos8 ~]#mandb
Processing manual pages under /usr/share/man...
Updating index cache for path `/usr/share/man/mann'. Wait...done.
Checking for stray cats under /usr/share/man...
...省略...
0 old database entries were purged.
[root@centos8 ~]#whatis ls
ls (1) - list directory contents

查看命令的帮助

内部命令帮助

  • help COMMAND
  • man bash 范例:
[root@centos8 ~]#type history
history is a shell builtin
[root@centos8 ~]#help history
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps
arg [arg...]
Display or manipulate the history list.
Display the history list with line numbers, prefixing each modified
entry with a `*'. An argument of N lists only the last N entries.
Options:
-c clear the history list by deleting all of the entries
-d offset delete the history entry at position OFFSET.
-a append history lines from this session to the history file
-n read all history lines not already read from the history file
and append them to the history list
-r read the history file and append the contents to the history
list
-w write the current history to the history file
-p perform history expansion on each ARG and display the result
without storing it in the history list
-s append the ARGs to the history list as a single entry
If FILENAME is given, it is used as the history file. Otherwise,
if HISTFILE has a value, that is used, else ~/.bash_history.
If the HISTTIMEFORMAT variable is set and not null, its value is used
as a format string for strftime(3) to print the time stamp associated
with each displayed history entry. No time stamps are printed otherwise.
Exit Status:
Returns success unless an invalid option is given or an error occurs.

外部命令及软件帮助

  • COMMAND –help 或 COMMAND -h
  • 使用 man 手册(manual): man COMMAND
  • 信息页:info COMMAND
  • 程序自身的帮助文档:README、INSTALL、ChangeLog
  • 程序官方文档
  • 相关网站,如:技术论坛
  • 搜索引擎

外部命令的–help 或 -h 选项

显示用法总结和参数列表,大多数命令使用,但并非所有的 格式说明:

  • [] 表示可选项
  • CAPS或 <> 表示变化的数据
  • … 表示一个列表
  • x |y| z 的意思是“ x 或 y 或 z ”
  • -abc的 意思是 -a -b –c
  • { } 表示分组

linux的目录结构

  • 文件和目录被组织成一个单根倒置树结构
  • 文件系统从根目录下开始,用“/”表示
  • 根文件系统(rootfs):root filesystem
  • 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL 以 . 开头的文件为隐藏文件
  • 路径分隔的 /
  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 蓝色–>目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其他文件
  • 除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引 号来引用
  • 每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容
  • Linux的文件系统分层结构:FHS Filesystem Hierarchy Standard

参考文档: http://www.pathname.com/fhs/