dong-frank的博客

Linux系统基础 2024.7.24

字数统计: 2.4k阅读时长: 8 min
2024/07/27

Linux系统基础

如何利用Linux系统帮助日常的学习和生活使用

Linux操作系统溯源

  • 一种开源的操作系统
  • 诞生于Unix操作系统
  • 类Unix操作系统:Minix操作系统,用于教学
  • 1991.8.25 Linus Torvalds开发Linux操作系统

Linux vs Linux发行版

  • Linux:操作系统的内核,管理硬件资源,提供基本服务
  • Linux发行版:将Linux内核与应用程序、库文件、用户界面等打包在一起,形成一个完整可用的操作系统
  • redhat:第一个Linux商业版本
  • debian:另一个重要的发行版
  • ubuntu:目前最流行的发行版
    • 广泛的社区支持
  • 不同的发行版软件更新方式不同
    • Ubuntu的更新方式更加保守,更加稳定
  • MacOS:源于 BSD unix

使用Linux

  • 通过虚拟化软件安装/导入Linux
    • virtualbox
    • VMware
    • 安装:像其他的软件安装一样,时间较长
    • 导入:发行版的克隆,解压缩后可以直接使用
      • 桌面版vs服务器版
        • 桌面版面向普通用户,有图形化界面
        • 本节课程使用服务器版
  • 通过微软的WSL
    • 不是虚拟化出一个Linux系统
    • 而是使用windows内核,模拟出一个Linux系统
  • 申请公有云上的Linux虚拟机
  • 在mini主机,树莓派等小型主机上安装Linux系统
  • Live USB

导入Linux

  1. 查看是否启用虚拟化
  2. virtualbox导入Linux
  3. 网络配置选择NAT网络并点击创建
    • 添加NAT网络使所有的虚拟机可以互相连通

日常使用

  • 用户名:ubuntu

  • 密码:ubuntu

  • 一般不用重启,直接暂停,然后选择休眠

软件更新

每天日常要做:检查软件库有没有更新,更新软件库

  • 安全考虑
  1. 从apt软件库中更新本地的软件库 sudo apt update
  2. 更新到最新新版本 sudo apt upgrade

ctrl c 中断更新
apt开头就是软件安装相关命令

虚拟机启用SSH服务

  1. sudo apt update
  2. sudo apt install openssh-server 安装openssh-server 远程登录服务器
  3. sudo systemctl start ssh 运行ssh服务

systemctl开头就是启动服务的相关命令
启用ssh服务后就可以从远程登录服务器(22号端口),可以通过外部图形化界面登录 ssh client

  1. ip addr 查看虚拟机ip
  2. 在virtual box端口转发中添加映射规则, 主机端口确保不会被占用即可
  3. 打开ssh client输入主机地址127.0.0.1和相应配置的端口号

为什么要使用命令行接口

针对程序员和管理者,图形化等其他接口限制了用户操作的方式.
bash shell:bourne orgain shell 本课程简称为shell
zsh:macOS的shell

ubuntu@ubuntu2204:~$ 用户名@主机名

~ 特指 home directory
$ 普通用户 normal user 不能修改系统(包括软件安装)
sudo 让你执行完这个命令后升级为管理员用户 不是所有用户都能执行sudo命令
sudo -i 切换为超级用户 没有经验不要随意切换
exit 退出切换回普通用户
# 超级用户 super user

切换时区

echo “zone=Asia/Shanghai” | sudo tee -a /usr/share/zoneinfo/Asia/Shanghai

sudo rm /etc/localtime

sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

以echo为例介绍带参数的命令

回显命令,给他什么输出什么,不用考虑空格
echo hello world
但一般的命令对于空格这样的特殊符号敏感

  • 加单引号:echo 'hello world'
  • 转义:echo hello\ world
    • 反斜杠还可以延续行echo this is a multi-\ line

Linux系统是怎么找到这些命令的

shell其实就是一种编程语言
输入date时,shell会去判断

  1. 是不是编程关键字
  2. 是不是命令
    1. 在环境变量下找到相应的命令 PATH
    2. printenv PATH
      1. Linux用正斜杠表示目录,反斜杠表示转义和windows不同,用冒号分隔不同路径
      2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
      3. bin:binary 二进制
      4. sbin: super binary
    3. 更通用做法echo $PATH
      1. $PATH就是取出PATH的值 由shell负责解析
      2. 再由echo把他显示出来 由echo命令完成

查看究竟是哪个命令 which date 只能找到命令,不能找到独立的功能

  • which type 无法找到

shell内置的功能 找到命令 type date

  • type type可以找到

可以用户自己指定要运行的命令的路径/usr/bin/date

  • 用绝对路径来执行命令更加安全
  • 因为环境变量是可以被修改的

Linux系统的路径

  1. /表示目录
  2. 文件以树状结构分布 不分区,没有盘符的概念
  3. everything is file
    1. 用户的接口一致性

对路径的一些操作
pwd :print working directory
/home/ubuntu “ubuntu”用户的家目录
cd :目录切换
/home 绝对路径(根号开头) ubuntu 相对路径(当前路径下)
.. 上一级目录 .当前目录
cd ./ubuntu 切换到当前目录下的ubuntu目录
/usr/bin$ ./date 执行当前目录下的date 弄懂shell执行一个命令的原理
~ 家目录
cd - 回到上一次的目录

ls 显示当前路径下的文件列表

  • 白色是文件
  • 蓝色是文件夹
  • 灰色是备份 .orig
    • 备份在linux下很重要,因为linux操作不可逆

Linux系统文件的权限

ls -l

  1. total 4: 当前路径文件所占磁盘的块数
    1. du查看所占空间
  2. -开头: 普通文件
  3. d开头: 目录
  4. l开头: 链接
  5. 后面以三个字母为一组 -rw-rw-r--
    1. r可读 w可写 x可执行(与windows根据后缀判断是否可以执行不同)
    2. 前三位为拥有者,中间三位为所属的组 (每个用户一般都自己一个人一个组)
    3. 最后三位为其他用户
    4. 对于目录可读:可以列出目录下的文件
    5. 对于目录可写:可以增加删除目录下的文件
    6. 对于目录可执行:可以进入目录
    7. 一个目录的可执行权限最重要! 只有能进入这个目录才能更改目录下的文件
    8. 对于文件能否删除,不决定于对这个文件是否可写,关键是对目录是否可写
  6. 字母后面的数字: 硬链接的数量
    1. 硬链接 数据存储在磁盘的一个区域,文件名可以看成是对这个数据的引用
    2. 软链接 类似Windows的快捷方式,创建一个文件,指向这个文件名,文件名才是指向数据
    3. 文件的硬链接数一般为1,目录的硬链接数为2
      1. 上一级目录的链接
      2. 当前目录下的 . 隐藏文件 ls -a
  7. 用户后面的数字:文件大小
    1. ls -lh已易读的方式显示出来

Linux系统的文件

boot目录: Linux系统的内核文件
dev目录: 设备目录 设备文件以c开头
etc目录: 放置配置文件的目录
lib目录: 库目录
home目录: 家目录
root目录: 超级用户家目录
var目录: 大小可变的文件的目录 日志文件
procsys目录: 方便对内核的目录进行修改
tmp目录: 临时目录 t权限 粘着位: 只有目录拥有者(root) 或 文件拥有者 可以进行删除

ls -r以递归形式显示文件

mv 重命名和更改文件位置
cp 复制
rm 删除 不能删除目录 谨慎执行,不能恢复的
rm -i 弹出提示是否删除
rmdir 删除空目录
rm -r 递归删除目录下所有文件
mkdir 创建目录注意空格
clear 清空shell 快捷键ctrl l

Linux系统的密码

passwd修改密码
cat打开文件
less一页一页的显示打开的文件 q退出
/etc/passwd文件中存放着用户的密码(安全考虑已不存放在这)和用户的id号(辨别是否是超级用户),还可以配置家目录和启动的bash

里面有很多无法登录的其他用户,用于系统的操作

密码的难破解程度,决定于密码的长度

密码的散列值实际存放于/etc/shadow
passwd的权限 -rwsr-xr-x s权限表示其他用户可以拥有和拥有者一样的权限
这种程序不能有bug否则很危险

命令的学习

man ls 查看ls命令的手册
ls --help 查看帮助信息

第三方软件学习:TLDR (too long don’t read)

在程序之间建立连接 – 重定向

运行一个程序有三个流

  1. 输入流 键盘 stdin 0
  2. 输出流 屏幕 stdout 1
  3. 错误输出流 屏幕 stderr 2

可以对程序的流进行重定向改变流向

  • 重定向流到文件 > file
  • cat < hello.txt >hello2.txt 重定向输入由hello.txt输入, 再重定向输出输出到hello2.txt
  • >>追加输出重定向
  • <<用于输入多行内容,不是重点
  • 2>错误输出重定向

在程序之间建立连接 – 管道

管道| 将一个程序的输出 和另一个程序的输入连接起来

ls -l | tail -n1
ls | rm报错: rm命令是接受参数不是接受输入 不是所有命令都能用管道连接
ls | xargs rm: xargs将输入转化为参数

CATALOG
  1. 1. Linux系统基础
    1. 1.1. Linux操作系统溯源
    2. 1.2. Linux vs Linux发行版
    3. 1.3. 使用Linux
      1. 1.3.1. 导入Linux
      2. 1.3.2. 日常使用
      3. 1.3.3. 软件更新
      4. 1.3.4. 虚拟机启用SSH服务
      5. 1.3.5. 为什么要使用命令行接口
        1. 1.3.5.1. 切换时区
        2. 1.3.5.2. 以echo为例介绍带参数的命令
        3. 1.3.5.3. Linux系统是怎么找到这些命令的
        4. 1.3.5.4. Linux系统的路径
        5. 1.3.5.5. Linux系统文件的权限
        6. 1.3.5.6. Linux系统的文件
        7. 1.3.5.7. Linux系统的密码
        8. 1.3.5.8. 命令的学习
      6. 1.3.6. 在程序之间建立连接 – 重定向
      7. 1.3.7. 在程序之间建立连接 – 管道