为什么学习Linux?
Linux一般是用作服务器端的操作系统。
| 操作系统分类 | 例如 |
|---|---|
| 桌面操作系统 | Windows、MacOS、Linux |
| 服务器操作系统 | Linux |
| 手机操作系统 | Android、IOS |
| 嵌入式操作系统 | Linux |
可以看出,Windows和MacOS一般家用,一般叫做客户端。而Linux一般运行在服务器端。因此,学习Linux主要有两个方向:
Linux运维Linux嵌入式开发
Linux版本
内核版本
操作系统的核心,用于处理各种和硬件打交道的工作。分为5个部分:内存管理,进程管理,进程间通信,虚拟文件系统和网络。
发行版本
内核版本+各种应用软件。常见的有:Ubuntu、RedHat、CentOS、Debian、Fedora
虚拟机
虚拟机本质是一个软件,用来模拟真实的计算机,可以在虚拟机上安装操作系统。
虚拟机下载安装:VMWARE15
Ubuntu18.04下载与安装:Ubuntu18.04
Linux文件系统
Windows下有盘符,但Linux下没有盘符的概念,它只有一个根目录。
/bin存放二进制可执行文件/etc存放系统管理和配置文件/home/用户名存放用户的文档/lib存放文件系统中的程序运行所需要的共享库与内核模块/usr存放用户应用程序
Linux终端命令
ls、pwd、cd命令
启动终端,有个默认目录:/home/用户名
pwd→ \to→ print work directory 打印当前工作目录/路径ls→ \to→ list 列出所有文件
蓝色代表文件夹,白色代表文件cd→ \to→ change directory 切换操作路径(区分大小写)
cd ..→ \to→回到上一级路径
可以打开多级路径→ \to→cd Desktop/aa
tab和上下方向键
输入cd 切换目录时,可以按下tab键进行补全。
当已输入字母和目录中匹配仅有一个时,可以直接匹配;
不止一个时,再按一次tab键可以打印所有匹配目录
按方向键上,可以获取历史命令
ls的三个选项lha的作用和隐藏文件
输入clear可以清除界面上所有命令
直接回到家目录 → \to→cd ~或者cd
ls -l → \to→ 以列表形式呈现
ls -a → \to→ 显示隐藏文件
两者可以结合使用,ls -l -a
ls -h → \to→ 单独使用没有效果
ls -l -h → \to→ 显示文件大小
也可以,将命令写在一块:ls -lh。先后顺序并不影响
ubuntu中隐藏文件都是以.开头的
ls 路径 → \to→ 列出目录下所有文件
ls通配符
*代表0或多个任意字符ls *.txt→ \to→ 列出所有txt文件?代表一个字符ls ???.txt→ \to→ 文件以txt结尾的,有三个字母/数字的[]代表其中任意一个字符ls [1234]23.txt→ \to→ 第一个字符从1234中取ls [1-4]23.txt
使用cd命令打开路径
cd . → \to→ 打开当前目录
cd .. → \to→ 打开上一级目录
cd ../.. → \to→ 打开上上一级目录
cd ~ → \to→ 回到家目录
cd 相对路径 → \to→ 根据当前所处路径进行计算
cd 绝对路径 → \to→ 从根目录进行描述
cd - → \to→ 从前后两个操作目录来回切换
使用touch、mkdir和rm命令进行文件/文件夹的创建和删除
touch test.txt → \to→ 创建文件`test.txt
touch .test.txt → \to→ 创建隐藏文件`test.txt
mkdir bb → \to→ 创建文件夹bb
mkdir bb/cc → \to→ 无法创建多级文件夹bb和cc
rm test.txt → \to→ 删除文件test.txt
rm .test.txt → \to→ 删除隐藏文件.test.txt
rm -d bb → \to→ 删除空文件夹bb
rm -r bb → \to→ 删除文件夹bb
使用mv和cp命令进行文件/文件夹的移动和复制
mv test.txt aa → \to→ 移动当前目录下的test.txt文件至当前目录的aa文件夹下
mv test.txt 绝对路径 → \to→ 移动当前目录下的test.txt文件至绝对路径下
移动不但可以移动文件,还可以移动文件夹
mv bb aa → \to→ 将当前目录下的bb文件夹移动至aa文件夹下
cp text.txt aa → \to→ 复制当前目录下的test.txt文件至当前目录的aa文件夹下
cp -r aa/bb . → \to→ 复制当前目录下aa文件夹中的bb文件夹至当前目录下
使用mv命令可以进行重命名的操作
mv test.txt ./123.txt → \to→ 重命名为123.txt
mv test.txt aa/123.txt → \to→ 将当前目录下test.txt文件移动至aa目录下,并重命名为123.txt
cp test.txt ./123.txt → \to→ 将当前目录下test.txt文件复制至当前目录下,并重命名为123.txt
Linux命令格式和帮助手册
cmd -option parameter
cmd → \to→ 命令
-option → \to→ 选项
parameter → \to→ 对象
cmd --help → \to→ 查看cmd命令帮助文档
man cmd → \to→ 查看cmd命令用户手册
语言设置、时区设置
先安装下Vim编辑器:sudo apt-get install vim
sudo vim /etc/default/locale
改为如下内容:
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
which查看命令所在位置
每个命令执行时,都会去执行一个程序。该程序文件指示了执行该命令时需要做哪些事情。
/bin → \to→ binary,二进制文件,普通命令
/usr/bin → \to→ 用户安装的应用程序
which cd为空,因为cd是shell内置的命令
文件搜索
find 搜索范围 搜索条件
在搜索过程中按下ctrl c可以中止
find /home -name 123 → \to→ 精确搜索
find /home -name 123* → \to→ 模糊搜索
find /home -iname abc → \to→ 选项-i不区分大小写
find /home -user jn → \to→ 按照文件所属人搜索目录下所有文件
find /home -mmin -5 → \to→ 文件内容上次被修改i时间在5分钟以内
-mmin→ \to→ 上次文件内容被修改时间-amin→ \to→ 上次文件被访问时间cmin→ \to→ 上次文件属性(文件权限)被修改时间-5→ \to→ 5分钟以内+5→ \to→ 超过5分钟
find /home type -f → \to→ -type文件类型 f文件 d目录(文件夹) l软链接文件
find /home -size +1 → \to→ 查找大于512字节的文件
有时需要使用条件连接符将两个条件连接起来
-a → \to→ and,表示两个条件都要满足
-o → \to→ or,表示两个条件满足其一即可
例如:find /home/jn/Desktop -name 'a*' -a type -f 表示在桌面上搜索文件名以a开头的文件
除了上述搜索文件的方式,另外,还可以通过文件id去搜索文件
ls -i → \to→ 列出所有文件及其id
例如:find /home -inum 263502 → \to→ 寻找id = 263502的文件
除了find命令,还可以使用locate命令进行文件搜索
为什么使用locate命令会比find快呢? → \to→ locate根据PC上文件创建出一个索引库,而无需遍历。新建的文件不会立即添加到索引库中,当需要立即更新索引库时,输入命令:sudo upatedb
使用cat和more命令查看文件内容
cat 1234.txt → \to→ 在终端不分页地显示所有文件内容
cat -b 1234.txt → \to→ 显示行号,但去除空行
cat -n 1234.txt → \to→ 显示行号,但不去除空行
more 1234.txt → \to→ 分页地显示所有文件内容。按空格键可跳转下一页,按b键可返回上一页
使用grep进行文件内容的搜索
grep -n user 1234.txt → \to→ 搜索含user的行并显示行号
grep -v user 1234.txt → \to→ 搜索不含user的行
grep ‘#' /etc/services → \to→ 在services文件中搜索含#的文本行
grep -v '#' /etc/services → \to→ 在services文件中搜索不含#的文本行
grep ^'#' /etc/services → \to→ 在services文件中搜索以#开头的文本行
grep -v ^'#' /etc/services → \to→ 在services文件中搜索不以#开头的文本行
grep s$ /etc/services → \to→ 在services文件中搜索以s结尾的文本行
grep -i abc 126.txt → \to→ 忽略大小写搜索含abc的文本行
使用右尖括号和双右尖括号进行命令结果输出到文本
echo hello → \to→ 在终端输出上回显
echo hello < 126.txt → \to→ 将hello写入到126.txt文本文件中,并会清除原有的文本内容
echo hello << 126.txt → \to→ 将hello追加写入到126.txt文本文件
重定向不仅可以对echo命令使用,还可以对其他命令使用
grep jn 126.txt >> res.txt → \to→ 在126.txt中搜索含jn的文本行,并将搜索到的文本行追加写入到res.txt中(若没有该文本文件,则创建后再写入)
什么是管道
把一个命令的输出,通过管道连接,作为另一个命令的输入
输出就是命令的结果,输入一般是一个命令的参数。管道通过|建立。
ls -lh | grep 126.txt → \to→ 在ls -lh执行完毕的结果中抓取含126.txt的文本行
grep -v ^'#' /etc/services | more → \to→ 将搜索到的文本内容以分页的方式显示
关于linux下的软链接(快捷方式)
一般不会在同一目录下创建软链接
ln aa/abc abc_softlink → \to→ 在桌面上创建aa文件夹中abc文件的软链接文件abc_softlink
用户管理,用户组管理和权限
Linux系统是多用户的,为什么需要多用户?→ \to→ 服务器是多个人管理(有多个运维人员)
安装系统时,不是默认启用一个root用户,而是创建一个普通用户。root用户具有所有权限,容易闯祸。因此,日常维护工作由普通用户完成,除非遇到系统管理的工作,才会使用到root用户。
那如何添加用户和设置密码呢?
添加用户名
sudo useradd 用户名(-m创建家目录-g指定所在的组选项)
查看是否添加成功,可以输入命令:cat /etc/passwd设置密码
sudo passwd 用户名
若是需要给当前用户更改密码,则直接在终端输入:passwd。不想修改密码,按Ctrl d退出。
关于sudo命令
允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如userdd、halt、rebot、su等。这样,不仅可以减少root用户登录和管理时间,同时提高了安全性。
在用户使用sudo时,会验证当前用户的密码,该密码具有5分钟的有效期,在有效期内输入sudo不需要再输入密码。
当切换到root用户就不需要使用sudo了。
在终端输入命令:sudo passwd root给root用户设置密码。设置完密码就可以直接登录root用户了,输入:su root
当创建用户时,系统会创建一个和用户名同名的组。
每个用户都有一个初始组,可以有零个或多个附加组。
用户组的作用,是为了方便权限控制。(附加组就是为了给用户附加别的权限)
一个用户可以属于多个组,一个组可以有多个用户。
文件属性:所属用户、所属用户组
使用命令:id 用户名 可以查看对应的用户组gid
sudo useradd -g user3 user4 → \to→ 创建属于user3用户组的用户user4
如何进行用户切换、用户删除、用户组管理?
su xx → \to→ 用户切换
su - xx → \to→ 用户切换,并回到切换到的用户的家目录
exit → \to→ 退出当前用户,并返回上一个用户(从哪个用户切换过来的)。若是没有上一用户,则直接退出终端。
userdel xx → \to→ 删除指定用户,但默认不删除家目录
userdel -r xx → \to→ 删除家目录
userdel -f xx → \to→ 强制删除,即使用户正在登录系统
groupadd xx → \to→ 添加用户组
cat /etc/group → \to→ 确认组是否被添加成功
groupmod -n newname xx → \to→ 改名
groupdel xx → \to→ 删除
关于用户的配置文件
/etc/passwd(配置当前系统有哪些用户,以及密码)
- 用户名
- 用户名密码标志,真正的密码在
passwd的影子文件/etc/shadow中 - 用户
id,即uid - 用户所属的组
id,即gid - 全名
- 家目录
- 使用的
shell
那什么是shell呢?→ \to→ shell是用来解析命令,它接收用户命令,并调用对应程序执行。系统内置的有三种shell:
/bin/bash(root用户和初始用户的shell)/usr/sbin/nologin/bin/sh(自己创建用户时的shell)
查看当前系统的所有shell:在终端输入命令cat /etc/shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
1和3的一个显著区别是:1有命令提示符(用户名@计算机名);而3则没有,且3不支持上下方向键和切换目录时没有提示。
那怎么将3修改成1呢?→ \to→ chsh
/etc/group(配置当前系统有哪些用户组)
- 组名
- 组密码标志,真正的密码在
passwd的影子文件/etc/gshadow中 GID- 组中附加用户
关于内置命令和外置命令
当用户在终端输入命令并按下回车时,shell会接收到命令,并判断是内置命令/外置命令。若是内置命令,会直接启用内核中的系统功能调用;若是外置命令,则在系统中查找该命令的文件并调入内存执行,再去进行系统调用。
如何查看一个命令为内置/外置? → \to→ which 命令
如何查看用户信息及使用usermod修改用户组和shell
id/id xx → \to→ 查看id信息
whoami → \to→ 当前登录用户
user -g xxgroup xxuser → \to→ 修改初始组,但基本不会修改
usermod -G xxgroup,xxgroup xxuser → \to→ 修改附加组
usermod -s /bin/bash xxuser → \to→ 修改shell
文件权限的控制
linux系统中的文件分为几类:普通文件、目录文件、设备文件、符号链接文件
普通文件在shell下用ls查看时以-开头,常见的C程序文件、脚本文件、数据库文件都是普通文件
目录文件是一种特殊文件,可以构成文件系统的分层树形结构,在shell下用ls查看时以d开头
设备文件是一种特殊文件,有效的设备文件对应相应的设备,通过设备文件可以操作对应的硬件设备。设备文件包括字符设备和块设备文件。键盘、终端等都是字符设备文件,它们按照字符操作设备;磁盘、光盘等都是块设备文件,它们按照块为单位操作设备。Linux系统的设备文件都放在/dev目录下。第一个字符用b表示的是块设备,用c的是字符设备。
链接文件是一种特殊文件,提供对其他文件的参照,它的数据是所链接的文件的路径名。
九个字符三个为一组,一共有三组。例如:-rwxr-xr-x
第一组为该文件拥有者的权限:可读/写/执行
第二组为组成员的权限:可读/执行
第三组为其他用户的权限:可读/执行
文件夹的权限:
r→ \to→ 列出目录中的内容(仅限于名字)w→ \to→ 可在目录中创建、删除文件x→ \to→ 可进入目录(不能查看目录内容)
什么是可执行文件?
windows下的exe(批处理命令/批处理脚本)一般用来启动某个应用程序;Linux下的shell脚本一般用来启动某个应用程序或服务程序。
怎么修改文件的权限?
请注意,只有文件所有者和超管才可以修改文件权限。使用命令chmod
格式一:chomd [ugo][+-=][rwx] 文件或者目录
例如,chmod u+w,g+x xx.txt
格式二:用数字表示权限,r=4 w=2, x=1
例如,chmod 444 126.txt
如何修改文件的所属者和所属组?
chown newuser 文件/文件夹 → \to→ 修改文件/文件夹的拥有者
chgrp newgroupname → \to→ 修改文件/文件夹的所属组
ubuntu18.04安装一般需要手动分区:
swap分区:逻辑分区,用于交换空间,当作虚拟内存,比物理内存稍大/boot分区:efi系统分区,用于引导分区,存放ubuntu内核,500MB/分区:ext4分区格式,主分区,用于存放系统软件/usr分区:ext4分区格式,逻辑分区,用于存放用户软件/home分区:ext4分区格式,逻辑分区,用于存放用户数据
下图所示为一块120GB固态硬盘分区示例:
| 分区 | 大小 |
|---|---|
swap分区 | 10GB |
/boot分区 | 500MB |
/分区 | 25GB |
/usr分区 | 40GB |
/home分区 | 44.5GB |

安装完unbuntu后,一般视频无法播放,解决方案:安装ffmpeg视频编解码器,但是在安装之前换一下源
打开软件和更新,通过 选择最佳服务器选择速度最快的镜像源,最后shell中输入命令:
sudo apt-get install ffmpeg
2022-8-23更新
netstat -napt→ \to→查看TCP连接状态