Linux基本概述
Linux网络配置
一些常见命令
ctrl + alt + t // 打开终端
sudo apt install net-tools // 安装网络工具
ifconfig // 查看IP地址
ctrl + c // 终止程序
桥接模式和NAT模式
桥接模式(Bridged Networking)--桥接网络
手动配置IP、子网掩码、网关,地址需要和宿主机同一网段,相当于局域网内新建了一台主机。
NAT模式(Netword Address Translation)--网络地址转换
所谓nat模式,就是虚拟系统会通过宿主机的网络来访问外网,而这里的宿主机相当于有两个网卡,一个是真实网卡,一个是虚拟网卡,真实网卡相当于链接了现实世界的真实路由器,而宿主机的虚拟网卡,相当于链接了一个可以认为是虚拟交换机(这个虚拟交换机他同时链接了虚拟系统(linux)和宿主机),这个时候的虚拟网络想访问外网,就必须通过宿主机的IP地址,而外面看来也确实是宿主机的IP地址(实则是虚拟机访问的!!),完全看不到虚拟网络局域的内部形式,而这个时候linux和宿主机和虚拟交换机形成一个网段,宿主机和真实路由形成一个网段!!
静态IP地址的设置
远程连接
远程连接工具
Windows常用xshell;MAC常用item2
xshell是一款终端模拟软件,它可以使用ssh协议连接到远程服务器上。我们使用xshell连接到我们的虚拟机。在将来的工作中,服务器通常放置在机房当中,程序员们通常是使用xshell、putty等ssh软件来连接到服务器,从而能够在服务器上面编程
-
更新apt:sudo update apt
-
安装ssh:sudo apt install ssh
-
查看ssh是否启动:ps -elf | grep sshd
用xshell连接虚拟机:
注意:主机处填写虚拟机IP地址,随后输入用户名及密码即可连接。
Linux发行版本
发行版本 = 内核 + 其他软件支撑
Linux架构图
应用层可以通过 系统调用、shell和库函数 来访问内核层。
内核负责两个功能:控制计算机硬件资源(CPU、内存、外部设备);为上层应用层运行提供环境。
系统调用:内核为上层应用程序提供的接口。
库函数:对系统调用进行包装,方便程序员使用(如:printf、scanf、malloc、free...)。
shell(命令解释器):它读取用户输入,然后执行命令。shell拥有很多版本,我们将介绍bash(Bourne-again shell),它位于/bin/bash,Linux和MacOS都可以使用bash。
命令:一般来说,命令都是一些简单的可执行程序。
脚本(script):命令的集合。
Linux系统与用户
-
Linux是多用户的系统,一个用户可以多次(同时)登录一个Linux系统,多个用户也可以(同时)登录一个Linux系统。(与Windows桌面版本不一样)
-
使用Linux系统就像是入住一间豪宅。豪宅有它的主人,家人和客人;类似地,Linux系统的用户也分为普通用户和特权用户。
-
普通用户有很多个,它们只能使用系统的部分功能,而超级用户只有一个,它的名字是root,它可以使用系统的所有功能--包括删除另外一个用户。
-
对于部分普通用户,它们可以使用sudo命令来临时提高自己的权限,从而可以执行一些(而不是所有)特权命令,比如想要使用apt install命令在系统上安装软件,使用shutdown命令关机等等。
-
普通用户的shell命令提示符是$,root的shell命令提示符是#。
-
每个用户都在一个组当中。组被用于将若干用户集合到项目或部门当中去。组机制允许同组的各个成员可以共享资源
-
为了节约空间,操作在保存用户和组信息的时候,只保存两个整型数字,称为用户ID和组ID。用户ID和组ID和用户名和组名是一 一对应的。
Linux常用命令
在进入Linux的时候,只需要输入用户名和口令就可以登录Linux系统。用户名的信息存储在/etc/passwd里面,而口令信息存储在/etc/shadow里面。当用户登录以后,系统会先显示一些系统信息,然后最后一行会是一个用来输入命令的地方,这就是我们的shell程序,它是一个命令行解释器,我们可以向其中输入命令(按下enter键发送命令),然后shell程序会读取命令并执行命令。shell命令也可以读取存储在文件里面的命令,这种文件称为shell脚本。
cat /etc/passwd
cat /etc/shadow
man命令
Linux系统中会内置帮助手册(此手册不用完整的读完,当作字典查阅即可),帮助手册有8个部分,包括用户手册、程序员手册和系统管理员手册等等。通常通过关键字+数字的形式来说明是第几个手册的帮助信息。例如,ls(1)就说明是第一部分(用户手册,即shell命令手册)的ls命令的信息
使用man命令可以查看帮助信息:
man [手册编号] 命令名字
重点掌握前三个(分别对应shell、system call、library routine)
关机命令
ex:
shutdown now
用户子系统
查看所有用户命令
cat /etc/passwd
添加用户
useradd 用户名
注意:只有root用户或者拥有sudo权限的用户使用sudo命令才能添加用户
在Linux系统中,没有消息就是最好的消息。通常命令执行成功时是不会有任何提示的,只有失败的时候才会在shell里面打印错误信息
给useradd命令添加参数,在用户名之前使用-m,可以为用户添加默认家目录(如果不添加家目录,这个用户将无法创建文件)。使用-m参数的同时还需要使用-s参数来指定shell的位置(如果不添加shell的位置,用户的默认shell使用的是sh,它的功能比较弱)
useradd -m 用户名 -s /bin/bash
切换用户
su 用户名 // su(switch user)
切换到其他用户,在su命令后面添加用户名即可。从root用户进入其他用户的时候不需要密码。
删除用户
/*
1、如果用户正在使用中,那么这个用户就不能被删除
2、如果用户在su命令和exit命令构成的用户 栈结构 当中的时候,那么这个用户也不能被删除
3、无法删除用户的家目录以及邮箱
*/
userdel 用户名
userdel -r 用户名 //用户主目录中的文件将随用户主目录和用户邮箱一起删除
设置密码
passwd 用户名
退出当前用户
exit
当嵌套使用su指令来依次进入多个用户时候,多个用户是使用 栈结构 来管理的。执行su指令相当于将新用户压入栈顶,执行exit指令相当于弹出栈顶。
当用户在上述的 栈结构 中存在的时候,那个用户是不能够被删除的
文件子系统
-
Linux的文件系统是一套单根目录结构。
-
目录的根基是被称为 根root 的目录,它写作"/"
-
文件拥有不同的类型,比如目录文件、普通文件等等(目录也是一种文件)
-
由文件名组成的字符串,以"/"分隔称为路径。根目录开始的路径称为绝对路径,当前目录下的路径称为相对路径。最后一个"/"之前的部分称为目录部分,后面的称为文件部分
查看当前目录
~是家目录的简写,它和/home/用户名/是等价的
在shell的命令输入栏左边,会提示当前目录的路径。其中,如果路径的最左边是~,那么路径的根是用户的家目录(即/home/用户名);如果路径的最左边是/,那么路径的根是root目录。当前目录是相对路径的起始位置,也是进程的“当前位置”。使用pwd命令可以显示当前工作目录:
pwd
切换当前工作目录
用 env 可以查看当前的环境变量,在这里面可以看到"OLDPWD",例如:
创建和删除目录
使用mkdir可以创建目录
使用示例:
mkdir 目录名
-
如果直接去/home下面使用mkdir,它会提示没有权限。能否在一个目录下去添加新的文件,依赖于用户对目录的写权限,因为在目录下添加文件,实际上是修改了目录文件里面的内容。
-
目录文件里面实际上是存储一个链表,其中每个链表结点代表一个文件的文件名和磁盘地址信息。
-
使用mkdir可以一次创建多个目录。
使用rmdir可以删除目录
- 同样可以使用rmdir删除多个非空目录
rmdir 目录名
注意:rmdir不可以删除非空目录
通配符(wildcard)
-
*:可以匹配任意多个字符(包括 0 个)
-
?:可以匹配任意一个字符
-
类(集合):
-
[characters]:匹配集合里任意一个字符
-
[!characters]:匹配集合外任意一个字符
-
[0-9]:匹配任意一个十进制数字
-
[a-z]:匹配任意一个小写字母
-
使用示例:
查看目录内容
ls -a
示例:
ls -i
示例:
在ls命令后面添加-l参数,可以显示文件的详细信息
ls -l
示例:
-
第一个字母用来说明文件的类型,这种方法是和Windows使用后缀来代表文件类型不同的。
- -:普通文件
- d:目录文件
- c:字符设备文件(鼠标、键盘等)
- b:块设备文件(磁盘)
- l:symbol link 符号链接(软链接)
- p:管道文件
- s:socket 本地套接字
-
后续的九个字母代表的是权限。依次是代表拥有者的读,写,执行、拥有组的读,写,执行
和其他用户的读,写,执行权限。如果文件可读则显示r,可写则显示w,可执行则显示x,
没有相关权限则显示 - 。 -
后续的两个字符串依次代表文件拥有者和拥有组。
-
随后的数字代表了文件的所占用的空间,这个属性只对普通文件,目录文件和符号链接有意义。普通文件的大小可以是0。目录的大小是固定的,在本机中是4096,它和目录下面的文件大小无关,目录文件主要是存放目录下的文件的文件名。符号链接的大小是它指向的文件的路径名长度。
-
接着就是一个时间和日期,说明的是最后修改的时间。
-
最后的字符串说明了文件名字,如果是符号链接,它还会显示指向文件的名字。
在ls命令后面添加-lh参数,可以将文件详细信息以“人类可读”的方式来显示,也就是文件的占用空间会自动根据大小来按照K,M,G的单位显示。
ls -lh
示例:
复制文件或者目录
cp [选项] 源文件 目标路径|目标文件
# 当目标是目录的时候,cp命令会直接在目标目录下拷贝一份副本,文件名和源文件一致
# 当目标是文件的时候,cp命令会拷贝源文件的内容,重命名为目标文件的名字
Ubuntu当中,如果cp命令中目标路径已经存在同名文件,那么就会直接覆盖(其他发行版中在选项中添加-f(force 强制)也可以实现同样的效果)
如果希望在覆盖之间进行警告,则应该在选项中添加-i(interactive 交互式)。
cp -i
如果源文件是一个目录,那么在选项中必须要添加-r,这里r是recursive(循环递归)的意思,也就是说添加-r以后,cp命令会递归地将目录下的所有文件都进行拷贝。
大致有三种常用的cp操作:
-
cp file1 file2
-
cp file dir(要求dir存在)
-
cp dir1 dir2 -r //如果dir2不存在,则创建目录dir2,然后将dir1里面的内容复制到dir2中;如果dir2存在,则把dir1以及dir1中的内容复制到dir2目录中
示例: