Linux学习【1】基本使用及命令执行
1. 计算机基础
-
冯·诺依曼体系要点:
-
计算机的数制采用二进制,bit位,
1 byte = 8 bit -
计算机应按照程序顺序执行
-
计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成
-
-
操作系统概念
-
接口:软件包向外提供的功能模块的函数接口
-
命令行接口(Shell)
-
图形界面接口
-
-
ABI(Application Binary Interface,应用程序二进制接口),描述应用程序与os之间的底层接口
> `file /filename`,可看到对应的文件格式为PE还是ELF-
windows:PE(portable executable)格式
.dll(dynamic link library),.lib -
linux:ELF(Executable and Linking Format)格式
.so(shared object).a
-
-
API(Application Programming Interface,应用程序开发接口),定义源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译。库可以视作一个工具箱。
-
用户态和内核态
-
Ring 0(kernel):内核态
-
Ring 3(user):用户态
-
-
系统调用和库函数
调用printf() ———————— 应用程序 | 库函数printf() ———— | |————> C函数库 库函数write() ———— | 系统调用write() ———————— 内核
-
2. 安装Linux
-
/dev/sda1-- >sda1:-
sd: ssd -
a: 第一个ssd -
1: 第一个分区
-
-
df命令查看各设备挂载到哪个分区。-
注意:根
/一定要挂载到一个设备上的! -
/boot分区需要挂载,存储引导相关的文件,分1G就足够了 -
/swap分区需要挂载,和虚拟内存相关,临时用硬盘的空间来模拟内存,大小一般是物理内存的2倍。下图是本次安装所设置的分区:
-

- 首次安装成功后,拍摄快照,保存当前正常版本。
3. Linux基础
Linux是一个多用户系统。
3.1 Linux启动级别
启动级别(Runlevel)指 Unix 或 类 Unix 操作系统下不同的运行模式,运行级别通常分为 7 级:
运行级别 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别 1:单用户工作状态,root权限,用于系统维护,禁止远程登陆,无网络连接,不运行守护进程,不允许非超级用户登录.
运行级别 2:多用户状态,无网络连接,不运行守护进程
运行级别 3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式,正常登录状态
运行级别 4:系统未使用,保留,用户自定义
运行级别 5:X11控制台,登陆后进入图形GUI模式,就是常见的带有图形界面的模式
运行级别 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
因此,如果想设置开机进入命令行模式,即为将运行级别从5修改为3。具体方法如下:
-
su root切换至root用户 -
vim /etc/default/grub修改grub文件

-
update-grub更新grub -
systemctl set-default multi-user.target设置开机进入命令行模式 -
reboot重启Ubuntu
可以通过runlevel查看上一个运行级别和当前运行级别:

-
N表示 "None",即系统启动时没有上一个运行级别(直接进入当前运行级别) -
3表示当前运行级别是 3(多用户模式,带网络,无图形界面)。
3.2 基本使用和配置
hostname查看当前主机名:
,注意主机名不要使用下划线,下划线是非法字符,只能用-:

3.2.1 基本使用
tty # 查看当前所在终端`
在xshell上输入tty,看到当前所在终端(要注意ubuntu不允许用root用户远程连接):

如果想知道有多少人在访问,用who命令:

free -h查看当前内存使用情况,可以看出没有图形化界面时内存消耗极小:

3.2.2 /etc相关配置
Linux的/etc相当于Windows的注册表,用于进行各种配置。
ps -aux相当于Windows的任务管理器。
3.2.2.1 motd设置
mota:message of the day,即提示进入系统的用户注意事项,或提示系统运行的概要信息。
/etc/motd:登录后消息提示

3.2.2.2 issue设置
/etc/issue是登录前消息提示,如下图所示:

3.2.2.3 Shell
Shell是一个命令行解释器(Command Interpreter),负责接收用户输入的命令,与操作系统内核(Kernel)交互,并执行相应的操作(如文件管理、进程控制等),是用户与系统内核之间的“桥梁”。
bash:Bourne-Again Shell,是一种Shell的类型。
echo $SHELL
echo $SHELL(echo ${SHELL}),查看当前shell的类型:

echo $PS1
echo $PS1,显示当前Shell的命令提示符(Prompt)的格式定义

4. 命令执行及常见命令
4.1 命令执行过程
在 Linux 中,命令的执行过程涉及 Shell 解析、系统调用、进程管理 等多个环节。以下是详细的分步解析:
1. 命令输入与 Shell 解析
用户输入命令后,Shell会按以下流程处理:
-
通过终端或脚本获取命令字符串
-
检查特殊字符(如
|、>、;) -
扩展变量和通配符:
-
$HOME→/home/user -
*.txt→ 匹配当前目录的.txt文件
-
2. 命令类型判断
Shell 会判断命令属于以下哪种类型:
| 类型 | 示例 | 查找方式 |
|---|---|---|
| 内置命令 | cd, echo |
直接由 Shell 内部处理,无需创建新进程 |
| 外部命令 | ls, grep |
通过 $PATH 环境变量搜索可执行文件 |
| 别名 | ll(通常为 ls -l) |
优先检查用户定义的别名(alias) |
| 函数 | 用户自定义函数 | 执行内存中的函数定义 |
3. 执行外部命令的详细流程
若命令是外部程序(如 ls),Shell首先根据$PATH查找ls的完整路径/bin/ls,接下来复制当前Shell进程,从而创建一个子进程,并执行对应的系统调用,也就是加载/bin/ls程序。程序运行后处理ls命令后的相关参数(也是调用相应的系统调用),最终将结果写入标准输出(stdout),由终端显示。程序退出后,Shell通过wait()回收子进程资源。
4. 相关命令
hash : 管理shell的外部命令缓存表。当用户首次执行某个外部命令时,Shell会通过$PATH获取当前外部命令的完整路径,并将其缓存到内存中,这样下一次再调用该命令时就可以从缓存中直接读取,提高速度

