datawhale-team-learning-program-Linux

内容为DataWhale组队学习计划6月Linux学习笔记
reference link

Day1、什么是Linux

Linux,一种免费使用可自由传播的类UNIX操作系统(Operation System),常说的Linux指的是一个基于POSIX(可移植操作系统接口)的多用户、多任务、支持多线程和多CPU的操作系统,Linux在开发者中常用,范围广,用户增长速度快。

一、为什么要用Linux

免费,开源,安全可靠(常用作服务器),支持多用户等,安装使用方便,社区支持强

二、发展

Unix:价格昂贵,保密性强
MacOS:苹果专用。
Linux:MINIX(教学使用)->Linux(Linus编写,普适性强,开源)

三、常用版本

1、Debian:稳定,适合作为服务器
2、Ubuntu:界面完善,社区支持良好,较为常用
3、CentOs:基于Linux开发源代码的操作系统
......

Day2、Linux安装

如果没有服务器,有时候一些模型或者框架在Window容易出现配置问题,虚拟机+Ubuntu环境可以代替,额,虽然也有点麻烦。

一、查看Ubuntu版本

cat  /etc/issue

cat /etc/lsb-release

etc:/etc/目录下通常用来存放一些配置文件

二、软件安装

Linux下主要有两种软件安装方式:软件包安装和源码编译安装。

1、安装包安装:

包管理工具可以在操作系统中提供安装,升级,卸载软件的方法,Linux的包管理工具为配置开发环境提供了便利。
两个包管理工具:

  • DPT:基于deb软件包的Linux发行版
  • RPM:基于rpm软件包的Linux发行版
(1)、deb

deb软件包管理工具-Dpkg,Debian Package,是一个可以安装,构建,删除以及管理Debian软件包的命令行工具
dpkg的一些常用方法:

dpkg -参数 <pack.deb包名>
-i == --install 安装一个Debian安装包
-c == --contents 列出安装包内容
-l == --info 提取包中的详细信息,名称,大小,版本等
-r == --remove 移除安装包
...
(2)、rpm

rpm是redhat,suse的格式,全称为Redhat PackageManager,Linux安装时,除了几个核心模块以外,其余几乎所有的模块均通过RPM完成安装。
rpm的一些常用方法:

rpm -参数 <pack.rpm包名>
-i 安装一个rpm包
-iv 安装时候显示正在安装的文件信息
-ivh 安装时显示安装的信息和进度
...

2、编译源码安装

可以获取最新发布的软件,自行安装,定制性更强。

3、在线安装

(1)、apt包管理

软件的各个包之间往往存在依赖关系,而人为去解决往往很麻烦,因此APT的出现解决了软件包之间的依赖和获取问题。
apt常用命令:(通常需要sudo,root权限)

sudo apt-get update  # 更新本地索引 ,更新/var/lib/apt/lists中的内容
sudo apt-get upgrade  # 更新所有软件包
sudo apt-get install xx  # 安装软件
sudo apt-get remove xx  # 卸载
sudo apt-get remove --purge name  # 卸载并彻底清除
sudo apt-get clean  # 清除下载文件的存档

注:/var目录下主要存放常态性的变动文件,在系统运行后会逐渐占用硬盘容量的目录。包括缓存/var/cache,登录文件日志/var/log,程序执行需要的数据文件目录/var/lib,服务进程/var/run等。

(2)、换源

文件或者软件包从国外下载很慢,可以尝试还是用国内镜像。
Ubuntu的软件源配置文件是/etc/apt/sources.list,系统的配置文件通常比较重要,因此修改之前可以做一下原始备份,比如/etc/apt/sources.list.old,然后再修改配置文件。
用vim或者gedit(需要图形界面)修改sources.list。

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

好像北外的源有时候更快一些

# 北外镜像
https://mirrors.bfsu.edu.cn

三、常用快捷键

快捷键 功能
Ctrl+a 光标移动到开始位置
Ctrl+e 光标移动到最末尾
Ctrl+k 删除此处至末尾的所有内容
Ctrl+u 删除此处至开始的所有内容
Ctrl+d 删除当前字符
Ctrl+h 删除当前字符前一个字符
Ctrl+w 删除此处到左边的单词
Ctrl+l 相当于clear,即清屏
Ctrl+r 查找历史命令,history
Ctrl+b 向回移动光标
Ctrl+f 向前移动光标
Ctrl+Left-Arrow 光标移动到上一个单词的词首
Ctrl+Right-Arrow 光标移动到下一个单词的词尾
Ctrl+d 退出终端

Day3 用户及用户组

一、用户与用户组

Linux系统支持多用户多任务,简单来说为了操作上的一些区分性和系统的安全,Linux有很好的用户和组管理办法。不同的用户有不同的权限可以进行不同的操作。
但是用户多了往往不好管理,并且添加新用户时候,某些用户需要的权限和操作可能其他用户同样具有,因此可以将一类用户放到一个用户组中,因此用户组最重要的作用就是方便管理。
并且如果当一个新用户添加的时候,他本不属于任何用户组,因此Linux为其单独创建一个同名用户组,即主用户组。如果该用户加入其他用户组,加入的用户组称为该用户的次用户组
主用户组的信息保存在/etc/passwd文件中,次用户组的信息保存在/etc/group 中。

