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服务器版
- 桌面版面向普通用户,有图形化界面
- 本节课程使用服务器版
- 桌面版vs服务器版
- 通过微软的WSL
- 不是虚拟化出一个Linux系统
- 而是使用windows内核,模拟出一个Linux系统
- 申请公有云上的Linux虚拟机
- 在mini主机,树莓派等小型主机上安装Linux系统
- Live USB
导入Linux
- 查看是否启用虚拟化
- virtualbox导入Linux
- 网络配置选择NAT网络并点击创建
- 添加NAT网络使所有的虚拟机可以互相连通
日常使用
用户名:ubuntu
密码:ubuntu
一般不用重启,直接暂停,然后选择休眠
软件更新
每天日常要做:检查软件库有没有更新,更新软件库
- 安全考虑
- 从apt软件库中更新本地的软件库
sudo apt update
- 更新到最新新版本
sudo apt upgrade
ctrl c 中断更新
apt开头就是软件安装相关命令
虚拟机启用SSH服务
sudo apt update
sudo apt install openssh-server
安装openssh-server 远程登录服务器sudo systemctl start ssh
运行ssh服务
systemctl开头就是启动服务的相关命令
启用ssh服务后就可以从远程登录服务器(22号端口),可以通过外部图形化界面登录 ssh client
ip addr
查看虚拟机ip- 在virtual box端口转发中添加映射规则, 主机端口确保不会被占用即可
- 打开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会去判断
- 是不是编程关键字
- 是不是命令
- 在环境变量下找到相应的命令
PATH
printenv PATH
- Linux用正斜杠表示目录,反斜杠表示转义和windows不同,用冒号分隔不同路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- bin:binary 二进制
- sbin: super binary
- 更通用做法
echo $PATH
$PATH
就是取出PATH的值 由shell负责解析- 再由
echo
把他显示出来 由echo命令完成
- 在环境变量下找到相应的命令
查看究竟是哪个命令 which date
只能找到命令,不能找到独立的功能
which type
无法找到
shell内置的功能 找到命令 type date
type type
可以找到
可以用户自己指定要运行的命令的路径/usr/bin/date
- 用绝对路径来执行命令更加安全
- 因为环境变量是可以被修改的
Linux系统的路径
- 以
/
表示目录 - 文件以树状结构分布 不分区,没有盘符的概念
- everything is file
- 用户的接口一致性
对路径的一些操作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
- total 4: 当前路径文件所占磁盘的块数
du
查看所占空间
- 以
-
开头: 普通文件 - 以
d
开头: 目录 - 以
l
开头: 链接 - 后面以三个字母为一组
-rw-rw-r--
r
可读w
可写x
可执行(与windows根据后缀判断是否可以执行不同)- 前三位为拥有者,中间三位为所属的组 (每个用户一般都自己一个人一个组)
- 最后三位为其他用户
- 对于目录可读:可以列出目录下的文件
- 对于目录可写:可以增加删除目录下的文件
- 对于目录可执行:可以进入目录
- 一个目录的可执行权限最重要! 只有能进入这个目录才能更改目录下的文件
- 对于文件能否删除,不决定于对这个文件是否可写,关键是对目录是否可写
- 字母后面的数字: 硬链接的数量
- 硬链接 数据存储在磁盘的一个区域,文件名可以看成是对这个数据的引用
- 软链接 类似Windows的快捷方式,创建一个文件,指向这个文件名,文件名才是指向数据
- 文件的硬链接数一般为1,目录的硬链接数为2
- 上一级目录的链接
- 当前目录下的
.
隐藏文件ls -a
- 用户后面的数字:文件大小
ls -lh
已易读的方式显示出来
Linux系统的文件
boot
目录: Linux系统的内核文件dev
目录: 设备目录 设备文件以c
开头etc
目录: 放置配置文件的目录lib
目录: 库目录home
目录: 家目录root
目录: 超级用户家目录var
目录: 大小可变的文件的目录 日志文件proc
和sys
目录: 方便对内核的目录进行修改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)
在程序之间建立连接 – 重定向
运行一个程序有三个流
- 输入流 键盘 stdin 0
- 输出流 屏幕 stdout 1
- 错误输出流 屏幕 stderr 2
可以对程序的流进行重定向改变流向
- 重定向流到文件
> file
cat < hello.txt >hello2.txt
重定向输入由hello.txt输入, 再重定向输出输出到hello2.txt>>
追加输出重定向<<
用于输入多行内容,不是重点2>
错误输出重定向
在程序之间建立连接 – 管道
管道|
将一个程序的输出 和另一个程序的输入连接起来
ls -l | tail -n1
ls | rm
报错: rm
命令是接受参数不是接受输入 不是所有命令都能用管道连接ls | xargs rm
: xargs将输入转化为参数