为什么学习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 tail 命令
tail -f filename
→
\to
→将 filename
文件里的最尾部的内容显示在屏幕上,它通常用于监视日志文件或查看正在不断写入的文件的新数据。
tail -f filename | grep ipc
→
\to
→抓取filename
文件中含ipc
的行并显示在屏幕上
Linux scp命令
scp [选项] 用户名@远程服务器地址:远程文件路径 本地目标路径
scp user@远程服务器地址:/远程路径/文件.txt /本地路径/
→
\to
→从远程服务器复制单个文件到本地目录
scp -P 2222 user@远程服务器地址:/远程路径/文件.txt /本地路径/
→
\to
→使用非默认 SSH 端口号(例如,端口号 2222)进行文件传输
scp -r user@远程服务器地址:/远程路径/目录/ /本地路径/
→
\to
→从远程服务器整个目录到到本地目录
Linux ps命令
ps aux
→
\to
→显示系统上运行进程的详细信息
ps aux | grep docker
→
\to
→使用grep命令搜索docker进程
关于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
连接状态