二、用户ID与组ID

用户名比如zhangsan,root用户名是为了方面用户记忆,对于Linux来说,是通过用户ID来判断是哪个用户的。当创建一个新用户的时候,Linux会增加一个新的用户ID和用户组ID,也就是UDI,GID。

sudo useradd zhangsan  # 添加新用户
grep zhangsan /etc/passwd # 查询用户组信息
zhangsan:x::UID:GID::/home/zhangsan:/bin/sh  # 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell

grep zhangsan /etc/group # 查询次用户组信息

三、用户及用户组命令

1、用户相关

其中最常用的就是用户的增删,修改用户名和密码

useradd 选项 用户名  # 创建用户
- r:创建系统用户
- e: 指定失效日期
- u:指定用户UID,但是不要小于500

userdel 选项 用户名  # 删除用户
-r :同时删除/usr/用户,也就是用户的家目录

usermod 选项 用户名  # 修改用户
- e:修改用户的失效曰期 
- g: 修改用户的初始组,也就是修改/etc/passwd用户信息的GID字段
- I: 修改用户名

passwd 选项 用户名  # 修改用户密码
- S:查询用户名密码状态:显示密码信息/etc/shadow文件的密码内容

2、用户组

groupadd 选项 用户组  # 添加用户组
- r:创建系统群组 
- g:指定GID

groupdel 组名  # 删除用户组,安全起见,删除用户组时候通常需要先将用户组下的用户删除

groupmod 选项 用户组  # 修改用户组属性
- g:修改GID
- n:修改用户组名

Day4、文件和目录管理

一、Linux目录

与盘符不同,Linux以树状结构为目录。树状目录以/为开始,也就是根目录,是Linux文件系统的一个总入口,所有的文件和目录都在根目录之下。
因为在一个操作系统中有不同的文件,用户文件,系统文件,二进制文件,数据文件等,为了统一管理,制定了一个标准,称为FHS(Filesystem Hierarchy Standard)。其规定了文件及目录的存放标准。

1、目录细节

ls / # 查看根目录下文件结构

包括一下目录

  • /bin:基本的用户命令二进制文件目录,包含root和普通用户都可以使用的命令。
  • /etc:配置文件目录,包含程序所需的配置文件,是可以修改的。
  • /boot:引导文件目录,包含系统启动过程所需要的文件。
  • /dev:外部文件目录,Linux中,设备(device)也被当做文件管理,与其他文件的访问方式相同。
  • /lib:库文件目录,包含引导系统和运行文件系统所需要的镜像文件,可以被共享
  • /sbin:系统二进制文件,管理员可用
  • /proc:进程信息文件,包含系统进程相关信息。
  • /lose,/found:记录系统非法关机的相关文件。
  • /var:var目录存放的文件比较丰富,通常可以增长,包括/var/log日志文件,/var/lib数据库文件,/var/mail电子邮件文件等。
  • /tmp:包含系统和用户创建的临时文件。系统重启之后,目录文件全都删除。
  • /home:存储用户文件。
  • /usr:用户程序目录。

二、Linux文件

1、Linux文件类型

共6种

  • 普通文件:包含纯文本文件(ASCII),二进制文件(binary),数据格式文件(data)。
  • 目录文件:也就是目录,Linux中目录也是文件
  • 链接文件:相当于快捷方式。指向其他文件
  • 设备文件:Linux中硬盘,键盘,鼠标外设也被当做文件管理,也就是设备文件,统一放在/dev/目录下管理
    • 块设备文件:存储数据供系统存取的接口设备,如硬盘或者软盘。
    • 字符设备文件:即串行端口的接口设备,键盘或者鼠标。
  • 管道文件:提供进程通信的一种文件,作用于有血缘关系的进程之间,通常是单向通信。
  • 套接字文件:也是进程间通信方法的文件,可以双向通信。
    存储空间的占用:文件、目录、符号链接占用相应的存储空间。套接字、设备文件和管道是伪文件,不占用磁盘空间。

2、文件权限

linux中对于不同的文件和不同的用户有不同的权限

查询目录文件
ll
ls  -l

其中对于普通文件:

  • r:表示文件具有可读权限
  • w:表示文件具有写权限
  • x:表示文件具有可执行权限
    对于目录文件:
  • r:表示可以查询目录下的文件列表
  • w:表示可以在目录下删除和创建文件
  • x:可以进入目录,能查看文件的详细信息,访问文件内容

3、常用命令

ls 选项  目录路径  # 查询下目录文件信息
-l:列出文件详细信息,包括文件属性和权限
-a:包含隐藏文件,也就是以<code>.</code>为前缀的文件或者文件夹

cd 路径  # 进入目录
cd -  # 进入上一次的工作目录
cd ~  # 进入用户家目录

pwd # 显示目前路径