hash -d commandname : 在hash缓存表中删除已有命令
type :返回当前命令是内部命令还是外部命令
注意:Shell在执行命令时,会按以下顺序查找匹配项(优先级从高到低):
- 别名(Alias)
- Shell关键字(如 if、for)
- 函数(Function)
- 内置命令(Built-in)
- 外部命令(在 $PATH 中查找)
type命令会按照这一优先级顺序返回第一个匹配的类型。下图中可以看出,由于
grep被定义为别名(优先级最高),因此type不会继续检查后续类型(如外部命令)。此时,使用type -a可以显示命令的所有可能的类型(按优先级顺序)。

which : 返回外部命令的详细地址(二进制文件路径)

whereis : 返回外部命令的详细地址(二进制文件路径)、手册页和info文档位置

4.2 命令别名
alias : 查看所有别名

alias newname="原始命令" : 定义别名
unalias 别名 : 删除别名
别名的作用范围
-
临时生效 :直接在终端定义的别名仅在当前Shell会话有效,退出后失效。
-
永久生效 :将别名定义写入Shell配置文件
-
仅对当前用户有效:
~/.bashrc,然后运行source ~/.bashrc -
对所有用户有效:
/etc/bash.bashrc,然后运行source ls /etc/bash.bashrc
-
4.3 常用命令
uptime: 快速查看系统的运行时间、当前用户负载和CPU平均负载

批量执行: 使用分号;隔开多条命令,按下回车后会执行所有命令。像上面的命令是一次执行一条命令,属于人机交互式命令。

- 命令行扩展 :
` `等价于$()

但要注意,` `不能嵌套,只有$()可以嵌套:

- 括号拓展:
{ },注意是两个.!!

- 查看历史命令:
histort,只需要!对应命令编号即可再次执行该命令

4.3.1 查看硬件信息
lscpu : 查看CPU信息

cat /proc/cpuinfo : 查看CPU信息,和lscpu的区别是它是将每个内核的信息分别展示的

free : 查看内存信息
cat /proc/meminfo : 查看内存信息

lsblk : 列出所有块设备(如磁盘、分区、RAID、LVM 等)的实用工具
cat /proc/partitions : 动态显示当前系统中所有块设备(磁盘和分区)的基本信息,包括主设备号、次设备号、块数和设备名称

4.3.2 查看系统版本信息
uname -r : 查看内核版本

cat /etc/os-release : 查看操作系统发行版本

4.3.3 日期和时间
date、ll /etc/localtime

date +%F,查看当前日期

cal monthname yearname,指定显示某年某月的日历

cal -y,显示日历

4.3.4 关机和重启
poweroff = shutdown -P now,立即关闭
reboot = shutdown -r now,立即重启
shutdown [OPTION]... [TIME] [MESSAGE] :
-
-P: 关机并切断电源 -
-h: halt,关机,停止所有CPU运行 -
-r: reboot -
-c: cancel,取消已计划的关机/重启 -
TIME-
now: 立刻,相当于+0 -
+#: 相对时间(从当前起),+分钟 -
hh:mm: 绝对时间(24小时制)
-
4.3.5 会话管理
screen
终端复用工具,允许在单个终端窗口中创建多个虚拟终端会话,并在这些会话之间自由切换。即使断开SSH连接,screen会话也会继续在后台运行,非常适合1)长时间运行任务或2)远程工作
User A:
# 创建一个名为help的Screen会话
screen -S help
# 关闭help会话
exit
User B:
# 列出所有Screen会话,并使用-x共享会话
screen -ls
screen -x help
# 自己退出当前help会话,不影响help运行
ctrl a+d
tmux
# 创建
tmux new -s session_name
tmux attach -t session_name
# 退出
快捷键:ctrl B -> D
# 关闭
exit
4.4 字符集和编码
| 术语 | 说明 |
|---|---|
| 字符集 | 字符的集合(如ASCII包含128个字符,Unicode包含全球字符) |
| 编码 | 将字符转换为二进制数据的规则(如UTF-8、GBK) |
常见字符集与编码
-
ASCII
-
范围:128个字符(0-127),包括英文、数字、控制符。
-
每个字符占1字节(实际只用了7位,最高位为0)。
-
示例:A → 01000001(十六进制 0x41)。
-
-
Unicode
-
目标:统一全球字符(涵盖ASCII,支持中文、emoji等)。
-
字符集:为每个字符分配唯一码点(如 U+4E2D 表示“中”)。
-
编码方案:
- UTF-8:变长编码(1-4字节),兼容ASCII。
- UTF-16:固定2或4字节。
- UTF-32:固定4字节。
-
-
中文编码
| 编码 | 说明 | 示例 |
|---|---|---|
| GBK | 汉字内码扩展规范,2字节编码 | “中” → 0xD6 0xD0 |
| GB18030 | GBK的超集,支持少数民族文字 | 兼容Unicode |
- 修改
LANG变量实现中文语言提示
echo $LANG
LANG=zh_CN.UTF-8

0a,换行符

-
-,文件类型,当前为普通文件- d=目录,l=符号链接,c=字符设备,b=块设备
-
rw-r--r--,分三组,三个一组,分别代表所有者、所属组和其他用户的权限 -
1,硬链接数 -
root root,所有者和所属组 -
4,大小,当前为4 bytes -
7月 13 11:41,最后修改时间 -
test.txt,文件名称
5. 获得帮助
whatis
help

浙公网安备 33010602011771号