Linux基础
Linux的两大分支
基于Debian: Debian、Ubuntu、Corel、Kali等
基于RedHat: Red Hat、CentOS、Fedora Core等
Linux 目录结构
- 
/bin存放着经常使用的命令
- 
/boot存放启动Linux时的核心文件和一些连接文件及镜像文件
- 
/dev存放Linux的外部设备文件,Linux访问设备时就是访问文件
dev 是设备(device)的英文缩写,Linux 沿袭 Unix 的风格,将所有设备认成是一个文件
设备文件分为两种:块设备文件(b)和字符设备文件(c)
| 设备 | 设备在Linux内的文件名 | 
|---|---|
| SCSI/SATA/IDE设备 | /dev/sd* | 
| U盘 | /dev/sd*(与SATA相同) | 
| USB块设备 | /dev/ub* | 
| 软驱 | /dev/fd[0-1] | 
| 打印机 | 25针: /dev/lp[0-2]USB:/dev/usb/lp[0-15] | 
| 鼠标 | USB: /dev/usb/mouse[0-15]PS2:/dev/psaux当前:/dev/mouse | 
| 光盘设备 | /dev/cdrom=>/dev/sr* | 
| 磁带机 | IDE: /dev/ht0SCSI:/dev/st0 | 
| 软RAID设备 | /dev/md[0-31] | 
| 本地回环设备 | /dev/loop[0-7] | 
| 内存 | /dev/ram[0-15] | 
| Nvidia图形设备(比如显卡) | /dev/nvidia* | 
| DRI显卡 | /dev/dti/card* | 
| 虚拟终端 | /dev/tty[0-63] | 
| 控制台 | /dev/console | 
| 串口 | /dev/ttyS[0-3] | 
| 并口 | /dev/lp[0-3] | 
对于SCSI设备,/dev/tape 指向 /dev/st* ,而 /dev/cdrom 指向 /dev/sr* ;而 /dev/cdwriter 和 /dev/scanner 分别指向对应的 /dev/sg*(sg 代表 scsi + generic(通用))
其他:
/dev/null:无限数据接收设备,相当于黑洞
/dev/zero:无限零资源
/dev/fb[0-31]:帧缓冲设备
/dev/nb*:网络块设备
/dev/modem:调制解调器(猫) => /dev/ttyS*
/dev/random:真随机数设备
/dev/urandom:伪随机数设备
- 
/etc存放系统配置文件及子目录
- 
/home用户主目录,存放以用户名命名的用户目录
- 
/lib存放最基本的动态共享库,类似于Windows里的DLL文件,几乎所有应用程序都需要用到这些共享库
- 
/lost+found存放非正常关机时产生的一些文件,一般情况为空的
- 
/media存放Linux系统自动识别的一些设备的挂载目录,例如U盘、光驱等
- 
/mnt存放用户临时挂载的目录或文件
- 
/opt存放额外安装的软件
- 
/proc系统内存的映射,可通过访问该目录获取系统信息,这个目录在内存里
- 
/root超级用户主目录
- 
/sbin存放系统管理员使用的系统管理程序
- 
/selinuxredhat分支所特有的目录,Selinux是一个安全机制,类似于防火墙,但这套机制比较复杂,该目录就是存放selinux相关的文件的
- 
/srv存放服务启动后需要的数据
- 
/sys存放linux2.6内核新出现的一个文件系统systs相关文件
- 
/tmp存放临时文件
- 
/usr/bin用户使用的程序
- 
/usr/sbin超级用户(root)使用的比较高级的管理程序和系统守护程序
- 
/usr/src内核源码默认存放目录
- 
/var存放不断扩充的东西,被经常修改的目录存放在该目录,包括各种日志文件
几个重要的目录,注意不要误删或随意修改内部文件
/etc 系统配置文件,如果被修改系统可能会不能启动
/bin,/sbin,/usr/bin,/usr/sbin 系统预设的执行文件存放目录
/var 程序日志文件存放,具体在/var/log
常用命令
文件操作
ls [-ald] <文件或目录路径> : 显示目录文件
- -a显示所有文件,包括隐藏文件
- -l详细信息显示- U所有者 g所属组 o其他人 r读 w写 x执行
 
