Linux(命令格式详细+字符集 图片+大白话)
后面也会持续更新,学到新东西会在其中补充。
建议按顺序食用,欢迎批评或者交流!
缺什么东西欢迎评论!我都会及时修改的!
在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频
王晓春老师的个人空间-王晓春老师个人主页-哔哩哔哩视频
命令格式
[ ] 代表可选
COMMAND [OPTIONS...] [ARGUMENTS...]
选项 参数
举例:
-l 为选项 .bashrc 为参数
[root@RockyLinux ~]#ls -l .bashrc
-rw-r--r--. 1 root root 429 May 11 2022 .bashrc
- 短选项:UNIX风格选项,-c 例如 -l,-h
- 长选项:GNU风格选项,--word 例如 --all,--human
举例:
[root@RockyLinux ~]#ls -a
. anaconda-ks.cfg .bash_logout .bashrc .ssh .viminfo
.. .bash_history .bash_profile .cshrc .tcshrc
[root@RockyLinux ~]#ls --all
. anaconda-ks.cfg .bash_logout .bashrc .ssh .viminfo
.. .bash_history .bash_profile .cshrc .tcshrc
- BSD风格选项:一个字母,例如:a (用的不多)伯克利大学的unix搬到Linux里面
举例:
[root@RockyLinux ~]#ps aux
命令顺序有错误也不行
[root@RockyLinux ~]#iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
[root@RockyLinux ~]#iptables -Lnv
iptables: No chain/target/match by that name.
取消和结束命令执行:Ctrl + c , Ctrl + d
[root@RockyLinux ~]#tail -f anaconda-ks.cfg
.........
^C
多个命令可以用";"符号分开
[root@RockyLinux ~]#echo "xiao";echo "wang";echo "shuai"
xiao
wang
shuai
[root@RockyLinux ~]#ls;hostname;uname -r
anaconda-ks.cfg
RockyLinux
5.14.0-427.13.1.el9_4.x86_64
一个命令可以用\分成多行
[root@RockyLinux ~]#l\
> s
anaconda-ks.cfg
常见命令
查看cpu
lscpu
CPU格式
Model name: Intel(R) Core(TM) i7-14650HX
物理CPU个数物理CPU的插槽
cpu是通过一个插槽安装在主板上的,这个插槽就叫做 cpu socket。
Socket(s): 2
Socket == physical id总数
内核和线程存在天壤之别,但它们都非常重要。
CPU 内核是物理内核;CPU 线程是逻辑内核,其效率大约是物理线程的 50%。
可以将 CPU 内核视为一个人的嘴巴,它完成所有的食物,线程是组织工作流程、切碎更大的块并创建高效的饮食工作流程的手。
每一个插槽对应的物理CPU上有多少个核
Core(s) per socket: 1
intel又在core的基础上提出了hyper-threading概念,即一个core里可以模拟多个逻辑核,这个就叫做thread。
因此,如果您碰巧有一个具有超线程的双核 Intel 处理器,您的操作系统会将其视为具有两个物理内核和四个逻辑内核的 CPU。如果没有超线程,逻辑内核的数量将减半。
每个核上有多少个线程
Thread(s) per core: 1
几核几线程就是指有多少个“Core per Socket”多少个“Thread per Core”,当后者比前者多时,
说明启用了超线程技术。
逻辑cpu个数(cpu总数)
thread总数是用cpu来表示的
CPU(s): 2
CPU列表
On-line CPU(s) list: 0,1
一级缓存分为指令缓存和数据缓存
d 指令 i 数据
L1d: 96 KiB (2 instances)
L1i: 64 KiB (2 instances)
支持全虚拟化
Virtualization type: full
显示每个核
cat /proc/cpuinfo
查看物理CPU的个数:
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
或者
grep 'physical id' /proc/cpuinfo |sort -u|wc -l
查看CPU是几核
cat /proc/cpuinfo |grep "cores"|uniq
查看siblings数量
grep "siblings" /proc/cpuinfo|uniq
如果“siblings”和“cpu cores”一致,则说明不支持超线程,或者超线程未打开。
如果“siblings”是“cpu cores”的两倍,则说明支持超线程,并且超线程已打开。
[root@RockyLinux9 data]#grep "siblings" /proc/cpuinfo|uniq
siblings : 1
[root@RockyLinux9 data]#cat /proc/cpuinfo |grep "cores"|uniq
cpu cores : 1
看我这个就是没有开启。
查看逻辑CPU的个数
cat /proc/cpuinfo| grep processor|sort|uniq|wc -l
或者
grep -c processor /proc/cpuinfo
总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数(Thread(s) per core)
范例:
颜色相同的则是一个意思!
呃这里CPU(S) 分别是 2 x 2 x 1 = 4 ; 3 x 5 x 1 = 15
windows中的CPU信息
一个小小的shell脚本
#!/bin/bash
physicalNumber=0
coreNumber=0
logicalNumber=0
HTNumber=0
logicalNumber=$(grep "processor" /proc/cpuinfo|sort -u|wc -l)
physicalNumber=$(grep "physical id" /proc/cpuinfo|sort -u|wc -l)
coreNumber=$(grep "cpu cores" /proc/cpuinfo|uniq|awk -F':' '{print $2}'|xargs)
HTNumber=$((logicalNumber / (physicalNumber * coreNumber)))
echo "****** CPU Information ******"
echo "Logical CPU Number : ${logicalNumber}"
echo "Physical CPU Number : ${physicalNumber}"
echo "CPU Core Number : ${coreNumber}"
echo "HT Number : ${HTNumber}"
echo "*****************************"
lscpu命令详解 - 马昌伟 - 博客园
CPU相关概念:物理cpu数、核数、逻辑cpu数,12核20线程实例分析-CSDN博客
【cpu概念】物理cpu个数、核数、逻辑cpu数的概念-CSDN博客
三分钟速览cpu,socket,core,thread等术语之间的关系 - 知乎
你有多少个CPU核心和线程?[如何检查] --- How Many CPU Cores & Threads Do You have? [How To Check]
Linux下确认CPU是否开启超线程_intel的超线程技术 怎么通过linux 命令开启-CSDN博客
查看内存
free -h
cat /proc/meminfo
/proc/meminfo的文件大小
因为文件存在了内存里面并没有放到磁盘上
[root@RockyLinux ~]#ls -l /proc/meminfo
-r--r--r--. 1 root root 0 Nov 17 20:02 /proc/meminfo
查看硬盘和分区情况
lsblk
cat /proc/partitions
查看内核版本
wang@ubuntu:~$ uname -r
4.15.0-213-generic
查看操作系统版本
wang@ubuntu:~$ uname -r
4.15.0-213-generic
wang@ubuntu:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
...
[root@RockyLinux ~]#cat /etc/redhat-release
Rocky Linux release 9.4 (Blue Onyx)
日期和时间
[root@RockyLinux ~]#date
Sun Nov 17 10:17:34 PM CST 2024
2024 Nov 17 11月17号 Sun 星期天 10:17:34 时间 CST 时区东八区
修改时间
[root@RockyLinux ~]#date 062018302020.30
6月20日18:30 2020年 .30秒
-s 修改时间
[root@RockyLinux9 ~]#date -s '1 year'
Wed Nov 19 10:08:29 PM CST 2025
[root@RockyLinux9 ~]#date -s '-1 year'
Tue Nov 19 10:08:35 PM CST 2024
两个机器时间不同通信的时候会出现严重问题
为什么重启机器后时间会和正常时间对应上,主板上有电池专门给硬件一些信息,硬件的时间就由电池保持供电。
date -d
[root@RockyLinux9 ~]#date -d now
Tue Nov 19 09:31:57 PM CST 2024
[root@RockyLinux9 ~]#date -d yesterday
Mon Nov 18 09:32:03 PM CST 2024
date -d ‘2 day’
[root@RockyLinux9 ~]#date -d '100 day'
Thu Feb 27 09:37:51 PM CST 2025
[root@RockyLinux9 ~]#date -d '-100 day'
Sun Aug 11 09:37:58 PM CST 2024
显示昨天
[root@RockyLinux9 ~]#date -d '-1 day' +%F
2024-11-18
创建昨天日期文件
[root@RockyLinux9 ~]#touch `date -d '-1 day' +%F`.txt
[root@RockyLinux9 ~]#ll
total 4
-rw-r--r--. 1 root root 0 Nov 19 21:44 2024-11-18.txt
从1970-01-01到现在经过多少秒
[root@RockyLinux9 ~]#date +%s
1732024652
从1970-01-01到现在经过多少秒转换成日期
@后面跟着一个数字
[root@RockyLinux9 ~]#date -d @`date +%s`
Tue Nov 19 09:58:34 PM CST 2024
[root@RockyLinux9 ~]#date -d @`date +%s` +%F_%T
2024-11-19_22:00:23
创建文件规范
[root@RockyLinux9 ~]#touch `date +%F_%H-%M-%S`.log
[root@RockyLinux9 ~]#ll
total 4
-rw-r--r--. 1 root root 0 Nov 19 20:51 2024-11-19_20-51-56.log
-rw-------. 1 root root 1177 Nov 14 00:37 anaconda-ks.cfg
练习
1:
[root@RockyLinux9 data]#date -d "2016-06-18 10:20:30"
Sat Jun 18 10:20:30 AM CST 2016
2:
[root@RockyLinux9 data]#date -d "-1 day" +%u
2
3:
[root@RockyLinux9 data]#date -s "2019-08-07 06:05:10"
Wed Aug 7 06:05:10 AM CST 2019
[root@RockyLinux9 data]#date
Wed Aug 7 06:05:12 AM CST 2019
硬件的时间
[root@RockyLinux ~]#clock
2024-11-17 22:29:38.993366+08:00
[root@RockyLinux ~]#hwclock
2024-11-17 22:30:54.983685+08:00
硬件时间矫正系统时间-s
[root@RockyLinux ~]#clock -s
系统矫正硬件时间-w
[root@RockyLinux ~]#clock -w
时区
[root@RockyLinux ~]#ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Nov 14 00:35 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
[root@RockyLinux ~]#timedatectl
Local time: Sun 2024-11-17 22:37:11 CST
Universal time: Sun 2024-11-17 14:37:11 UTC
RTC time: Sun 2024-11-17 14:37:12
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
列出时区
[root@RockyLinux ~]#timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
修改时区
CST 变成了 CET
[root@RockyLinux ~]#date
Sun Nov 17 10:39:08 PM CST 2024
[root@RockyLinux ~]#timedatectl set-timezone Europe/Vienna
[root@RockyLinux ~]#date
Sun Nov 17 03:40:13 PM CET 2024
ubuntu
ubuntu是查看内容 centos是快捷方式
wang@ubuntu:~$ cat /etc/timezone
Etc/UTC
恢复原状
[root@RockyLinux ~]#timedatectl set-timezone Asia/Shanghai
[root@RockyLinux ~]#ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Nov 17 22:41 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
显示日历
wang@ubuntu:~$ cal
November 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
关机
[root@RockyLinux ~]#shutdown
Shutdown scheduled for Sun 2024-11-17 23:21:36 CST, use 'shutdown -c' to cancel.
取消关机
[root@RockyLinux ~]#shutdown -c
指定关机时间
10分钟后关机
[root@RockyLinux ~]#shutdown +10
Shutdown scheduled for Mon 2024-11-18 10:15:03 CST, use 'shutdown -c' to cancel.
[root@RockyLinux ~]#date
Mon Nov 18 10:05:05 AM CST 2024
[root@RockyLinux ~]#shutdown -c
指定2:30时间关机
[root@RockyLinux ~]#shutdown 02:30
Shutdown scheduled for Tue 2024-11-19 02:30:00 CST, use 'shutdown -c' to cancel.
[root@RockyLinux ~]#shutdown -c
查看用户在干什么
who == who am i
whoami
w
w 指令
这里是一个窗口执行yes 一个窗口用w命令查看
会话管理
每个窗口都相当于一个会话
screen
centos 67 centos 8更高级的没有screen
[root@RockyLinux ~]#yum -y install screen
举例:
[root@CentOS7 yum.repos.d]# screen
[root@CentOS7 yum.repos.d]# yes
避免在运行中的程序突然终端被关掉
将执行yes的窗口关掉
查看进程的时候发现yes还在运行
[root@CentOS7 ~]# ps aux
root 1330 67.1 0.0 108056 356 pts/1 R+ 11:18 0:48 yes
这样就避免了终端被关闭程序运行被终止
远程协助
要求:统一账号,统一机器。
Windows 连接到Linux ssh root@192.168.111.5
创建会话
xiaoli 名字是随便取的
[root@CentOS7 ~]# screen -S xiaoli
xiaoli 开了一个窗口
xiaowang 看到了xiaoli开的窗口
加入会话
[root@CentOS7 ~]# screen -x xiaoli
exit退出连接
这个退出是把别人共享的screen也结束了
ctrl a+d
当前会话退出这种方法就不会把别人共享的screen也结束
tmux
tmask 增强版 screen
[root@RockyLinux9 ~]#yum -y install tmux
执行tmux
上下分屏操作 ctrl b 松手 + “
切换终端 ctrl b松手 + 向上箭头
左右分屏 ctrl b松手 + %
exit退出
echo
- -E (默认)不支持\解释功能
- -n 不自动换行
- -e 启动\字符的解释功能
启用命令-e 若字符串出现以下字符,加以特殊处理,一半不会当作文字输出
- \a 发出警告声
- \b 退格键
- \c 最后不加上换行符号
- \e escape,相当于\033 (忽略符)
- \n 换行且光标移至行首
- \r 回车,即光标移至行首,但不换行
- \t 插入tab
- \\ 插入\字符
- \0nnn 插入nnn(八进制)所代表的ASCII字符
- \xHH 插入HH (十六进制)所代表的ASCII数字(man 7 ascii)
发出警告声
[root@RockyLinux9 ~]#echo -e "\a"
字符集和编码
计算机怎么识别我们在终端输入的abc呢?
有个对应表来转换 abc 转换成二进制 就叫做字符集
字符集只是决定了字符和二进制的对应关系
编码是决定在磁盘上如何保存
而编码才决定了它真正的表现形式
ascii字符集 (注意这里ascii也是编码没有区别)
中国也有自己编码和字符集叫做GBK
unicode是所有国家都可以使用的字符集 万国码 用的就是UTF - 8 UTF - 16 UTF - 32 编码
\033 0代表的是8进制
ibase = 8 代表8进制 33是8进制 转为十进制为27
[root@RockyLinux9 ~]#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'.
ibase=8
33
27
当前的主流编码
主流编码 utf-8 变长编码
utf-8兼容ascii码的如果存的是字母就用ascii码这种方式保存
汉字 占3个或者4个字节
字母占一个字节
而 utf - 32 管你是什么都占4个字节
utf - 16 变长,2或4个字节
查看当前编码和语言
en_US是语言 UTF-8是编码
[root@RockyLinux9 ~]#echo $LANG
en_US.UTF-8
下方的报错就是语言可以选择英文或者中文
[root@RockyLinux9 data]#xxx
-bash: xxx: command not found
修改语言
修改成中文
[root@RockyLinux9 ~]#LANG=zh_CN.UTF-8
一个字母占几个字节
占一个
[root@RockyLinux9 data]#echo a > /data/test.txt
[root@RockyLinux9 data]#ll
total 4
-rw-r--r--. 1 root root 2 Nov 18 13:20 test.txt
[root@RockyLinux9 data]#hexdump -c test.txt
0000000 a \n
0000002
一个汉字占几个字节
占三个或者四个
注意汉字占几个字节和笔画没有关系
[root@RockyLinux9 data]#echo 一 > /data/test.txt
[root@RockyLinux9 data]#hexdump -c test.txt
0000000 344 270 200 \n
0000004
[root@RockyLinux9 data]#ll
total 4
-rw-r--r--. 1 root root 4 Nov 18 13:21 test.txt
echo 打印字符
[root@RockyLinux9 data]#echo -e '\0127'
W
[root@RockyLinux9 data]#echo -e '\x56'
V
[root@RockyLinux9 data]#echo -e '\x40\x41\x42'
@AB
查看各种符号的进制
[root@RockyLinux9 data]#man ascii
echo 显示不可见符号
012 10 0A LF '\n' (new line)
[root@RockyLinux9 data]#echo -e 'a\x0Ab'
a
b
echo 加颜色
[root@RockyLinux9 data]#echo -e '\033[43;31;1;5mxiaowang\e[0m'
xiaowang
\e[0m
用于重置文本格式到默认设置
43
设置背景颜色为黄色(在ANSI颜色代码中)。31
设置前景(文本)颜色为红色。1
表示文本为粗体(或高亮)。5
表示文本为闪烁效果。m
表示这是一个设置显示属性(如颜色、粗体等)的命令。
有必要总结一下
编码是依赖字符集的
一个字符集可以有多个编码
举个例子
将字母a放入test.txt
[root@RockyLinux9 data]#echo $LANG
en_US.UTF-8
[root@RockyLinux9 data]#hexdump -c test.txt
0000000 a \n
0000002
[root@RockyLinux9 data]#ll
total 4
-rw-r--r--. 1 root root 2 Nov 18 14:04 test.txt
查看文件编码格式
:set fileencoding
转换文件的编码格式
[root@RockyLinux9 data]#iconv -f utf8 -t utf32 test.txt -o test.txt.utf32
[root@RockyLinux9 data]#ll
total 8
-rw-r--r--. 1 root root 2 Nov 18 14:10 test.txt
-rw-r--r--. 1 root root 12 Nov 18 14:15 test.txt.utf32
最终展示
[root@RockyLinux9 data]#hexdump -c test.txt.utf32
0000000 377 376 \0 \0 a \0 \0 \0 \n \0 \0 \0
000000c
[root@RockyLinux9 data]#hexdump -c test.txt
0000000 a \n
0000002
总结
所有命令都需要反复敲来实验来记忆,本人基本上是个人理解加参考其他大佬的肯定有很多问题欢迎指正,我会及时修改。
参考文献
4命令格式详解和基本命令介绍_哔哩哔哩_bilibili
5Linux常见命令和字符集_哔哩哔哩_bilibili