首页 / LINUX / Linux 学习笔记
Linux 学习笔记
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux 学习笔记,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含16476字,纯文字阅读大概需要24分钟。
内容图文
![Linux 学习笔记](/upload/InfoBanner/zyjiaocheng/929/5529586d55b34b5aa1a71e65e3e4988e.jpg)
Linux
参考:https://www.runoob.com/linux/linux-tutorial.html
一. Linux 安装与基本使用
1.1 Linux安装
安装程序的引导方式
- 光盘引导
- 网络引导
软件包读取方式
- 光盘
默认的方式,通过本机的光盘设备提供安装文件 - 硬盘
通过本地硬盘中的 .ISO 镜像提供安装文件 - 网络服务器
通过NFS、FTP或HTTP服务器提供安装文件
安装虚拟机
演示使用的VMware Workstation 15 Player和Kubuntu 20.04
发行版具体可以参考FAQ
VMware
注意:64位的操作系统需要vmware10以上的版本,需要打开电脑的虚拟化功能,BIOS中的Virtualization设为enabled(部分电脑需要此设置)
安装配置
- 选择系统的安装位置,在此也可以手动分区,或者选择自动分区(默认则为自动分区)
一个最简单的分区方案一般应该包括三个分区:
(1)引导分区 用来存放引导文件、内核等,挂载点为 /boot,分区大小建议500M
(2)交换分区 挂载点为swap,通常是物理内存的2倍,生产环境中物理 内存小于4G建议2倍,4-16G建议等于物理内存,大于16G建议为物理内存的一半
(3)根分区 用于存放系统中的用户数据、配置文件等,剩余空间建议分给根分区
- 设置管理员(root)的密码
- 创建一个普通用户
系统启动过程
现在不理解可以等计算机组成原理学习完后再来体会。
(1)BIOS启动引导阶段
大多数Linux发行版本使用的引导加载程序有三种:GRUB,GRUB2和LILO。GRUB2是最新的,也是同类程序中使用最广的。
(2)GRUB2启动引导阶段
GRUB2是CentOS7默认的引导加载程序,GRUB2的配置文件位于/boot/grub2/grub.cfg。GRUB2将vmlinuz内核映像文件加载到内存中。
(3)内核阶段
内核是操作系统的核心,是系统启动时加载的第一个程序。系统启动内核从initrd.img(initrd是一种基于内存的文件系统,启动过程中,系统在访问真正的根文件系统时,会先访问initrd文件系统)将所有必需驱动模块加载到Linux系统中并运行1号进程systemd。
(4)systemd进程初始化
Systemd 进程是在Linux系统上运行的第一个进程(PID为1),它初始化系统并启动init(/etc/init.d)进程曾经启动的所有服务,读取配置文件,在目标runlevel.target中加载操作系统。
1.2 Linux基本使用
图形界面与控制台
Linux的运维服务一般是在命令行下进行的,在Linux系统的图形化桌面环境中提供了模拟终端命令行界面的方式,终端方式允许用户通过输入命令使用计算机。
Debian下(包括Ubuntu、Deepin),终端快捷键是ctrl+alt+t
在命令提示符中:
@符号之前,是当前登录的用户名。
@符号之后到:符号之前,是计算机的主机名(hostname)。
:符号之后到$符号之前,是当前目录。
$符号,是普通用户的命令提示符,提示用户可以在此提示符之后输入Shell命令。
符号,Linux的最高权限用户root的提示符
默认普通用户是用$作为提示符的
Linux字符界面
查看计算机系统启动后要进入的默认目标,graphical.target表示图形化界面
systemctl get-default
将multi-user.target目标设置为启动计算机系统后要进入的默认目标, multi-user.target表示字符界面
systemctl set-default multi-user.target
恢复图形界面?
startx
systemctl set-default graphical.target
虚拟控制台
Linux系统可以同时接受多个用户登录,还允许用户在同一时间进行多次登录,因为Linux系统提供了虚拟控制台的访问方式。
Ctrl+Alt+F1可以从字符界面的虚拟终端切换到图形化用户界面
Ctrl+Alt+F2——Ctrl+Alt+F6可以从图形化用户界面切换到字符界面的虚拟终端
虚拟机上操作不方便,需要更改VMware快捷键。
VMware中和Windows进行交互
实际演示
1.3 Linux的基本命令
区分大小写
1.更改密码
passwd
更改用户密码
2.--help选项
passwd --help
--help选项放在命令之后,用来显示命令的信息
3.man命令
man passwd
显示系统文档中的manual页内容
4.info命令
info passwd
是一个基于菜单的超文本系统,是由GNU项目开发并由Linux发布的
5.who命令
who
用于查看当前登录到系统的用户信息
6.uname命令
uname
显示正在使用的Linux系统信息
- r:显示操作系统的内核发行号(Release Number)
- n:显示网络上本机的节点名(Node Name)
- v:显示操作系统的内核版本号(Version Number)
7.date命令
date
显示或设置系统的时间
8.cal命令
cal [month] [year]
在屏幕上输出日历信息
9.echo命令
echo string
用于回显输入内容
10.clear命令
clear
清除shell窗口中的内容
11.su命令
su
用户进入到系统后,切换到其他用户,使用su命令
退回到原来用户使用exit命令
若想成功切换需要切换用户账号的密码
12.注销、重启、关机
注销:在shell窗口键入exit命令或logout命令或者ctrl+D
如果是控制台终端下:退出当前shell程序后,系统又回到控制台终端的login(登录)界面
如果是图形界面的终端下:退出后系统自动关闭该终端,回到图形桌面。
重启 reboot、shutdown –r now
关机 halt、shutdown –h now
演示(需要管理员权限):
立即关闭计算机。
shutdown –h now
15分钟后关闭计算机系统。
shutdown –h +15
10分钟后重启计算机系统并发出警告信息。
shutdown –r +10 “system will reboot .”
注意
个别命令可在Windows的powershell下运行,大部分可以在MacOS的terminal下运行。Windows不区分大小写。
1.4 软件安装
在Linux系统中,需要安装的软件,Debian系一般通过apt安装或deb软件包的管理,RHEL系一般通过yum安装或rpm软件包的管理
- 图像化软件商店安装
- 命令行安装
软件包的封装类型
封装类型 | 说明 |
---|---|
rpm软件包 | 扩展名为.rpm |
deb软件包 | 扩展名为.deb |
源代码软件包 | 一般为.tar.gz、.tar.bz2等格式的压缩包包含程序的原始代码 |
提供安装程序的软件包 | 在压缩包内提供install.sh、setup等安装程序或以.bin格式的单个执行文件提供 |
绿色免安装的软件包 | 在压缩包内提供已编译好的执行程序文件解开压缩包后的文件即可直接使用 |
apt包管理器:
安装、卸载、更新包括操作系统的包
更新索引、更新包、自动解决依赖问题
基本用法:
sudo apt update 更新索引(通过更新源(/etc/apt/sources.list)更新)
apt list --upgradable 查看可用更新
sudo apt upgrade 更新已安装软件包
sudo apt dist-upgrade 更新新包,删除旧包
sudo apt install 安装软件包
sudo apt remove --purge或者sudo apt purge 删除软件包并删除配置文件
1.5 Linux的GUI
Linux的DE(Desktop Environment)多种多样
二、文件系统与目录管理
1.1 文件和目录权限
在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:
- chown (change ownerp) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
Linux 文件属主与属组
文件属于一个特定的用户,而用户在Linux中以组进行分类(用户组)
文件所有者以外的用户可划分为文件所有者的同组用户和其他用户
因此,Linux系统以文件所有者,文件所有者同组用户和其他用户来划定不同文件的访问权限
用户组和用户管理
创建用户组
groupadd mygroup
创建用户
useradd myuser
创建用户时指定用户组
useradd -g mygroup myuser
更改密码
passwd
查看用户所属用户组
groups
文件所有权和权限
可以赋予的权限:读取(r),写入(w),执行(w)
文件的创建者自动成为文件的所有者,但所有权可以转让
root拥有控制完整计算机的权限
- 查看文件的目录和属性
ls -l
# 缩写为:
ll
- 更改文件的属组
chgrp(change group)
chgrp group filename
- 递归地更改
chgrp -R group filename
- 更改文件的属组和属主
chown user:group filename
chown user filename
-R
:递归地更改一个目录及其所有文件(和子目录)的所有权
chown -R user:group filename
- 更改文件的权限
chmod(change mode)
"用户组 +/- 权限"- 用户组:u(owner)、g(gruopers)、o(others)
- 权限:读( r ) 写( w ) 执行( x )
1.2 文件类型
Linux 所有的一切都被表示为文件的形式
查看文件类型
ls -l
设备文件可分为字符设备文件和块设备文件
- 字符设备:能从设备中读取成字符序列的设备,如:磁带和串行线路
数据只能按照发送的顺序从串行线路上获取 - 块设备:可以从随机的位置获取数据,如硬盘
本地域套接口和有名管道与进程通信有关
符号链接(软连接)类似Windows的快捷方式,可以通过一个别名访问文件
建立链接
软链接
为文件创建符号链接
ln -s file myfile
# 创建了一个myfile链接指向file
为目录创建符号链接
ln -s /usr/local/share/ local_share
删除符号链接(文件或目录存在时不能删除符号链接)
rm -i dxx
硬链接
不常用
不带参数的ln建立硬链接
ln days hard_days
两个被联系在一起的相同文件,对其中一个文件的更改会影响到另一个文件
三、vim 和 vi
三种模式:命令模式、输入模式和底线命令模式
命令模式
通过命令模式可以进入输入模式和底线命令模式
- i :进入输入模式
- x 删除当前光标所在处的字符
- : 进入底线命令模式
查找: /pattent
删除:
dd
ndd # 删除从当前一行往后n行
d( # 删除到句子开头
d) # 删除到句子结尾
d{ # 从当前字符删除到段落开头
d} # 从当前字符删除到段落结尾
dG # 当前字符删除到文件尾
输入模式
输入文本和编辑文件
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
命令模式下,连续按两次大写字母ZZ
- 当前文件未被修改:vim直接退出
- 当前文件被修改,vim保存文件后退出
u 撤销命令执行
编辑命令
- 按字符移动光标
- h ←
- j ↓
- k ↑
- l →
- 按字移动光标
- b
- B
- w
- W
- 按句子和段落移动光标
- ()
- {}
- 按行移动光标
-
数字0,可将光标移动到当前行行首。
-
$键,将光标移到当前行行尾。
-
G键将光标移到文件最末行行首,若将光标移动到指定行,可使用
-
[行号]G
- 在屏幕内移动光标
- H(Home)键将光标定位到屏幕顶部一行的最左端;
- M(Middle)键将光标定位到屏幕的中间一行;
- L(Lower)键将光标定位到屏幕底部的一行。
- 注意,这里的移动是指屏幕内,文件本身不发生滚动。
底线命令模式
在命令模式中输入英文冒号进入底线命令模式
基本命令有
- :q 退出程序(未被修改则退出)
- :w 保存文件
通常使用 :wq 强制写入文件(就算文件没有被修改)并保存
q! : 强制退出文集爱你
Lab4 Vim编辑器
实验目的
- 熟悉并掌握 vi 命令模式、文本编辑模式和末行模式三种工作模式之间的转换方法
- 掌握利用 vi 新建、编辑和保存文件
- 熟悉光标的移动、文本的插入与删除等操作
- 掌握字符串替换,行的复制、移动、撤销和删除等操作
实验要求
- 掌握进入和退出 vi 的方法
- 熟悉 vi 编辑器的工作方式
- 理解 vi 文本插入和修改命令的规则、应用
实验内容
基础练习
- 利用vim新建文件file2,输入以下文本内容后,保存退出
Hello world
I come from HZU! - 打开file2文件并显示行号
- 在file2文件的第一行后插入一行内容"I'm sorry!",并在最后一行之后添加一行,内容如下
Hello World! - 将文本之中所有的Hello替换成Goodbye
- 把第3行复制到文本的最后,把第1,2行再移动到第4行,删除第1行和第2行,并恢复删除,不保存修改(分别用命令模式和末行模式完成)
编写Shell
color.sh
echo –n "which color do you like?"
read color
case "$color" in
[Bb]l??)
echo I feel $color
echo The sky is $color;;
[Gg]ree*)
echo $color is for trees
echo $color is for seasick;;
red | orange)
echo $color is very warm!;;
*)
echo no such color as $color;;
esac
echo "out of case"
compute.sh
#!/bin/bash
if [ $# -ne 2 ]
then
echo "usage: $0 mdays size " 1>&2
exit 1
fi
if [ $1 –lt 0 –o $1 –gt 30 ]
then
echo "mdays is out of range"
exit 2
fi
if [ $2 –le 20 ]
then
echo "size is out of range"
exit 3
fi
find / -xdev –mtime $1 –size +$2 –print
编写C
//------------- factorial.c-----------------------
int factorial (int n)
{
if (n <= 1)
return 1;
else
return factorial (n - 1) * n;
}
//----------- main.c-----------------
#include <stdio.h>
int factorial (int n);
int main (int argc, char **argv)
{
int n;
if (argc < 2) {
printf ("Usage: %s n\n", argv [0]);
return -1;
}
else {
n = atoi (argv[1]);
printf ("Factorial of %d is %d.\n", n, factorial (n));
}
return 0;
}
四、系统管理基础
1、系统启动过程
内核引导
运行init
系统初始化
系统运行级别
建立终端
用户登录系统
2、用户管理
五、Shell
1、Shell 基础
Shell 脚本
为shell编写的脚本程序(shell script)
Shell 环境
Linux中的shell有多种类型,最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)
Bourne shell(sh)
Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用
Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。
Linux操作系统缺省的shell是bash,与Bourne shell全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。在Linux系统下面,sh是bash的符号链接
C shell (csh)
Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell,它主要是为了让用户更容易的使用交互式功能,它的语法与C语言很相似。Linux为喜欢使用C shell的人提供了Tcsh。 Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制等。
Korn shell(ksh)
AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。xch
bourne shell(bash)是大多数Linux系统默认的shell
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
2、第一个Shell脚本**
- vi 编写shell脚本
vim 1.sh
#!/bin/bash
echo "hello world"
! 表明一个约定,使用什么解释器执行脚本
- 运行脚本
chmod +x ./test.sh # 添加权限
./test.sh
如果执行时只输入 test.sh
系统默认会从PATH目录中查找,大多数情况下当前使用的目录都不在PATH中,所以要用 ./test.sh
告诉系统从当前目录中开始找
3、shell 编程
变量
定义变量: your_name="hello world"
等号两边不能有空格
- 只读变量:
readonly url="baidu.com"
不能从新赋值也不能被删除
输出变量: echo $your_name
删除变量: unset your_name
变量类型
- 环境变量:所有的程序都可以使用环境变量,部分程序需要环境变量保证运行
- 局部变量:在脚本或命令中定义,仅对当前shell实例有效,其他shell启动的程序不能访问局部变量
- shell变量:由shell程序设置的特殊变量,这些变量保证了shell的正常运行
字符串
定义字符串: your_name="hello world"
- 单引号和双引号都可以用来定义字符串,但两者有些差别
- 单引号标记的内容会被原样输出
- 双引号内的内容可以被翻译(如字符串、转义字符等)
输出字符串
greeting="hello ${your_name3} it is my world"
echo $greeting
获取字符串长度
echo ${#yourname}
截取子字符串
echo ${yourname:1:4}
激活转义字符
echo -e $greeting
传递参数
$n( $1 $2... ) 表示获取的参数的个数
echo "hello world $1"
echo "hello wrold $2"
执行: ./1.sh 123 123
输出结果:
hello world 123
hello wrold 123
参数中如果包含空格,应该用引号括起来
特殊符号
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 |
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 | |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 | |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
**
单引号
所有内容都会被作为字符串原样输出
双引号
特殊字符(转义、反斜杠等)会被解析,其他字符原样输出
反引号
内容被作为命令处理
world $1"
echo "hello wrold $2"
string="current directory is `pwd`"
echo $string
3、输入输出重定向
标准输入输出:
输入输出重定向即将原本应该输出与终端的内容重定向到其他文件中
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
who > 2.sh
将who运行的结果重定向至2.sh中(覆盖)
who >> 2.sh
将who的运行结果追加到文件2.sh中
cat 1.sh > 2.sh
用1.sh的内容覆盖2.sh的内容
cat 1.sh >> 2.sh
1.sh 的内容追加到2.sh中
ls -l >> 2.sh
将ls得到的信息追加到文件2.sh中
4、命令历史
查看shell中执行过的所有命令:
history
环境变量
- HISTFILESIZE 定义了在 .bash_history 中保存命令的 记录总数
- HISTSIZE 定义了 history 命令输出的记录数
Lab5 系统管理基础
实验目的:
- 熟悉用户、设备、进程、日志管理的相关命令和配置文件
- 并掌握磁盘管理常用命令
- 掌握利用虚拟机增加新硬盘,使用 fdisk 对磁盘分区操作
实验要求:
- 了解用户、设备、进程、日志管理基本知识
- 掌握用户、设备、进程、日志管理相关命令
实验内容:
用户管理
通过修改用户管理相关配置文件管理的方式为系统增加用户 hzu888
磁盘分区
- fdisk 查看当前系统硬盘及分区情况,在作业报告中说明当前的磁盘容量,分 区数量、名称和大小,分区挂载点等信息。
fdisk -l
- 显示当前文件系统使用情况,在作业报告说明当前主要文件系统信息及使用 情况(包括主要文件系统名称、挂载点、容量、使用量及百分比等)
df -h
- 添加新硬盘并完成如下操作
内容:关闭虚拟机操作系统,添加 1 块硬盘,大小为 5G。开机后查看新硬盘是否成功添加
基本步骤- 关机:init 0
- 添加新硬盘:右键单击虚拟机,选择 setting(设置)。在 Add 中按照要求添 加 2 块新硬盘(HardDisk)
- 开机后,打开终端。输入命令 fdisk –l 或 ls /dev/sd*查看新硬盘是否添加成 功。
对新添加硬盘进行分区
内容:将第二块硬盘 sdb 分区(5G),要求分区 1(sdb1)为主分区,类型为 swap(82),大小为 500M;分区 2(sdb2)为主分区,类型为 linux(83),大小为 2G;分区 3 为扩展分区(sdb3),大小为 sdb 所有剩余容量;分区 5 为 逻辑分区,类型为 lvm(8e),大小为 2G。分区后,查看 sdb 新添加所有分区
基本步骤
- 分区命令,以第二块硬盘(/dev/sdb)为例
fdisk /dev/sdb
- 进入分区界面后,p 为查看硬盘分区情况,n 为添加分区,d 为删除分区,t 为 修改分区类型,w 为保存退出。其中,主分区标识为 p,扩展分区标识为 e,逻 辑分区标识为 l。分区大小起始值为默认柱面数,大小可采用+500M 或+2G 表示
- 对/dev/sdb 分区,大小为 500M,类型为 82(swap 类型),则操作为: p(查看)、n(新建分区)、p(选择分区为主分区)、1(分区号为 1,即 sdb1)、 直接 enter(默认起始柱面数)、+500M(大小)、p(查看)、t(修改类型)、 分区号为 1,类型为 82,p(查看)、w(保存退出)
- 将 sdb1 作为交换分区,创建相应文件系统后,挂载
步骤- 解释 mkswap 命令作用
mkswap /dev/sdb1
swapon /dev/sdb1
- 解释 swapon 命令作用
swapon –s
vim /etc/fstab
- 加入:
/dev/sdb1 swap swap defaults 0 0
- 执行后,解释每个字段含义
mount -a
- 将 sdb2 作为普通分区,创建文件系统 ext4 后,挂载到/mnt/testb2 中,并测试
基本步骤
mkfs.ext4 /dev/sdb2
vim /etc/fstab
- 加入:
/dev/sdb2 /mnt/testb2 ext4 defaults 0 0
mount -a
df -h
- 执行
- 测试:挂载前在/mnt/testb2 中添加文件和目录 file1、dir1,挂载后查看/mnt/testb2 中内容。查看后,添加文件和目录 file2、dir2,卸载后,查看/mnt/testb2中内容。在作业报告中说明测试结果及原因。
(卸载命令为:umount /mnt/testb2 或 umount /dev/sdb2) - 熟练用户管理、设备管理、进程管理、日志管理相关命令
六、Linux C编程基础
安装gcc
**
yum 安装
验证是否安装gcc
gcc -v
yum 命令安装
yum -y install gcc gcc-c++ kernel-devel //安装gcc、c++编译器以及内核文件
wget命令从国内镜像站下载
国内镜像:https://blog.csdn.net/mnmiaoyi/article/details/98847144
安装:https://www.cnblogs.com/lpbottle/p/install_gcc.html
https://blog.csdn.net/a731062834/article/details/106041971/
内容总结
以上是互联网集市为您收集整理的Linux 学习笔记全部内容,希望文章能够帮你解决Linux 学习笔记所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。