- -d查看目录属性
mkdir [-p] <目录全路径名> : 创建新目录
- -p递归创建
cd <目录路径> : 切换目录
- cd –返回前一个工作目录,价于- cd $OLDPWD
pwd : 显示当前目录路径
rmdir <目录名> : 删除空目录
cp [-rp] <原路径> <目标路径> : 复制文件
- -r递归复制所有文件
- -p保存文件属性
mv <原路径> <目标路径> : 剪切文件、改名
rm [-rf] <文件或目录> : 删除文件
- -r删除目录
- -f强制执行
touch <文件名> : 创建空文件
cat [-n] <文件名> : 显示文件内容
- -n显示行号
tac [文件名] : 显示文件内容(反向显示)
more <文件名> : 分页显示文件内容
- (空格)或f 翻页
- (Enter) 换行
- Q或q 退出
less <文件名> : 分页显示文件内容(可向上翻页)
- 可和很多命令组合使用方便多页显示
- F向下翻页,B向上翻页,Q退出
head [-n] <文件名> : 显示文件前几行
- -n指定行数
tail [-nf] <文件名> : 显示文件后面几行
- -n指定行数
- -f动态显示文件末尾内容
ln [-s] <原文件> <目标文件> : 生成链接文件
- -s创建软链接
- 软链接:类似于Windows的快捷方式,权限为 rwxrwxrwx
- 硬链接:拷贝源文件+同步更新
权限管理
chmod <[{u|g|o|a}{+|-|=}{r|w|x}][{4|2|1}]> [-R] <文件或目录> : 修改权限
- -R递归修改
- u所属用户 ,- g所属组 ,- o其他 ,- a所用权限
- r读取权限 ,- w写入权限 ,- x执行权限
- 权限的数值表示r=4,w=2,x=1
chown <用户> <文件或目录> : 改变文件或目录的所有者
chown <用户>:<用户组> <文件或目录> : 改变文件或目录的所有者和所属组
chgrp <用户组> <文件或目录> : 改变文件或目录的所属组
umask [-S] : 显示、设置文件的缺省权限
- -S以- rwx形式显示创建文件缺省权限
查找帮助
find <搜索范围目录> [选项] <匹配条件> : 文件搜索
选项和匹配条件:
- -name <文件或目录>按照文件名查找文件
- -iname <文件或目录>不区分大小写
- -size <+|-]N[c|w|b|k|M|G>文件大小为- n个由后缀决定的数据块- +N大于N,- -N小于N,- N等于N
- b: 代表 512 位元组的区块(如果用户没有指定后缀,则默认为 b)
- c: 表示字节数
- k: 表示 kilo bytes (1024字节)
- w: 字 (2字节)
- M:兆字节(1048576字节)
- G: 千兆字节 (1073741824字节)
 
- -aand ,两个条件同时满足- -size +N -a -size -M查找大于 N 且小于 M 的文件
 
- -oor ,两个条件满足任意一个即可
- -user <用户>查找所有者的文件
- -group <用户组>根据所属组查找
- -cmin [+-]N <文件或目录>查找 N 分钟[-内 +前]被修改过- -以内
- +之前
 
- -ctime [+-]N <文件或目录>在 N 天[-内 +前]被修改过
- -amin [+-]N <文件或目录>在 N 分钟之[-内 +前]被读取过
- -atime [+-]N <文件或目录>在 N 天[-内 +前]被读取过
- <选项> <文件或目录> -exec/ok <命令> [] \对搜索结果执行操作
- -type <f|d|l> <文件或目录>根据文件类型查找- f文件
- d目录
- l软链接文件
 
locate <文件名> : 在文件资料库中查找文件
which [命令] : 搜索命令所在目录及别名信息
whereis <命令> : 搜索命令所在目录及帮助文档路径
grep [-iv] <字符串> <文件> : 在文件中搜寻字符串匹配的行并输出
- -i不分大小写
- -v排除指定字串
man <命令或配置文件> : 获得帮助信息
help <命令> : 获得Shell内置命令的帮助信息
用户管理
useradd <用户名> : 添加新用户
passwd <用户名> : 设置用户密码
who : 查看登录用户信息
w : 查看登录用户详细信息
write <用户名> : 给用户发信息,以Ctrl+D保存结束
打包压缩
tar <-zxcvfru> <压缩后文件名.tar.gz> <目录> : 打包目录
- 
f指定文件
- 
c打包
- 
x解包
- 
v显示详细信息
- 
z调用 gzip 压缩
- 
t查看里面的文件信息
- 
r添加文件到压缩文件
- 
u更新
zip [-r] <压缩后文件名.zip> <文件或目录> : 压缩文件或目录
- -r压缩目录
unzip <压缩文件> : 解压.zip的压缩文件
bzip2 [-k] <文件> : 压缩文件,文件格式为:.bz2
- -k保留原文件
bunzip2 [-k] <压缩文件.bz2> : 解压.bz2文件
- -k保留原文件
网络相关
ping [-c] <地址> : 测试网络连通性
- -c指定次数
- -i指定收发间隔时间
- -s指定大小
- -t指定生存周期
ifconfig [网卡名] [选项] : 查看和配置网卡信息
- 留空为查看网卡信息
- downf关闭网卡
- up启动网卡
- [IP地址]配置IP地址
- netmask [子网掩码]配置子网掩码
- broadcast [网关]配置网关
- arp开启arp功能
- -arp关闭arp功能
mail <用户名> : 查看发送电子邮件
last : 列出目前与过去登入系统的用户信息
lastlog <-u UID> : 检查某特定用户上次登录的时间
- -u UID通过UID查看用户的登录信息
traceroute : 显示数据包到主机间的路径
netstat [选项] : 显示网络相关信息
- -a显示详细的网路状况
- -i显示网卡列表
- -t列出TCP端口
- -u列出UDP端口
- -n显示IP地址和端口
设备管理
free [-mtV] : 显示内存
- -m以MB为单位显示内存使用情况
- -t显示内存总和列
lsblk [-fml] : 查看块设备,块设备有硬盘,闪存盘,CD-ROM等
- -f显示文件系统
- -m显示权限信息
- -l使用列表格式显示
mount [-fnrsvw] [-t文件系统类型] [-o 选项] <设备文件名> <目录> : 挂载设备
- -o [选项]指定加载文件系统时的选项- dev可读文件系统上的字符或块设备
- loop把文件当成硬盘分区挂载
- ro只读挂载
- rw可读写挂载
 
- -t <文件系统类型>指定设备的文件系统类型- iso9660光盘
- ext4、- ntfs文件系统
 
umount <目录> : 卸载挂载的设备
shutdown <-chr> <时间> [“提示信息”] : 关机重启
- -c取消
- -h关机
- -r重启
- 时间:now现在,23:00晚上11点,+5在5分钟后
halt、poweroff、init 0 : 关机
reboot、init 6 : 重启
系统运行级别:0关机,1单用户,2不完全多用户,不含NFS服务,3完全多用户,4未分配,5图像界面,6重启
logout : 退出登录
VI/VIM基础
打开文件
vi 文件名
vim 文件名
vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)
命令模式:
启动 vi/vim 时便是命令模式,此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。
在另外两种模式按 Esc 可进入命令模式。
常用命令:
a:光标字符后输入,i:光标字符前输入,o:光标下插入新行并进入输入模式
x:删除光标处的,nx:删除光标起n个字符 (vi/vim 的删除都会将内容保存到寄存器中)
yy:复制当前行,nyy:复杂n行
dd:剪切当前行,ndd:剪切n行
p粘贴到光标后,P:粘贴到贯标前
gg: 到首行, G: 到末行
w , W: 下一个单词
b , B: 前一个单词
n : 查找下一处,N : 查找上一处
r、R 替换
u:恢复
ZZ:保存退出
输入模式:
- 
命令模式下按下 i进入输入模式。
- 
ESC,退出输入模式,切换到命令模式。
底线命令模式
命令模式下按下:(英文冒号)就进入了底线命令模式
:w:保存,:wq:保存退出
:q:退出,:q!:强制退出
:n:新建文件
:X:跳到X行
:set nu:显示行号,:set nonu:取消行号
本地源配置
Debian 分支
Debian 分支使用 aot-get 管理 deb 软件包
apt-get {<install|reinstall|remove|search> <软件包名>}|{update|upgrade|dist-upgrade|clean}
- install安装
- reinstall重新安装
- remove卸载
- search搜索
- update更新源
- upgrade更新系统
- dist-upgrade识别依赖发生改变并作处理的系统更新
- clean清理缓存
- 
准备ISO文件、或光盘(本例从Debian的官网下载了3个ISO镜像文件,将其挂载到虚拟机)。 
- 
创建挂载目录: sudo mkdir -r /mnt/ISO1 sudo mkdir -r /mnt/ISO2 sudo mkdir -r /mnt/ISO3
- 
查看光盘的设备文件和挂载目录 lsblksr*的为光盘的设备文件
- 
若文件未被挂载则将文件挂载到目录 sudo mount -t iso9660 /dev/sr0 /mnt/ISO1 sudo mount -t iso9660 /dev/sr1 /mnt/ISO2 sudo mount -t iso9660 /dev/sr2 /mnt/ISO3如果硬盘空间足够可以将挂载的几个光盘内的内容分别复制到几个目录中,然后更改配置文件,就可将这几个目录固定为apt源库。 如果ISO文件在Linux磁盘中可用: sudo mount -o loop -t iso9660 /home/iso/debain-DVD-1.iso /mnt/ISO1将文件挂载到目录。
- 
备份默认的配置文件 
 sudo cp /etc/apt/sources.list /etc/apt/spurces.list.bak