mkdir  选项  目录名称  # 创建目录
-m:配置自定义权限,默认使用umask权限
-p:如果父目录未创建,递归创建

cp 选项  源文件  目标目录/文件
-r:递归持续复制
-f:如果目标文件存在,则删除强制复制
-i:如果目标文件存在,则覆盖之前做出查询
-p:将文件属性也一同复制

mv 源目录/文件  目标地址/文件
参数与cp相似

rm 选项 文件/目录
参数与cp相似

cat 选项 目标文件地址  # 从第一行显示文件内容
-b:列出行号,但是空白行!表示行号
-n:正常列出行号

head  # 查询目标文件前几行,默认10行
-n:指定显示前行数
-v:打印时显示文件名称
-c:指定显示前字节数

head -n 3 test.txt # 显示test.txt文件的前三行
head -n -3 显示除了文件最后3行外的所有内容(**不包括倒数第三行**)

tail  # 查询目标文件最后几行,默认10行
参数与head相似,同时也支持打印多个文件

tail -n 3 test.txt  # 显示文件最后3行
tail -n +3 test.txt  # 从文件第3行及之后输出所有行(**包括第三行**)

ln -s test.txt test_softlink  # 为test.txt增加软链接
ln test.txt test_hardlink  # 为test.txt增加硬链接

面试题:
题目一:从文本文件test.txt的第10行开始显示,显示10行,也就是10-19行

法1
cat test.txt | head  -n 19 | tail -n +10
法2
cat test.txt | tail -n +10 | head -n 10

题目二:软硬链接的区别
从使用的角度讲,两者没有任何区别,都与正常的文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行。
硬链接:与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块,inode可以理解为C语言中的指针,指向物理盘的一个区块。
软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。
详细解释链接

Day5、Linux磁盘管理

一、磁盘介绍

磁盘(disk)是指利用磁记录技术存储数据的存储器。磁盘是计算机主要的存储介质,可以存储大量的二进制数据,与内存存储的断电数据清楚不同,磁盘断电后也能保持数据不丢失。
早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。

1、磁盘运行原理

简单来说就是多个盘片之间靠主轴连接,电机带动主轴做旋转运动,通过多个磁头臂的摇摆和磁盘的旋转,磁头就可以在磁盘旋转的过程中就读取到磁盘中存储的各种数据。

2、磁盘组成几部分

  • 扇区:硬盘的盘片被磁道划分成多个扇区。硬盘的读写以扇区为基本单位
  • 磁道:磁盘的每个盘片被划分为许多同心圆,划分园的线条叫做磁道。
  • 柱面:每一个盘片同一大小的同心圆可以看成连在一起的柱面,磁盘在分区的时候最小单位是柱面,每一个盘片的上下面都可以读取数据,每一个磁头,不可以跨盘面读取数据。

二、磁盘管理

Linux磁盘管理通常分为五个步骤

  • 添加硬盘
  • 设置RAID或者逻辑卷LVM
  • 进行分区
  • 分区格式化
  • 挂载文件系统

1、添加硬盘

添加硬盘之前先介绍下RAID和LVM
RAID:磁盘阵列,磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,可以将数据切割成许多区段,分别存放在各个硬盘上。RAID分为很多模式,不同的模式的数据存储策略不同,主要是安全性,数据冗余以及存取效率之间的balance。数据冗余了相当于做了备份提升安全性,但是同时会造成存储量提升,存取效率降低甚至读写不一致等问题。
LVM:Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。其是用来解决磁盘分区不足调整分区复杂的问题。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

2、分区

硬盘添加之后需要进行分区。

(1)、为什么进行分区

将统一类型的文件放在相同的分区,方便管理。这样当硬盘出现问题之后,某些分区出问题,不会影响其他分区,可以减少损失。

(2)、分区常用命令
fdisk 选项 磁盘 # 更改分区表
fdisk 选项 -l <磁盘> # 列出分区表
-b:显示扇区的计数和大小
-l:显示分区并退出

对某个磁盘进行分区之后,比如fdisk /dev/sda会出现以下菜单进行选择

m:显示菜单和帮助信息。
a :活动分区标记/引导分区
d :删除分区
t :设置分区号
v :进行分区检查
...

3、格式化

一般指的是逻辑格式化,它是指根据用户选定的文件系统,在磁盘的特定区域写入特定数据,以达到初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。
文件系统可以认为是操作系统组织存储设备上的文件和数据的一种方法。

(1)、常用命令
mkfs [选项] [-t <类型>] [文件系统选项] <设备> [<大小>]  #创建一个文件系统
-t:文件系统的类型
-V:给出操作的解释
-v:显示版本信息

4、挂载

(1)、什么是挂载

在Linux系统中,硬件设备也是文件,和普通的文件一样管理,存放在目录树下。挂载就是指将设备文件中的顶级目录连接到Linux根目录下的某一目录,访问该目录就相当于访问设备。

(2)、挂载命令
mount /dev/usb /mnt/usb  # 默认将设备/dev/usb 挂载到 /mnt/usb
原文地址:https://www.cnblogs.com/welan/p/14882361.html