Linux学习【1】基本使用及命令执行

1. 计算机基础

  1. 冯·诺依曼体系要点:

    1. 计算机的数制采用二进制,bit位,1 byte = 8 bit

    2. 计算机应按照程序顺序执行

    3. 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成

  2. 操作系统概念

    1. 接口:软件包向外提供的功能模块的函数接口

      1. 命令行接口(Shell)

      2. 图形界面接口

    2. ABI(Application Binary Interface,应用程序二进制接口),描述应用程序与os之间的底层接口

       > `file /filename`,可看到对应的文件格式为PE还是ELF
      
      1. windows:PE(portable executable)格式
        .dll(dynamic link library),

        .lib

      2. linux:ELF(Executable and Linking Format)格式
        .so(shared object)

        .a

    3. API(Application Programming Interface,应用程序开发接口),定义源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译。库可以视作一个工具箱。

    4. 用户态和内核态

      1. Ring 0(kernel):内核态

      2. Ring 3(user):用户态

    5. 系统调用和库函数

      调用printf()        ————————      应用程序
            |
      库函数printf()      ————
            |                |————>    C函数库  
      库函数write()       ————
            |
      系统调用write()     ————————      内核
      

2. 安装Linux

  1. /dev/sda1 -- > sda1:

    1. sd : ssd

    2. a : 第一个ssd

    3. 1 : 第一个分区

  2. df命令查看各设备挂载到哪个分区。

    1. 注意:根/一定要挂载到一个设备上的!

    2. /boot分区需要挂载,存储引导相关的文件,分1G就足够了

    3. /swap分区需要挂载,和虚拟内存相关,临时用硬盘的空间来模拟内存,大小一般是物理内存的2倍。下图是本次安装所设置的分区:

首次安装linux设置的硬盘分区

  1. 首次安装成功后,拍摄快照,保存当前正常版本。

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。具体方法如下:

  1. su root 切换至root用户

  2. vim /etc/default/grub 修改grub文件

修改grub文件

  1. update-grub 更新grub

  2. systemctl set-default multi-user.target 设置开机进入命令行模式

  3. reboot 重启Ubuntu

可以通过runlevel查看上一个运行级别和当前运行级别:

查看当前运行级别

  • N 表示 "None",即系统启动时没有上一个运行级别(直接进入当前运行级别)

  • 3 表示当前运行级别是 3(多用户模式,带网络,无图形界面)。

3.2 基本使用和配置

hostname查看当前主机名:
,注意主机名不要使用下划线,下划线是非法字符,只能用-

当前主机名

3.2.1 基本使用

tty  # 查看当前所在终端`

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

tty查看当前所在终端

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

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:登录后消息提示

自定义motd

3.2.2.2 issue设置

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

1

3.2.2.3 Shell

Shell是一个命令行解释器(Command Interpreter),负责接收用户输入的命令,与操作系统内核(Kernel)交互,并执行相应的操作(如文件管理、进程控制等),是用户与系统内核之间的“桥梁”。

bash:Bourne-Again Shell,是一种Shell的类型。

  1. echo $SHELL

echo $SHELL(echo ${SHELL}),查看当前shell的类型:

当前Shell类型

  1. echo $PS1

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

当前提示信息

4. 命令执行及常见命令

4.1 命令执行过程

在 Linux 中,命令的执行过程涉及 Shell 解析、系统调用、进程管理 等多个环节。以下是详细的分步解析:


1. 命令输入与 Shell 解析

用户输入命令后,Shell会按以下流程处理:

  1. 通过终端或脚本获取命令字符串

  2. 检查特殊字符(如 |>;

  3. 扩展变量和通配符:

    • $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

hash -d commandname : 在hash缓存表中删除已有命令

type :返回当前命令是内部命令还是外部命令

注意:Shell在执行命令时,会按以下顺序查找匹配项(优先级从高到低):

  1. 别名(Alias)
  2. Shell关键字(如 if、for)
  3. 函数(Function)
  4. 内置命令(Built-in)
  5. 外部命令(在 $PATH 中查找)

type命令会按照这一优先级顺序返回第一个匹配的类型。下图中可以看出,由于grep被定义为别名(优先级最高),因此type不会继续检查后续类型(如外部命令)。此时,使用type -a可以显示命令的所有可能的类型(按优先级顺序)。

type

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

which

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

whereis

4.2 命令别名

alias : 查看所有别名

alias

alias newname="原始命令" : 定义别名

unalias 别名 : 删除别名


别名的作用范围

  1. 临时生效 :直接在终端定义的别名仅在当前Shell会话有效,退出后失效。

  2. 永久生效 :将别名定义写入Shell配置文件

    1. 仅对当前用户有效:~/.bashrc,然后运行source ~/.bashrc

    2. 对所有用户有效:/etc/bash.bashrc,然后运行source ls /etc/bash.bashrc

4.3 常用命令

  1. uptime : 快速查看系统的运行时间、当前用户负载和CPU平均负载

uptime

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

批量执行

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

命令行扩展

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

嵌套

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

括号拓展

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

history

4.3.1 查看硬件信息

lscpu : 查看CPU信息

lscpu

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

/proc/cpuinfo

free : 查看内存信息

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

查看内存

lsblk : 列出所有块设备(如磁盘、分区、RAID、LVM 等)的实用工具

cat /proc/partitions : 动态显示当前系统中所有块设备(磁盘和分区)的基本信息,包括主设备号、次设备号、块数和设备名称

lsblk

4.3.2 查看系统版本信息

uname -r : 查看内核版本

uname

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

/etc/os-release

4.3.3 日期和时间

  1. datell /etc/localtime

时间

  1. date +%F,查看当前日期

查看当前日期

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

指定显示某月日历

  1. 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 会话管理

  1. 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
  1. tmux
# 创建
tmux new -s session_name
tmux attach -t session_name

# 退出
快捷键:ctrl B -> D

# 关闭
exit

4.4 字符集和编码

术语 说明
字符集 字符的集合(如ASCII包含128个字符,Unicode包含全球字符)
编码 将字符转换为二进制数据的规则(如UTF-8、GBK)

常见字符集与编码

  1. ASCII

    1. 范围:128个字符(0-127),包括英文、数字、控制符。

    2. 每个字符占1字节(实际只用了7位,最高位为0)。

    3. 示例:A → 01000001(十六进制 0x41)。

  2. Unicode

    1. 目标:统一全球字符(涵盖ASCII,支持中文、emoji等)。

    2. 字符集:为每个字符分配唯一码点(如 U+4E2D 表示“中”)。

    3. 编码方案:

      1. UTF-8:变长编码(1-4字节),兼容ASCII。
      2. UTF-16:固定2或4字节。
      3. UTF-32:固定4字节。
  3. 中文编码

编码 说明 示例
GBK 汉字内码扩展规范,2字节编码 “中” → 0xD6 0xD0
GB18030 GBK的超集,支持少数民族文字 兼容Unicode
  1. 修改LANG变量实现中文语言提示
echo $LANG
LANG=zh_CN.UTF-8

LANG

0a,换行符

test.txt

  • -,文件类型,当前为普通文件

    • d=目录,l=符号链接,c=字符设备,b=块设备
  • rw-r--r--,分三组,三个一组,分别代表所有者、所属组和其他用户的权限

  • 1,硬链接数

  • root root,所有者和所属组

  • 4,大小,当前为4 bytes

  • 7月 13 11:41,最后修改时间

  • test.txt,文件名称

5. 获得帮助

whatis

help

posted @ 2025-07-12 01:21  midorii  阅读(13)  评论(0)    收藏  举报