- 
修改配置文件 
 sudo vim /etc/apt/sources.listdeb file:///mnt/ISO1/ stretch main contrib non-free deb file:////mnt/ISO1/ stretch-updates main contrib non-free deb file:///mnt/ISO1/ stretch-backprts main contrib non-free deb-src file:///mnt/ISO1/ stretch main contrib non-free deb-src file:////mnt/ISO1/ stretch-updates main contrib non-free deb-src file:///mnt/ISO1/ stretch-backprts main contrib non-free deb file:///mnt/ISO2/ stretch main contrib non-free deb file:////mnt/ISO2/ stretch-updates main contrib non-free deb file:///mnt/ISO2/ stretch-backprts main contrib non-free deb-src file:///mnt/ISO2/ stretch main contrib non-free deb-src file:////mnt/ISO2/ stretch-updates main contrib non-free deb-src file:///mnt/ISO2/ stretch-backprts main contrib non-free deb file:///mnt/ISO3/ stretch main contrib non-free deb file:////mnt/ISO3/ stretch-updates main contrib non-free deb file:///mnt/ISO3/ stretch-backprts main contrib non-free deb-src file:///mnt/ISO3/ stretch main contrib non-free deb-src file:////mnt/ISO3/ stretch-updates main contrib non-free deb-src file:///mnt/ISO3/ stretch-backprts main contrib non-free档案类型: deb二进制预编译软件包deb-src编译二进制软件包的源代码仓库地址: http://……、https://……、ftp://……、file://……发行版代号: Debiand的版本及稳定版代号: 9(stretch)、8(jessie)、7(wheezy)、6(squeeze)等,可指定库:代号-库名(updates、backports) Ubuntu的版本及稳定版代号:18.04(bionic)(Bionic Beaver)、17.10(artful)(Artful Aardvark)、17.04(zesty)(Zesty Zapus)等,可指定库:代号-库名(updates、backports、security) 软件包分类: Debian: main符合DFSG指导原则自由软件包,这些软件包依赖于符合DFSG指导原则的软件包contrib符合DFSG自由软件包,这些软件包不依赖min分类中的软件包non-free不符合DFSG指导原则的自由软件包Ubuntu: min官方支持的自由软件restricted官方支持的分完全自由的软件universe社区维护的自由软件multiverse非自由软件
