目录
3.APT(Advanced Packaging Tools)
1、Linux 是什么
Linux指的是使用Linux内核的操作系统(free),基本上所以的服务器都是运行在Linux上面(可裁剪)
Linux基础知识(基础命令)
自己平时多积累,不懂的多问,查资料
VMware: 是一个windows的虚拟机软件(卸载的时候使用安装包卸载)
Ubuntu: 是一个已经可以使用的Linux操作系统
有时间可以自己安装一个自己的Ubuntu
https://www.cnblogs.com/ubuntuanzhuang/p/ubuntu2004.html
自己安装的虚拟机是没有任何软件的(编译器)
2、Linux中软件的安装
1.通过安装包(deb)安装
系列命令:dpkg
sudo dpkg -i xxxx.deb
2.通过软件的源代码安装
a.下载源代码到本地(源码包),解压(tar)
b.进入源码包目录
cd 源码目录
./configure //执行当前目录下面的配置文件,生成Makefile
//Makefile文件的作用是指导编译器编译源代码并且安装软件的一个文件
//使用make工具编译源代码
make
//安装编译好的软件(把对应的文件放到对应的目录)
make install
3.APT(Advanced Packaging Tools)
增强的软件包管理工具(前提:虚拟机联网)
是Ubuntu系统中功能最强大的命令行包管理工具,用于获取,安装,编译,卸载,查询软件
APT在Ubuntu中的角色就相当于windows中的"360软件管家"
工作原理:
有一个文件,保存了软件镜像服务器的地址
/etc/apt/sources.list //软件源列表
软件镜像服务器有很多,自己也可以架设一个内部的镜像服务器
换源:更改软件包的下载地址
习惯:更改配置文件的时候需要备份
sudo cp sources.list sources.list.bak2
sudo 使用管理员权限运行后面的命令
cp copy复制命令
1.简单粗暴
百度一个合适的服务器地址
"ubuntu18.04源"
把sources.list的内容修改为你百度到的服务器地址
2.图形界面修改
系统设置--->软件和更新--->选择一个合适的地址--->关闭--->更新软件列表(从新载入)
修改了sources.list后,需要更新本地的软件列表
sudo apt-get update
apt也有一系列的命令,需要数量掌握的
//安装xxx软件包
sudo apt-get install xxx
sudo apt-get install gcc
sudo apt-get install g++
//卸载软件包
sudo apt-get remove xxx
//清空缓冲区所有已经下载的包文件
sudo apt-get clean
//根据表达式检索软件包
sudo apt-cache search xxx
(ubuntu)虚拟机联网(确保自己的计算机没有问题)
如果自己的计算机有问题:
1.卸载虚拟机(Vmware)
2.使用注册表清理工具(ccclear),清理注册表
3.重新安装虚拟机(VMWARE)
Ubuntu联网有两种方式:
NAT:Vmware作为windows中的一个普通的软件,共享windows的IP地址,缺点:vmware仅仅是一个普通的软件
桥接:从逻辑上看,虚拟机是一个独立的机器,拥有一个独立的IP地址,Ubuntu可以和外界进行独立的通信
注意:关闭windows的防火墙
a.虚拟机-->设置-->网络设配置--->桥接模式
如果不能桥接,编辑--->虚拟网络映射器---->恢复默认设置
b.手动设置IP地址
查看当前的局域网网络地址(windows:cmd --->ipconfig)
手动设置虚拟机的网络:
右上角的网络标志
有线连接--->设置标志--->IPV4---->手动
IP地址:172.11.0.xxx
子网掩码:255.255.254.0
网关:172.11.1.1
DNS:114.114.114.114
应用!
重启网络适配器即可
4、vi/vim编辑器的使用
安装:
sudo apt-get install vim
vi/vim是linux中最基本,最常用,功能最强大的命令行文本编辑器
vim ------->“文本编辑器”
vim hello.c
编辑一个名字叫做hello.c的文件,如果文件不存在则创建,文件存在则打开
vim有两种工作模式:
命令模式:把键盘上输入的所有内容都当作是vim的内置命令(vim支持非常多的命令)
进入vim编辑器,默认就是在命令模式
编辑模式:把键盘上输入的所有内容当作是文本的内容
命令模式和输入模式可以随时切换
编辑模式------->命令模式 esc
命令模式------->编辑模式
i:insert 插入
进入编辑模式之后,光标在当前字符(光标不动)
I:insert 插入
进入编辑模式之后,光标移动到当前行的行首
a:append 追加
进入编辑模式之后,光标往后移动一个字符
A:append 追加
进入编辑模式之后,光标移动到当前行的行尾
o:Open 打开
进入编辑模式之后,在当前行的下一行,新增加一行
O:Open 打开
进入编辑模式之后,在当前行的上一行,新增加一行
4.1常用的命令(命令只能在命令模式下使用):
4.1.1vim的退出:
:q quit 不保存退出
:q! 不保存强制退出
:w 保存当前文件
:wq write and quit 保存并且退出
:w filename 把文件的内容保存到filename指定的文件名中去-------->“另存为”
:x ------>:wq
4.1.2vim的删除和修改命令
x 是删除光标所在的字符
dd delete 删除光标所在的一行
ndd/dnd 删除光标以及光标下面的n-1行
如:
d5d 删除光标所在的5行
删除的内容会自动放到粘贴板
r replace 替换光标所在的单个字符
r+你要替换的字符
R 替换光标所在的多个字符
R + 一串字符 + esc
u undo 撤销上一次的修改
4.1.3vim复制和粘贴命令
ndd 剪切
yy 复制光标所在的一行
nyy 复制光标所在的n行
p paste 粘贴,将粘贴板上的内容贴在光标所在的行的下面
P paste 粘贴,将粘贴板上的内容贴在光标所在的行的上面
4.1.4vim 搜索关键字
/+你要搜索的内容
如:
/main
在当前文件中搜索字符串"main"
n next 找到下一个匹配的内容
N next 找到上一个匹配的内容
4.1.5vim 的替换命令
s 替换
:{作用范围}s/{要替换的关键字}/{替换后的关键字}/{替换标志}
如:
:%s/hello/nihao/i
全局替换hello到nihao,并且忽略大小写
作用范围:
不指定替换范围,默认就是当前行
全文替换:%
可以选择替换区间:
5,12 5~12行
:5,12s/hello/nihao/i 5~12行
:,+2s/hello/nihao/i 当前行以及后面的两行
替换标志
i 忽略大小写替换
可以使用方向键选择历史命令
: + 方向键
vim分屏操作:
https://blog.csdn.net/wcy23580/article/details/81387188
vim还有配置文件
.vimrc 以.开头的文件是隐藏文件(ls -a)
放在家目录中
~/.vimrc or /home/china/.vimrc
直接放到家目录下面就会生效
5、linux 帮助手册
linux是一个面向开发者的系统,提供了很多帮助文档
命令/函数的说明文档
man manual 手册
linux自带非常多的开发手册,而且给不同的内容分了类
1.
2.
3.
....
如果你在linux中有一个函数或者命令不知道使用,你就可以把它的说明文档调出来查看
man 手册页编号(1,2,3,...也可以省略) 函数名/命令名
一个名字有可能存在于多个手册页
打开所有关于open的说明
man -a open
-a:all 所有的
man -f 名字 查看包含名字的所有手册页
例子:
man -f open
open (1) - start a program on a new virtual terminal (VT).
open (3posix) - open file relative to directory file descriptor
man 1 open
sudo 使用管理员权限执行后面的任务(除了家目录以外的地方都需要sudo)
sudo + 命令
如果不加sudo就是以当前用户的权限去执行指定的命令
命令的自动补全:linux的命令行是“智能的”可以自动补全
tab键
例子:
type + tab键
终端就会把所有以typ开头的命令列举出来,如果只有一个,则直接补全带终端
建议:能够补全就补全(文件名/目录名/命令名都可以补全)
历史命令:终端会自动保存已经执行过的历史命令
使用方向键上下调出
原理:保存到了家目录下面一个文件中 ~/.bash_history
6、linux的基本维护命令
shutdown 关机
sudo shutdown -h now 立即关机
reboot 重启
poweroff 关机
clear 清屏,把终端清理一下
切换用户
su username 切换到username用户
username省略,su root 切换到root用户
第一次进入root用户是没有密码的
sudo -s 切换到root权限
可以设置root的密码
passwd 修改当前用户的密码
exit 退出当前用户(如果当前用户是最后一个终端用户,那么终端也会退出)
7、用户管理
有一个文件,/etc/passwd 保存了系统上面每一个用户的信息
每一行都表示一个用户
china:x:1000:1000:ubuntu,,,:/home/china:/bin/bash
信息使用:分隔
用户名:口令:用户ID(UID):组ID(GID):描述信息:家目录:登录shell
1.用户名(login_name):用于区分不同的用户,在同一系统中注册名是惟一的.
在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内,并且要注意,通常在Linux系统中对字母大小写是敏感的
2.口令(passwd):系统用口令来验证用户的合法性,超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,
普通用户也可以在登录系统后使用passwd命令来更改自己的口令。
现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,
将/etc/shadow作为真正的口令文件,用于保存包括个人口令在内的数据.当然shadow文件是不能被普通用户读取的,
只有超级用户才有权读取.
此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。
3.用户标识号(UID):UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户.在系统内部管理进程和文件保护时使用UID字段.
在Linux系统中.注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;
而对于用户来说注册名使用起来更方便.在某些特定目的下,系统中可以存在多个拥有不同注册名,
但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户.
4.组标识号(GID):这是当前用户的缺省工作组标识,具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,
且以自己的组标识号相区分.像UID一样,用户的组标识号也存放在passwd文件中,在现代的Unix/Linux中,
每个用户可以同时属于多个组.除了在passwd文件中指定其归属的基本组之外,
还在/etc/group文件中指明一个组所包含用户。
5.用户描述信息:包含有关用户的一些信息,如用户的真实姓名,办公室地址,联系电话等,
在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。
6.用户家目录(home_directory):该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。
在Unix/Linux系统中,超级用户root的工作目录为/root,而其它个人用户在/home目录下均有自己独立的工作环境,
系统在该目录下为每个用户配置了自己的主目录.个人用户的文件都放置在各自的主目录下。
8.命令解释程序(Shell):
壳,命令解析器,本身也是一个程序
这个程序有很多人实现了,所以有不同的shell
cat /etc/shells
是用户和操作系统之间的桥梁
用户---->shell---->OS
<--- <----
/etc/group 保存了所有用户组的信息
类似于/etc/passwd 保存了所有用户的信息
china:x:1000:....
组名:口令:GID:用户列表
常用的命令:
adduser + 要创建的用户名 添加用户(useradd)
userdel + 要删除的用户名 删除用户
addgroup + 要创建的用户组 添加一个组
groupdel + 要删除的用户组 删除一个组
将一个用户添加到用户组中,千万不能直接用:
usermod -G groupA
这样做会使你离开其他用户组,仅仅做为这个用户组groupA的成员
应该用加上-a选项:
usermod -a -G groupA user
(usermod -G groupA,groupB,groupC user)
-a 代表append, 也就是将自己添加到用户组groupA中,而不必离开其他用户组。
9、进程管理
进程:正在运行的程序,我们称之为进程.process
ps:process status 进程状态
ps -ef 查看系统中当前运行的程序的详细信息(快照)
UID PID PPID TIME CMD
china 5078 4310 0 14:45 pts/0 00:00:00 ./a.out
用户名 进程号 父进程号 运行时间 占用CPU时间 程序名
pstree 查看进程树
top
查看系统进程的动态信息(任务管理器),查看CPU的占用率和内存使用率
可以百度查看top的每一项的信息 <---------------------------------
command & 让进程到后台运行
jobs -l 查看后台运行的进程
fg %n 让后台运行的进程n到前台来
bg %n 让进程n到后台去
"n"为jobs查看到的进程编号不是进程号
kill 可以杀死进程(发信号)
sudo killall + 进程名
sudo kill -9 + 进程号
ctrl + c 本质也是一个信号
10、linux文件系统相关命令
10.1.文件系统的概念和原理
当你需要把一个文件的数据存储到一个物理的介质上面的时候,就需要一些组织和管理数据的方法和规则,这些规则就叫做文件系统格式
文件系统:组织和管理文件的系统(一套管理和组织文件的方法)
存储文件的时候,必须按照一定的格式存储,这些规则就叫做文件系统格式
EXT4
EXT3
FAT
NTFS
...
不同的文件系统格式对文件的组织和管理方式不一样
但是所有的文件系统基本上都把文件分为两个部分
文件属性:唯一标识一个文件的存在(i-node,i结点)
Inode编号 文件类型 作者 修改时间 ...
在实现inode的时候
struct inode
{
char type;//文件的类型
char name[32];//文件的名字
.....
};
不同的文件系统类型,i-node的内容和成员布局都不一样
文件的内容:文件本身的数据
一个文件可以没有内容,但是只有它存在,就一定有文件的属性
要求:大概了解Linux中文件的组织存储方式.
10.2.linux文件系统对文件的组织方式
树状结构
/ 根目录
在linux中把所有的文件(文件/目录)以一棵树的形式存储
普通文件: 由一些特定的允许的字符串组成
文件的属性:类型,修改时间...
文件的内容:文件本身保存的用户数据
目录文件: 由一些特定的允许的字符串 + '/'组成
文件的属性:类型,修改时间...
文件的内容:目录项,保存了当前目录下面所有的文件名和inode的对应关系(可以看做是一张表格)
linux为了方便,在每一个目录下面,默认提供了两个子目录
./ 当前的目录
../ 当前的目录的上一级目录
linux文件的路径名表示方法:
相对路径:
不以根目录开始的路径
相对于当前所在的目录的路径,从当前目录位置出发,找到文件的路径
(当前所在的位置修改,相对路径就会修改)
绝对路径:
以根目录开始的路径
“绝对正确的,绝对存在的路径”
和当前所在的工作路径无关
如:
我在 /home/china/Test目录下面有一个3.txt
我当前所在的目录为/home/china
访问3.txt
相对路径: vim ./Test/3.txt
访问当前目录下面的它Test目录下面的3.txt文件
绝对路径: vim /home/china/Test/3.txt
10. 3.文件操作的相关命令
cd change diectory 改变当前所在的目录,切换目录
用法:
cd 要切换到的目录名
(可以是绝对路径,也可以是相对路径)
cd .. 切换到当前目录的上一级目录
.. 表示了上一级目录
. 表示当前目录
cd /mnt/hgfs/CS2406F/2024-1-15Linux基础/
pwd 显示当前目录的绝对路径
cd 不加任何目录,默认切换到当前用户的家目录
cd - 进入上一次访问的目录
ls list 列举一个目录下面所有的文件名
ls [options] 目录名
以指定的方式列举指定目录名下面所有的文件
ls [options]
以指定的方式列举当前目录下面所有的文件
options:
-a all
把指定目录下面所有的文件名都列举处理,包括隐藏文件(linux中,以.开头的文件都是隐藏文件)
-l :把文件的详细信息列举出来
如:
ls -al
ls -a -l
china@ubuntu:code$ ls -al
总用量 27
drwxrwxrwx 1 root root 0 7月 27 14:58 .
drwxrwxrwx 1 root root 4096 7月 27 11:28 ..
-rwxrwxrwx 1 root root 151 7月 27 14:58 02.c
-rwxrwxrwx 1 root root 8344 7月 27 14:58 a.out
-rwxrwxrwx 1 root root 13321 7月 27 11:19 hello.c
chmod : change mode 改变文件读写权限
用法:
chmod u/g/o/a+-rwx filename
u:user 所有者用户
g:group 组用户
o:other 其他用户
a:all 所有用户
+:增加权限
-:删除权限
例子(不能在共享文件夹中,共享文件夹是windows的文件夹,只是挂载在Linux中):
chmod u+x file
给file文件的所有者用户增加一个可执行的权限
chmod a+rw file
给file文件的所有用户增加一个读写权限
chmod uo+x file
给file文件的所有者和其他用户增加一个可执行权限
....
权限位:
rwx rwx rwx
相应的位有权限:r/w/x
没有权限 -
===>
计算机内部是使用数字表示权限位(3个二进制表示一组权限)
r-- 100 --->4
rwx 111 --->7
rw-r--r-- 110100100
====>
chmod 0644 file //0开头的是8进制
chmod 0777 file
把文件的权限设置为
rwxrwxrwx
有时候我们不仅需要修改文件的权限,还需要修改文件的所有者(属主)
chown change owner 改变文件的所有者
用法:
chown [-R] 新所有者:新组 filename
-R:如果filename是一个目录,-R就是把该目录下面所有的文件以及子目录...都修改为指定的所有者
如:
sudo chown root:root hello.c
指定hello.c的所有者为root,组用户为root
cp: copy 拷贝文件或者目录
cp [options] SOURCES(源文件) DEST(目标文件)
把SOURCES复制为DEST
源文件和目标文件可以是普通文件也可以是目录文件
SOURCES DEST
目录1 目录2 把目录1拷贝到目录2下面去(选项要指定为-r)
文件1 目录2 把文件1拷贝到目录2下面去
文件1 文件2 把文件1的所有内容拷贝到文件2中去,文件2中原来的内容就没有了
如果文件2不存在则先创建
目录1 文件2 ERROR
options:
-r recursive 递归的
-f force 强制的,非交互式拷贝
mv:move 移动(修改文件名)
mv SOURCES(源文件) DEST(目标文件)
把sources改名为DEST
源文件和目标文件可以是普通文件也可以是目录文件
SOURCES DEST
目录1 目录2 把目录1移动到目录2下面去
如果目录1和目录2在同一个目录下面,并且目录2不存在
则是把目录1改名为目录2
文件1 目录2 把文件1移动到目录2下面去
文件1 文件2 如果在相同目录下就是重命名
目录1 文件2 ERROR
touch
touch + 文件名
创建一个普通文件
mkdir
mkdir + 目录名
在当前目录下面,创建一个空目录
mkdir ABC/123
在ABC目录下面创建一个123目录
mkdir -p qwe/123
先创建qwe目录,再去qwe中创建一个123目录
rm remove 删除文件或者目录 通过命令删除,是没有回收站的
rm [options] DEST
DEST是你要删除的文件或者目录名称
options:
-r recursive 递归的
如果DEST是一个非空目录,则必须加-r
-f force 强制的,非交互式删除
有一个命令是非常危险的:
rm -rf * *是一个通配符,表示一切
11、链接文件(l)
在验证的时候,请不要在共享文件夹中验证,windows不支持链接文件
11.1硬连接
创建方式:
ln target link_name
给target创建一个名字叫做link_name的硬连接
一般情况下,文件名和inode是一一对应的关系,每一个inode号码保存着一个文件的属性,对应一个文件名,但是在linux/unix下面,
允许多个文件名指向同一个inode号码,这就意味着,可以使用不同的文件名访问同一个inode(实际上是同一个文件),对文件内容的修改,
会影响到所有的文件名,删除一个文件名字,仅仅使inode的硬链接数量减一,不影响另一个文件名的访问,这种情况,我们称之为“硬链接”
多个名字对应同一个inode,对多个名字的访问,访问的是同一个文件
ln 源文件 链接文件名
源文件和链接文件的inode号码相同,指向同一个inode,inode中有一个东西叫做“链接数”记录着指向该inode的文件名总数,
增加一个文件名指向inode,"链接数+1",删除一个文件名,链接数就会-1,当链接数为0的时候,系统就会回收这个inode,
表示文件已经被删除
11.2软连接(softlink 符号连接)
相当于windows中的快捷方式
创建方式:
ln -s 源文件 链接文件
s:soft link
除了硬连接,还有一种特殊情况
ln -s B A
给B文件创建一个软连接A
A和B是两个不同的文件,inode号码不相同,但是访问文件A和B的内容却一样的
实现原理:
A的内容其实是B的路径名,读取文件A的时候,自动根据内容导向文件B,所以无论打开哪一个文件,
最终都会读取到文件B的内容,链接文件A的目标如果不存在,则链接文件就会失效
12、文件的压缩和归档
归档:将一组文件或者目录保存到同一个文件中去(打包)
压缩:将一组文件或者目录利用压缩算法压缩到同一个文件中去
tar [options] tarfile filelist
tarfile:你要指定的归档/压缩文件的文件名
filelist:你要归档/压缩的文件列表
解压缩的使用不需要指定文件列表
[options]
-c create 创建一个归档文件(打包)
-x extract 释放一个归档文件(解压缩)
-v 显示归档或者释放时的文件列表
-f 指定归档/压缩产生的文件的名字
-j 由tar生成归档,调用bzip2算法压缩
-z 由tar生成归档,调用gzip算法压缩
例子:
生成归档文件
tar -cvf xxx.tar 1.c 2.c 3.c ...
把1.c 2.c 3.c ...归档为一个名字叫做xxx.tar的文件
释放一个归档文件
tar -xvf xxx.tar
把xxx.tar解压缩到当前的文件夹
tar -xvf xxx.tar -C 目录名
把xxx.tar解压缩到指定的文件夹
压缩:
tar -jcvf xxx.tar.bz2 filelist
把filelist指定的文件列表使用bzip2算法压缩到文件xxx.tar.bz2中去
tar -zcvf xxx.tar.gz filelist
把filelist指定的文件列表使用gzip算法压缩到文件xxx.tar.gz中去
解压缩:
tar -jxvf xxx.tar.bz2
把xxx.tar.bz2解压到当前文件夹
tar -zxvf xxx.tar.gz
把xxx.tar.gz解压到当前文件夹
tar -zxvf xxx.tar.gz -C 目录名
把xxx.tar.gz解压到指定的目录中去