- 
更新源信息 
 sudo apt-get update
RedHat 分支
RedHat 使用 yum 管理 rpm 软件包
yum {<install|remove|search> <软件包>}|{update|list|updates|clean all}
- 
准备ISO文件、或光盘(可将文件直接放到Linux磁盘,本例为将ISO文件挂载到虚拟机) 
- 
创建挂载目录 
 sudo mkdir /mnt/ISO
- 
查看光盘的设备文件和挂载目录 
 lsklb
 光盘设备文件为sr*
- 
若没有挂载就将其挂载到创建的目录 
 sudo mount -t iso9660 /dev/sr0 /mnt/ISO
 若磁盘空间运行可以将挂载目录中读取到的文件复制到一个固定的目录。作为yum源仓库目录。
 也可将linux磁盘内的ISO文件直接挂载到目录:sudo mount -o loop -t iso9660 /home/iso/redhat-DVD.iso /mnt/ISO
- 
备份配置文件 
 sudo cp /etc/yum.repos.d/***.repo /etc/yum.repos.d/***.repo.bak或新建建一个 cdrom.repo文件(CentOS有一个默认的本地yum配置文件:CentOS-Media.repo)
- 
修改配置文件内容 将redhat.repo的内容全删除替换上本地源的配置内容。 
 或直接在cdrom.repo内添加。[CDROM] name=isofile baseurl=file:///mnt/ISO/ enabled=1 gpgcheck=0 gpgke=file:///mnt/ISO/RPM-GPG-KEY-redhat-release[serverid]:serverid是用去区别各个不同源的,必须独一无二的的名称,重复了会被覆盖
 name=name:对源的描述
 baseurl=url1
 url2
 url3
 :指定源的路径,可以指定多条,http://……、https://……、ftp://……、file://……
 enabled=[1/0]:启用(1)或禁用(0)源
 gpgcheck=[1/0]:启用(1)或禁用(0)gpg校验
 gpgke=url:若启用gpg校验,则调用gpgkey的地址
- 
清理旧缓存,刷新源 sudo yum clean all sudo yum repolist # 或 sudo yum malecache # 或 sudo yum list