Linux基本常用命令
一、Linux系统简介
1. Linux主要的发行商:
- slackware---- SUSE
- debai-n-----Ubuntu
- Red Hat
- ---CentOS
- —Fedora
2.快照及克隆:
快照含义:
对某一个特定文件系统在某一个特定时间内的一个具有只读属性的镜像。当你需要重复的返回到某一系统状态,又不想创建多个虚拟机的时候,就可以使用快照功能。
克隆含义
是原始虚拟机全部状态的一一个拷贝,或者说-个镜像。克隆的过程并不影响原始虚拟机,克隆的操作一但完成, 克隆的虚拟机就可以脱离原始虚拟机独立存在,而且在克隆的虚拟机中和原始虚拟机中的操作是相对独立的,不相互影响。
3. Linux基本信息查看操作
查看系统基本信息
cat /proc/cpuinfo # 查看cpu信息
cat /proc/meminfo # 查看内存信息
free # 查看内存使用情况
uname -r # 查看内核版本
cat /etc/redhat-release # 查看发行版信息
hostname # 查看主机名
ifconfig、ip a # 查看ip信息
Selinux临时设置
getenforce # 查看SeLinux状态
setenforce 0 # 临时关闭Selinux
setenforce 1 # 开启Selinux
防火墙调整
systemctl status firewalld # 查看防火墙状态
systemctl stop firewalld # 临时关闭防火墙
systemctl disable firewalld # 永久关闭防火墙
关闭系统
poweroff
halt
init 0
shutdown -h now
重启系统
shutdown -r now
reboot
init 6
二、 基本命令使用
1.简介
-
Linux中, 一切皆文件
- 文本文件
- 链接文件
- 设备文件
- 管道文件
- socket文件
-
多用户操作系统
- 管理员: root
- 系统用户: -般不能登录系统,只是为了启动某个服务而创建的
- 普通用户
-
模块化
- 有多个小程序组成了一个强大的系统
- 很多功能做成了模块
-
如何操作Linux
- 命令行
- shell脚本
-
命令格式:
命令(command) 选项(option) 参数(argument)
-
如何获得命令帮助
-
对于内部命令:使用help,系统shell自带的命令
[ root@localhost ~ ]# help type
-
对于外部命令:使用–help,是安装其他的程序产生的命令。
[ root@localhost ~ ]# type --help
-
可以通过type查看命令是内部还是外部命令: type 命令关键字
-
man命令
[ root@localhost ~ ]# man tree
-
info命令
[ root@localhost ~ ]# info tree
-
百度、Geogle
-
2.Linux根目录结构
-
一切从 / 开始
- rootfs: 根文件系统 /
- /boot: 系统启动相关的静态文件,如内核、initrd或者initramfs,以及grub(bootloader)
- /dev: 所有设备的设备文件,设备文件也称为特殊文件(仅有元数据,没有数据,是设备的 入口)
- /etc:配置文件
- /home:普通用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
- /root:管理员的家目录;
- /lib:基本的共享库和内核模块
- /lib/modules:内核模块文件
- /media:为了移动设备的挂载点目录,例如光盘、U盘
- /mnt:挂载点目录,额外的临时文件系统
- /opt:可选目录,第三方程序的安装目录/proc:内核及进程信息的虚拟文件系统,伪文件系统,内核映射文件,只存在内存中,它 以文件系统的方式为访问系统内核数据的操作提供接口。
- /sys:伪文件系统,硬件设备信息虚拟文件系统接口,跟硬件设备相关的属性映射文件,该 目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备
- /tmp:临时文件, /var/tmp
- /var:可变化的文件
- /var/log 日志信息
- /bin: 基础的用户命令二进制程序, 为所有用户使用
- /sbin:系统二进制程序,一般为管理命令
- /bin和/sbin 系统自身启动和运行时可能会用到的核心二进制命令
- /usr:shared, read-only (Unix System Resource,即Unix系统资源的缩写),不适合放 在/bin或/etc目录下的额外的工具
- /usr/bin 大多数用户使用到的命令
- /usr/sbin 非核心的系统命令
- /usr/lib 安装程序时的一些库文件
- /usr/local:主要存放那些手动安装的软件
- /usr/share/man:放一些man手册页文件
- /usr/share/doc:帮助文档
-
设备文件:
- 块设备:随机访问,数据块
- 字符设备:线性访问,按字符为单位
- 设备号:主设备号(major)和次设备号(minor) 主设备号相同的设备是同类
- 设备(使用同一个驱动程序)
3.目录基本操作命令
-
tree:以树状格式显示目录内容
[ root@localhost ~ ]# tree -C /boot
-
ls:列出目录的内容
-
pwd:打印当前工作目录
-
mkdir:创建空目录
- -p:创建多级目录
-
rmdir:删除空目录
- -p 创建多级目录
-
rm: 删除目录或文件
- -f 强制删除
- -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
-
mv:移动或重命名文件或目录
-
cp: 复制目录或文件
- -p:保持属性不变
- -a:此参数的效果和同时指定"-dpR"参数相同;
- -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目 录连接的原始文件或目录;
- -f:强行复制文件或目录,不论目标文件或目录是否已存在;
- -i:覆盖既有文件之前先询问用户;
- -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
3.文件查看和处理命令
- touch 创建文件
- touch 改变文件的atime和mtime (ctime会随之改变)
- -a 改变atime
- -m 改变mtime
- stat 查看文件的属性及元数据
- cat 用来显示文件的内容
- cat 用来显示文件的内容
- cat m1 m2 > file (将文件ml和m2合并后放入文件file中)
- -n 显示行号
- 通过标准输入生成文件testfile
- more:分屏显示文件内容
- 按Space键:显示文本的下一屏内容。
- 按Enter键:只显示文本的下一行内容。
- 按h键:显示帮助屏,该屏上有相关的帮助信息。
- 按b键:显示上一屏内容。
- 按q键:退出命令。
- less:分屏显示文件内容
- head:默认显示文件头10行内容
- -q 隐藏文件名
- -v 显示文件名
- -c<数目> 显示的字节数。
- -n<行数> 显示的行数。
- tail:默认显示文件尾10行内容
- -f 监控某个文件变化
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
- wc:统计文件的行数、单词数、字符数
- -c或–bytes或–chars 只显示Bytes数。
- -l或–lines 只显示行数。
- -w或–words 只显示字数。
- –version 显示版本信息。
- du:统计文件和目录的大小
- -s 汇总显示大小
- -h 易读形式显示
4.vim编辑器
-
vim
- 三种模式:命令模式、插入模式、末行模式
- i I a A o O 进入到插入模式
- :末行模式 w 保存 q 退出 wq保存并且退出 !强制 三者可以结合使用
- 命令行模式: dd 删除[剪切] yy 复制 [n]yy 多行复制 p 粘贴
- 使vim显示行号,在/root 下边创建一个 .vimrc 的文件,使用vim打开,添加set nu ,wq保存退出
-
命令模式下的操作:
- 翻页
- Page Down或Ctrl+F 向下翻动一整页内容
- Page Up或Ctrl+B 向上翻动一整页内容
- 行内快速跳转
- Home键或“^”、数字“0” 跳转至行首
- End键或“$”键 跳转到行尾
- 行间快速跳转
- 1G或者gg 跳转到文件的首行
- G 跳转到文件的末尾行 #G 跳转到文件中的第#行
- 行号显示
- :set nu 在编辑器中显示行号
- :set nonu 取消编辑器中的行号显示
- 删除
- x或Del 删除光标处的单个字符
- dd 删除当前光标所在行
- #dd 删除从光标处开始的#行内容
- d^ 删除当前光标之前到行首的所有字符
- d$ 删除当前光标处到行尾的所有字符
- 复制
- yy 复制当前行整行的内容到剪贴板
- #yy 复制从光标处开始的#行内容
- 粘贴
- p 小写 将缓冲区中的内容粘贴到光标位置处之后
- P 大写 粘贴到光标位置处之前
- 查找
- /word 从上而下在文件中查找字符串“word”
- ?word 从下而上在文件中查找字符串“word”
- n 定位下一个匹配的被查找字符串
- N 定位上一个匹配的被查找字符串
- 取消操作
- u 按一次取消最近的一次操作 多次重复按u键,恢复已进行的多步操作
- U 用于取消对当前行所做的所有编辑
- 保存退出
- ZZ 保存当前的文件内容并退出vi编辑器
- 可视化块操作界面
- ctrl+v 进入块操作界面
- 上、下、左、右箭头 可以进行选择块
- y 复制选择的快块从
- p 粘贴选择的块
- 翻页
-
末行模式的操作:
- 保存文件
- :w 保存修改的内容
- :w /root/newfile 另存为其它文件
- 退出vim
- :q 未修改退出
- :q! 放弃对文件内容的修改,并退出vi m
- 保存文件退出vim
- :wq 保存修改的内容并退出
- ZZ
- 打开新文件
- :e ~/install.log 打开新的文件进行编辑
- 读入其它文件内容
- :r /etc/filesystems 在当前文件中读入其他文件内容
- 替换
- 😒 /old/new 将当前行中查找到的第一个字符“old” 串替换 为“new”
- 😒 /old/new/g 将当前行中查找到的所有字符串“old” 替换 为“new”
- :#,# s/old/new/g 在行号“#,#”范围内替换所有的字符 串“old”为“new”
- :% s/old/new/g 在整个文件范围内替换所有的字符 串“old”为“new”
- 😒 /old/new/c 在替换命令末尾加入c命令,将对每个替换动作提 示用户进行确认
- 保存文件
5. 压缩和归档命令
- zip:压缩后不删除源文件,一般后缀是 .zip;
- unzip 用于解压
- -d:参数用于指定解压路径
- gzip:压缩后会删除源文件,一般后缀是 .gz
- gunzip:用于解压
- bzip2:默认压缩后也会删除原文件,一般后缀是 .bz2
- bunzip:用于解压
- xz:压缩比很好,一般后缀是 .xz
- unxz:用于解压
6. tar打包归档命令
- 可以在打包的同时,进行压缩
- tar 选项 包名 打包的文件或目录
- tar: 归档工具, .tar
- -c: 创建归档文件
- -f FILE.tar: 操作的归档文件
- -x: 展开归档 --xattrs: 归档时,保留文件的扩展属性信息
- -t: 不展开归档,直接查看归档了哪些文件
- -C:解压时指定路径
- -r:向包中追加文件
- -p:保留权限信息
- -v:显示详细过程
7. 文件搜索
- which:用来查找命令的绝对路径
- 显示shell命令的绝对路径
- 仅仅会在PATH变量中搜索要查找的命令
- 搜索时先查找别名,然后从PATH中查找
- locate
- 通过文件名检索文件,检索速度最快
- 所有能够检索的东西,都是存放在数据库中的
- locate局限性,有的文件系统、有的文件及有的目录默认是不会搜索的
- updatedb:手动更新数据库
- find:全局性搜索文件
- find 要搜索路径 条件(选项) [动作]
- 按照文件名搜索
- -name:按名字查找
- -iname:忽略大小写
- 通配符
- 代表任意字符
- ? 代表单个字符
- 按照文件类型查找 -type
- f:普通文件
- d:目录
- b:块存储文件
- c:字符型文件
- s:socket文件
- 按照时间查找
- -atime n 以天为单位
- -ctime n
- -mtime n
- n为数字,前面可以带+或者-号 -mtime n
- +n:n+1天之前
- n:n到n+1天之间
- -n:n天以内
- 按照用户和组查找
- -user 用户名
- -group 组名
- 按照权限查找 -perm
- 按照文件大小查找 -size
- 动作
- -exec 动作 – 找到结果之后直接执行动作
- -ok 动作 – 执行动作之前先提示,即需要交互
- {} —— 用来代替找到的结果
- ; —— 表示结束标志
- 按照文件名搜索
8. grep过滤
grep:目的是过滤出用户感兴趣的内容
语法:grep [选项] 模式或关键字 文件列表
- grep命令选项
- -i 忽略大小写
- -v 取反
- ^ 以某关键字开头
- $ 以某关键字结尾
- ^$ 空行
- -c count,统计匹配到的行数
- -l 一般和-r联用,只显示包含关键字的文件的名字,而不是显示文件内容
- -r 递归检索
- -q quiet 静默输出 一般在写脚本时候用
- echo ? / / ? // ?//?表示上一条命令的执行结果
- 返回结果为0:表示上一条命令的执行时成功的
- 返回结果非0:表示上一条命令执行失败
- -n 显示匹配行的行号
9. 文件操作
cut:就是截取的意思,它的处理对象是“一行”文本,可以从中选取出用户所需要的部 分,不影响原文件
语法:cut -f 指定的列 -d ‘分隔符’
- cut命令选项
- -d:指定字段分隔符
- -f:指定要输出的区域,多个之间用逗号分隔
- -c:指定列的字符
sort:排序
- sort命令选项
- -t:指定字段分隔符
- -k:指定第几个字段
- -n:按照数字顺序排序
- -r:反向排序 reverse
- -u:排序后重复行只打印一次 unique
uniq:去重,唯一
去除相邻重复行;一般与sort联用
- uniq命令选项
- -c:显示重复的行数
- -i:忽略大小写
tr :主要作用在于文本转换或者删除。
将/etc/passwd文件中的小写字母转换成大写字母
[root@web test]# cat /etc/passwd | tr '[a-z]' '[A-Z]'
paste:文本合并。将文件按照行进行合并,中间使用tab隔开。
- paste命令选项
- -d:指定合并文件时行间的分隔符
三、 用户和组管理
1. 用户类型
- 管理员用户:root
- 系统用户(程序用户):为了某种管理任务而存在的用户,一般不能登陆系统
- 普通用户:创建的一般用户
2. 组的类型
- 基本组(私有组):一个用户只能属于一个基本组,当这个用户创建文件或文件夹时,文件或文件默认属于这个用户的基本组所有。
- 附加组(公共组):一个用户可以属于多个附加组。
3. 和用户相关的配置文件
- /etc/passwd:用户相关信息
- /etc/shadow:用户密码相关信息
- /etc/group:组账户信息
- /etc/gshadow:组安全相关信息
4. 创建用户时有关的配置文件
- /etc/login.defs: Shadow密码套件设置
- /etc/skel/ 目录
- /etc/default/useradd:账户创建的默认值
- /etc/rc.local:是系统开机后执行的最后一个脚本,一般被管理员执行一些系统开机运行的命令
5. 用户和组相关的命令
-
useradd:添加用户
useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ][-u <uid>][用户帐号]
- -u 指定用户的uid
- -g 指定用户的gid
- -G 指定附属组,可以有多个, 但是这些附属组必须是系统内已经存在的
- -c 指定描述
- -d 指定家目录
- -M 不建立家目录
- -s 指定shell
- -e 指定用户过期时间, 日期
- -f 指定用户过期时间, 天数
-
passwd:设置用户密码
- -l 锁定用户
- -u 解锁用户
- -n 密码最小使用期限 天数
- -x 密码最大使用期限 天数
- -w 密码过期前几天提醒 天数
- –stdin 从stdin读取新令牌(仅限root用户)
-
usermod:修改用户
- -L 锁定用户
- -U 解除锁定
- -l 改名
- -a 添加用户到组,结合-G使用
-
userdel:删除用户
-
-r:可以干净的删除一个用户(连同家目录一起删除)
-
chage:查看和修改用户密码信息
- chage -d 0 用户名 用户下次登录必须更改密码
- chage -m 2 u1 修改密码最少使用天数
- chage -M 50 u1 修改密码最大使用天数(密码过期时间)
- chage -I 5 u1 密码过期后到账户失效的天数(密码过期后还能使用的天数)
-
groupadd:添加组
- -g:指定新建工作组的 id;
- -r:创建系统工作组,系统工作组的组ID小于 500;
-
gpasswd:向组内添加用户
- -A:指定管理员;
- -a:添加用户到组;
- -M:指定组成员和-A的用途差不多(可以编辑一个列表添加到组);
- -d:从组删除用户;
-
groupdel:删除组
- 倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除组。
-
chfn:改变用户信息
-
finger:查看用户信息
-
id username:查看当前用户的ID
-
whoami:查看当前用户的名字
四、 权限管理
1. 基本权限
-
文件:
- r:可读,可以使用类似cat等命令查看文件内容;
- w:可写,可以编辑或删除此文件;
- x: 可执行,eXacutable,可以命令提示符下当作命令提交给内核运行;
-
目录:
- r: 可以对此目录执行ls以列出内部的所有文件;
- w: 可以在此目录创建文件;
- x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;
-
rwx
r--:只读 r-x:读和执行 ---:无权限 0 000 ---:无权限 1 001 --x: 执行 2 010 -w-: 写 3 011 -wx: 写和执行 4 100 r--: 只读 5 101 r-x: 读和执行 6 110 rw-: 读写 7 111 rwx: 读写执行
-
用户:
- u: 属主
- g: 属组
- o: 其它用户
2. 修改文件权限
- chown: 改变文件属主(只有管理员可以使用此命令)
- -R: 修改目录及其内部文件的属主
- # chown USERNAME:GRPNAME file,…
- chgrp
- # chgrp GRPNAME file,…
- -R: 修改目录及其内部文件的属主
2.1 修改文件权限
-
chmod: 修改文件的权限
-
修改三类用户的权限:
u,g,o,a chmod 用户类别=MODE file,...
-
修改某类用户的某位或某些位权限:
u,g,o,a chmod 用户类别+|-MODE file,... 使用chmod a+[-]x 全部添加或者删除相应权限
-
-
chown:用于设置文件所有者和文件关联组的命令
-
chown 需要超级用户 root 的权限才能执行此命令。
chown [-cfhvR] [--help] [--version] user[:group] file...
-
将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :
chown runoob:runoobgroup file1.txt
-
3. 特殊权限
-
SUID
-
运行某程序时,相应进程的属主是程序文件自身的属主,而不是 用户本身了,只对二进制程序有效,执行者对于程序需要有x权限
-
例子
passwd命令 需要在/etc/shadow中写入密码 ls -l /bin/cat ls -l /etc/shadow chmod u+s file (如果本身具有x,为s,否则为S)
-
-
SGID
- 对于文件:运行某程序时,相应进程的属组是程序文件自身的属组,而不是用户本身的基本组
- chmod g+s file
- 对于目录:
- 用户对此目录有rx权限可以进入目录
- 用户进入此目录后,有效用户组会变成该目录的用户组
- 用户在此目录有w权限,则用户创建的文件用户组与该目录用户组相同
-
Sticky (BIT)
-
只针对目录有效,当用户对目录拥有wx权限时,用户在该目录创建的文件或目录,只有 自己与root才可以删除
-
在一个公共目录,每个人都可以创建文件,删除自己的文件, 但是不能删除别人的文件(冒险位,粘贴位)
-
例子:
chmod o+t dir
-
-
SUID是4 SGID是2 SBIT是1
chmod 7755 filename # 第一个7代表的就是这三个特殊命令,后面的755是普通权限。
4. FACL权限
- 利用文件的扩展属性,保存了额外的访问控制权限
- getfacl 查看权限
- setfacl 设置权限
- 语法:setfacl [-bkRd] [-m|-x acl 参数] 目标文件名
- -m:设置后续的acl参数,不可与-x一起使用
- -x: 删除后续的acl参数,不可与-m一起使用
- -b:删除所有的acl参数
- -k:删除默认的acl参数
- -R:递归设置acl参数
- -d:设置默认acl参数,只对目录有效
- 撤销所有的组和用户的写权限(使用有效的正确mask)
- setfacl -m m::rx file
- 所有权限都不能超过mask的权限
- 复制一个文件的ACL到另一个文件
- getfacl file1 | setfacl --set-file=- file2
- 复制访问的目录的ACL作为目录的默认ACL
- getfacl --access dir | setfacl -d -M- dir
5. 文件隐藏属性
- chattr命令用于改变文件属性
- a:让文件或目录仅供附加用途。
- b:不更新文件或目录的最后存取时间。
- c:将文件或目录压缩后存放。
- d:将文件或目录排除在倾倒操作之外。
- i:不得任意更动文件或目录。
- s:保密性删除文件或目录。
- S:即时更新文件或目录。
- u:预防意外删除。
- -R 递归处理,将指定目录下的所有文件及子目录一并处理。
- lsattr命令查看文件隐藏属性
6. sudo 提权
-
sudo:某个用户能够以另外一个用户的身份通过某主机执行某命令
-
sudo 的配置文件 /etc/sudoers
-
基本配置格式
<user list> <host list> = <operator list> <tag list> <command list>
-
user list 用户/组,或者已经设置的用户的别名列表, 用户名直接 username,用 户组加上%
-
host list 主机名或别名列表
-
operator list runas用户,即可以以哪个用户、组的权限来执行
-
command list 可以执行的命令或列表
-
tag list 这个经常用到的是 NOPASSWD: ,添加这个参数之后可以不用输入密码 别名机制:类似定义了一个组
-
-
4类:
- 用户别名: User_Alias
- 主机别名: Hosts_Alias
- 参照用户: Runas_Alias
- 命令别名: Cmnd_Alias
-
注意事项:
- 别名的名字只能使用大写的英文字母组合
- 别名:可使用!取反
-
使用示例:
- User_Alias USERADMIN = 系统用户名 或 %组名 或用户别名
- Hosts_Alias 主机名 IP 网络地址 其它主机名 可以嵌套
- Runas_Alias 用户名 #UID 别名
- Cmnd_Alias 命令绝对路径 目录(下面所有命令) 其它定义的命令别名
-
sudo命令
- -l 显示出自己(执行 sudo 的使用者)的权限
- -k 将会强迫使用者在下一次执行 sudo 时问密码
-
记录sudo日志到指定的文件:
- 编辑/etc/sudoers文件,添加如下行:
- Defaults logfile=/var/log/sudo.log
- Defaults !syslog
- 编辑/etc/sudoers文件,添加如下行:
-
visudo -c 可以检查配置文件语法
五、 Linux常用网络命令
1. 网络配置
-
网络命令
-
ifconfig:用于显示或设置网络设备
- down 关闭指定的网络设备。
- up 启动指定的网络设备。
- [IP地址] 指定网络设备的IP地址。
- [网络设备] 指定网络设备的名称。
-
ip a
ip addr show # 显示网卡IP信息 ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1 ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址
-
ip link
ip link show # 显示网络接口信息 ip link set eth0 up # 开启网卡 ip link set eth0 down # 关闭网卡
-
hostname
- 临时修改主机名
-
hostnamectl
- 永久修改主机名
- hostnamectl set-hostname 主机名
-
nmtui
- 使用nmtui命令会弹出一工具界面
-
ethtool
- 查看网路接口设备本身的属性
- ethtool 网卡接口名称
-
2. 网卡配置文件
-
ens33网卡配置文件解析:
DEVICE=eth0 # 设备名 TYPE=Ethernet # 设备类型 UUID=52a6bbc3-917c-4828-8ab5-45369ab90d4b # 设备唯一标识符 ONBOOT=yes # 是否随系统启动而启动 NM_CONTROLLED=yes # 是否受NetworkManager服务管理 #BOOTPROTO=dhcp # 自动获取地址 static # 静态设置IP地址 none # 静态设置IP地址 DEFROUTE=yes IPADDR=192.168.1.3 # 设置IP地址 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.1.254 # 网关 DNS1=8.8.8.8 # DNS服务器 NAME="System eth0" PREFIX=24 # 设置网络前缀长度 HWADDR=00:0C:29:C1:5D:CF # 设置MAC地址
-
设置以后要重启服务才能生效:
- service network restart
-
DNS配置:
- 在网卡的配置文件中设置DNS1=8.8.8.8 2
- 编辑**/etc/resolv.conf** 更改以后立马生效 nameserver 202.106.0.20
3. 修改网卡配置命令
-
nmcli
- 语法:nmcli[ OPTIONS ] OBJECT { COMMAND | help }
- nmcli后面可以跟show,up, down, add, modify, edit, delete, reload
- device叫网络接口,是物理设备
- nmcli device help
- connection是连接,偏重于逻辑设备
- nmcli connection help
-
示例:
nmcli connection add con-name test-con ipv4.addresses "10.1.1.100/24" ipv4.gateway 10.1.1.1 ipv4.dns 202.106.0.20 ipv4.method manual connection.autoconnect yes type ethernet ifname ens33 # con-name:逻辑名字 # ifname 物理设备名字 # ipv3.method manual:手动配置IP地址 # autoconnect:开机自动连接网络
4. 常用网络测试命令
-
测试连通性
- ping
- -c ping 的个数
- -t TTL值
- -s ping包大小
- -i ping的间隔
- traceroute:用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40 字节
- tracepath:用来追踪并显示报文到达目的主机所经过的路由信息
- mtr:显示出我们到达一个网络所经过的路由信息
- arp:显示和修改操作系统的ARP缓存表。这个程序已经被ip neigh替代
- -a<主机>:显示arp缓冲区的所有条目;
- -d<主机>:从arp缓冲区中删除指定主机的arp条目;
- -e:以Linux的显示风格显示arp缓冲区中的条目;
- -s<主机>:设置指定的主机的IP地址与MAC地址的静态映射;
- -n:以数字方式显示arp缓冲区中的条目;
- -v:显示详细的arp缓冲区条目,包括缓冲区条目的统计信息;
- ping
-
解析dns
- **host:**是常用的分析域名查询工具,可以用来测试域名系统工作是否正常
- 格式:host [option] domain [server]
- -a 显示详细的DNS信息
- **例如:**host www.baidu.com 8.8.8.8
- dig:是比nslookup和host更强大的DNS查询工具。
- 格式:dig [options] domain [@server]
- +trace —— 输出域名解析过程中详细的debug信息
- -t type —— 制定查询的DNS记录类型,例如A记录、CNAME记录以及NS记录等等
- -x —— 从ip反解析域名
- +short —— 精简地输出dig结果
- nslookup:nslookup支持交互式和非交互式两种查询。
- 当直接在命令提示符后输入nslookup命令 时,就进入了nslookup的交互式操作。否则直接返回给用户解析结果
- **host:**是常用的分析域名查询工具,可以用来测试域名系统工作是否正常
5. 常用网络测试命令2
-
查看路由表
netstat -rn route -n ip route show
-
netstat
- netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
- -a或–all:显示所有连线中的Socket;
- -l或–listening:显示监控中的服务器的Socket;
- -n或–numeric:直接使用ip地址,而不通过域名服务器;
- -p或–programs:显示正在使用Socket的程序识别码和程序名称;
- -r或–route:显示Routing Table;
- -s或–statistice:显示网络工作信息统计表;
- -t或–tcp:显示TCP传输协议的连线状况;
- -u或–udp:显示UDP传输协议的连线状况;
- -v或–verbose:显示指令执行过程;
- -V或–version:显示版本信息;
-
ss
ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信息. 它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具。
-
ss -l 显示本地打开的所有端口
-
ss -pl 显示每个进程具体打开的socket
-
ss -t -a 显示所有tcp socket
-
ss -u -a 显示所有的UDP Socekt ss -o state established ‘( dport = :smtp or sport = :smtp )’ 显示所有已建立的 SMTP连接
-
ss -o state established ‘( dport = :http or sport = :http )’ 显示所有已建立的HTTP 连接
-
ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程
-
ss -s 列出当前socket详细信息: ss做地址筛选
-
ss src ADDRESS_PATTERN src:表示来源 ADDRESS_PATTERN:表示地址规则
-
ss做端口筛选
- ss dport OP PORT OP:是运算符
- PORT:表示端口
- dport:表示过滤目标端口、相反的有sport
-
运算符如下:
- <= or le : 小于等于
- = or ge : 大于等于
- == or eq : 等于
- != or ne : 不等于端口
- < or lt : 小于这个端口 > or gt : 大于端口
-
-
-
iperf
一个 TCP/IP 和 UDP/IP 的性能测量工具,能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够帮助我们测试网络性能,定位网络瓶颈。
- yum install epel-release -y
- yum install iperf -y
- TCP测试:
- 服务器命令:iperf3 -s -i 1
- 客户端命令:iperf3 -c 192.168.5.187 -p 5201 -i 1 -t 100
- UDP测试:
- 服务器命令:iperf3 -s -i 1
- 客户端命令:iperf3 -c 192.168.5.187 -p 5201 -u -i 1 -t 100
6. 新网络配置命令
- IP
- Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只 需一个命令,你就能很轻松地执行一些网络管理任务。
- 设置和删除IP地址
- ip addr add 192.168.17.30/24 dev eth0
- ip addr del 192.168.17.30/24 dev eth0
- 列出路由表条目:
- ip route show
- ip route get 192.168.17.130
- 添加路由条目:
- ip route add default via 192.168.17.3
- ip route add 192.168.100.0/24 dev ens33
- 显示网络统计数据
- ip -s link
- ip -s link ls ens33
- ip -s -s link ls ens33
- ARP条目:
- ip neigh
- 激活和停止网络接口:
- ip link set eth0 down
- ip link set eth0 up
7. 命令行抓包工具
-
tcpdump
-
tcpdump是一个用于截取网络分组,并输出分组内容的工具
-
yum install tcpdump -y
-
常用参数介绍:
- -i 指定抓包网络接口
- -c 在收到指定的数量的分组后,tcpdump就会停止
- -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
- -vv 输出详细的报文信息 -w 直接将分组写入文件中,而不是不分析并打印出来
- -b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的
- -A,数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。
- -X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用
- -n 不把网络地址转换成名字 -nn 不进行端口名称的转换
- -r 从指定的文件中读取包(这些包一般通过-w选项产生)
- -S 将tcp的序列号以绝对值形式输出,而不是相对值
- -t 不在每一行中输出时间戳
- -tt 在每一行中输出非格式化的时间戳
- -ttt 输出本行和前面一行之间的时间差
- -tttt 在每一行中输出由date处理的默认格式的时间戳
-
tcpdump的表达式介绍
-
第一种是关于类型的关键字
- 主要包括host,net,port,
- 例如 host 210.27.48.2, 指明 210.27.48.2是一台主机,net 202.0.0.0指明202.0.0.0是一个网络地址,port 23 指明端 口号是23。
- 如果没有指定类型,缺省的类型是host。
-
第二种是确定传输方向的关键字
- 主要包括src,dst,dst or src,dst and src, 这些 关键字指明了传输的方向。
- 举例说明,src 210.27.48.2 ,指明ip包中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0。
- 如果没有指明 方向关键字,则缺省是 src or dst关键字。
-
第三种是协议的关键字
- 主要包括fddi,ip,arp,rarp,tcp,udp等类型。
- Fddi指明 是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名, fddi和ether 具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处 理和分析。
- 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议, 则tcpdump 将会监听所有协议的信息包。
-
如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
# tcpdump tcp port 23 host 210.27.48.1
-
对本机的udp 123 端口进行监视 123 为ntp的服务端口
# tcpdump udp port 123
-
-
8. 网络流量监控
-
iftop
-
iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等
-
yum install iftop -y
-
常用参数
- -i设定监测的网卡,如:# iftop -i eth1
- -B 以bytes为单位显示流量(默认是bits),如:# iftop -B
- -n使host信息默认直接都显示IP,如:# iftop -n
- -N使端口信息默认直接都显示端口号,如: # iftop -N
- -F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
- -h(display this message),帮助,显示参数信息
- -p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
- -b使流量图形条默认就显示;
- -P使host信息及端口信息默认就都显示;
- -m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M
-
进入iftop操作命令
-
按h切换是否显示帮助;
-
按n切换显示本机的IP或主机名;
-
按s切换是否显示本机的host信息;
-
按d切换是否显示远端目标主机的host信息;
-
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
-
按N切换显示端口号或端口服务名称;
-
按S切换是否显示本机的端口信息;
-
按D切换是否显示远端目标主机的端口信息;
-
按p切换是否显示端口信息;
-
按P切换暂停/继续显示;
-
按b切换是否显示平均流量图形条;
-
按B切换计算2秒或10秒或40秒内的平均流量;
-
按T切换是否显示每个连接的总流量;
-
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
-
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
-
按j或按k可以向上或向下滚动屏幕显示的连接记录;
-
按1或2或3可以根据右侧显示的三列流量数据进行排序;
-
按<根据左边的本机名或IP排序;
-
按>根据远端目标主机的主机名或IP排序;
-
按o切换是否固定只显示当前的连接;
-
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
-
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
-
按q退出监控。
-
-
9. 使用Linux路由功能
-
开启Linux主机路由功能
-
永久开启,更改配置文件
vim /etc/sysctl.conf net.ipv4.netip_forward = 1 # 默认值为0 sysctl -p # 令修改立刻生效
-
临时修改
echo 1 > /proc/sys/ipv4/ip_forward
-
-
临时添加路由条目
-
使用route命令添加的路由,机器重启或者网卡重启路由就失效了
-
添加到主机的路由
route add -host 192.168.119.10 dev ens33 route add -host 192.168.119.11 gw 192.168.119.1
-
添加到网络的路由
route add -net 192.168.119.10 netmask 255.255.255.0 ens33 route add -net 192.168.119.10 netmask 255.255.255.0 gw 192.168.119.1 route add -net 192.168.119.0/24 ens33
-
添加默认网关
route add default gw 192.168.119.1
-
删除路由条目
route del -host 192.168.119.10 dev ens33 route del default gw 192.168.119.1 route del -net 192.168.119.0/24
-
查看命令
ip addr # 查看地址信息 ip route # 查看路由表 route -n # 查看路由表 netstat -rn # 查看路由表 ip rule # 查看路由策略
-
-
设置永久路由
-
在**/etc/rc.local里添加,需要chmod -x /etc/rc.d/rc.local**
route add -net 192.168.1.0/24 dev ens33 route add -net 192.168.2.0/24 gw 192.168.2.1
-
/etc/sysconfig/static-routes : (没有static-routes的话就手动建立一个这样的文件)
any net 192.168.3.0/24 gw 192.1 68.3.254 any net 10.250.228.128 netmask 255.255.255.192 gw 10.250.228.129
-
编辑网卡静态路由文件,在/etc/sysconfig/network-scripts 目录中编写,格式:route-网卡名
ADDRESS0= 192.168.100.0 NETMASKO= 255.255.255.0 GATEWAYO= 192.168.154.2 ADDRESS1= 192.168.200.0 NETMASK1= 255.255.255.0 GATEWAY1= 192.168.154.2
-
10. 常见客户端命令
-
telnet 远程登陆,明文登录
- telnet命令通常用来远程登陆,要开始一个telnet绘画,必须输入用户名和密码来登录服务器。
- telnet是明文登录,安全性不好。
- telnet命令可以做别的用途,比如确定远程服务状态,比如确定远程服务器的某个端口是否能访问。
- 命令格式:
- telnet[参数] [主机]
- 常用选项:
- -a 尝试自动登入远端系统。
- -k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
- -l<用户名称> 指定要登入远端主机的用户名称。
- -n<记录文件> 指定文件记录相关信息。
- 例如
- telnet 192.168.1.10 使用默认端口23
- telnet www.baidu.com
- telnet www.baidu.com 80 使用指定端口
-
ssh 远程登陆,密文登录
- SSH是一种网络协议,用于计算机之间的加密登录。
- ssh user@192.1 68.154.150使用user用户登录 192.168.154.150,使用默认端口 22
- ssh -p 2200 user@192.168.154.150 登录非默认端口2200
- ssh root@192.1 68.154.150 "mkdir /root/abc"远程执行命令mkdir /root/abc
- scp test.file root@192.168. 154.150:/opt/把本地文件test.file 复制到远端主机
-
curl命令
- 基本参数
- -A/–user-agent 设置用户代理发送给服务器
- -b/–cookie <name=string/file> cookie字符串 或文件读取位置
- -c/–cookie-jar 操作结束后把cookie写入到这个文件中
- -C/–continue-at 断点续转
- -D/–dump-header 把header信息写入到该文件中
- -e/–referer 来源网址
- -f/–fail 连接失败时不显示http错误
- -0/–output 把输出写到该文件中
- -0/–remote-name 把输出写到该文件中,保留远程文件的文件名
- -r/–range 检索来自HTTP/1.1或FTP服务器字节范围
- -s/–silent 静音模式。不输出任何东西
- -T/–upload-file 上传文件
- -u/–user <user[:password]> 设置服务器的用户和密码
- -w/–write-out [format] 什么输出完成后
- -x/–proxy <host[:port]> 在给定的端口.上使用HTTP代理
- -#/–progress-bar 进度条显示当前的传送状态
- 基本用法
- curl http://www.linux.com访问网站
- curl -o baidu.html http://www.baidu.com 保存网站内容到本地baidu.html文件
- curl -0 https://bs.hupu.com/25742894.html保存网站具体网页内容到本地文件
- curl -0 /dev/null -S -W %{http_ code} www.sina.com.cn测试网站返回值,写脚本常用
- curl -# -0 http:/www.linux.com/dodo1JPG下载图片,并显示进度
- curl -C -0 http://www.linux.com/dodo1.JPG端点续传下载文件
- 基本参数
-
wget 下载工具
-
Linux系统中的wget是一个下载文件的工具, 它用在命令行下。
-
wget支持HTTP, HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。
-
命令格式
- wget [参数] [选项]
-
使用案例
#实例1:使用wget下载单个文件 wget http://www.minjieren.com/wordpress-3.1-zh _CN.zip #实例2:使用wget -0下载并以不同的文件名保存 wget -0 wordpress .zip http://www.minjieren.com/download.aspx?id=1080 #实例4:使用wget -c断点续传 wget -C http://www.minjieren.com/wordpress-3.1-zh_ _CN.zip #实例5:使用wget -b后台下载 wget -b http://www.minjieren.com/wordpress-3.1-zh _CN.zip #你可以使用以下命令来察看下载进度: tail -f wget-log
-
-
axel 下载工具
-
Axel是Linux下一个不错的HTTP/FTP高速下载工具。支持多线程下载、断点续传,可以从多个地址或者从一个地址的多个连接来下载同一个文件。
-
适合网速不给力时多线程下载提高下载速度。
-
命令格式
- axel [参数] [选项]
-
常用参数
- -n指定线程数
- -o 指定另存为目录
- -S指定每秒的最大比特数
- -q 静默模式
-
例如:
#下载Inmp安装包指定10个线程,保存到/tmp/目录 axel-n 10 -0 /tmp/ http://soft.vpser .net/lnmp/nmp0.7-full.tar.gz
-
六、 软件安装
1. RPM安装
- 简介
- rpm -ivh /mnt/cdrom/Packages/zsh-4.3.10-5.el6.x86_64.rpm
- -i:–install 安装
- -v:–verbose 显示安装过程
- -h:–human 以人类可读的方式显示
- –test:只是测试安装,并不会真正安装软件
- –nodeps:只安装软件本身,不考虑依赖
- –force:强制安装
1.1 rpm的查询 ***
-
主要选项
-
-q query—查询 查询已安装的软件包的信息
[hostname Packages]# rpm -q zsh zsh-4.3.10-5.el6.x86_64 [hostname Packages]# rpm -q asd package asdf is not installed
-
查询系统中所有已经安装的软件包有哪些
[hostname Packages]# rpm -qa # 统计已经安装的软件包的个数 [hostname Packages]# rpm -qa | wc -l 1120
-
f 查询某个文件是由哪个软件包安装的
-
rpm -qf 文件的绝对路径
[hostname ~]# rpm -qf `which vim` vim-enhanced-7.2.411-1.8.el6.x86_64
-
c 查询软件的配置文件
[hostname ~]# rpm -qc httpd ......
-
l 安装某个软件时,都安装了哪些文件
[hostname ~]# rpm -ql setup
-
i 查询安装的软件包的信息
[hostname ~]# rpm -qi setup
-
-qp 查询未安装的软件包的相关信息
-
-qpi 未安装的软件包的完整路径和包名:查询未安装的软件包的详细信息
[hostname ~]# rpm -qpi /mnt/cdrom/Packages/gcc-4.4.7-3.el6.x86_64.rpm
-
-qpl:如果安装未安装的软件,会安装哪些文件在系统中
-
-qpR:查询未安装的软件包的依赖情况
-
1.2 rpm包的卸载
-
主要选项
-
-e : erase
[hostname ~]# rpm -e zsh [hostname ~]# rpm -q zsh package zsh is not installed
-
1.3 rpm包更新
- 主要选项
- -U : 如果包未安装,等同于-i 进行安装
- 如果包已安装,便是更新版本
1.4 rpm包的校验: verify
-
主要选项
-
-V:验证软件包生成的文件或命令是否被人修改过 —— 为了安全,防止恶意代码
-
rpm -V 已安装的软件包的名字
[hostname ~]# rpm -V setup .......T. c /etc/bashrc S.5....T. c /etc/printcap S.5....T. c /etc/profile
-
rpm -Va 检测所有的包
S file Size differs # 大小改变 M Mode differs (includes permissions and file type) # 文件的类型或权限改变 5 digest (formerly MD5 sum) differs # md5值改变 D Device major/minor number mismatch # 设备的主从号改变 L readLink(2) path mismatch # 符号链接文件找不到链接对象 U User ownership differs # 用户改变 G Group ownership differs # 组改变 T mTime differs # 修改文件内容的时间改变 P caPabilities differ # 兼容性改变
-
2. yum安装
- 简介
- 是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
- yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
- 语法
- yum [options] [command] [package …]
- **options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 “yes”),-q(不显示安装的过程)等等。
- **command:**要进行的操作。
- **package:**安装的包名。
- yum [options] [command] [package …]
2.1 yum常用命令选项
-
常用yum命令
- 列出所有可更新的软件清单命令:yum check-update
- 更新所有软件命令:yum update
- 安装指定的软件命令:yum install <package_name>
- 更新指定的软件命令:yum update <package_name>
- 列出所有可安裝的软件清单命令:yum list
- 删除软件包命令:yum remove <package_name>
- 查找软件包命令:yum search
- 清除缓存命令:
- yum clean packages: 清除缓存目录下的软件包
- yum clean headers: 清除缓存目录下的 headers
- yum clean oldheaders: 清除缓存目录下旧的 headers
- yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
-
示例
[root@localhost ~]# yum list pam* Installed Packages # 已安装的 pam.i386 0.99.6.2-3.27.el5 installed pam_ccreds.i386 3-5 installed ...... Available Packages <==底下则是『可升级』的或『未安装』的 pam.i386 0.99.6.2-4.el5 base pam-devel.i386 0.99.6.2-4.el5 base pam_krb5.i386 2.2.14-10 base
2.2 更换国内yum源
-
过程
-
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
-
下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)
wget -c http://mirrors.aliyun.com/repo/Centos-7.repo mv Centos-7.repo aliyun.repo
-
生成缓存
yum clean all # 清除所有缓存 yum makecache # 生成缓存
-
2.3 配置本地yum源
-
过程
-
cd /etc/yum.repos.d/ 进入存放源的目录
-
首先备份/etc/yum.repos.d/ 下的 .repo 结尾的文件
- mv * buckup
-
用vim编辑一个 .repo 结尾的文件
[name] # 容器名称,一定要放在[]中。 name=user_name # 容器说明,可以自己随便写。 baseurl=file:///mnt/cdrom # 光盘挂载路径,即软件源的位置 enabled=1 # 此容器是否生效,如果不写或写成 enabled 则表示此容器生效,写成 enable=0 则表示此容器不生效。 gpgcheck=0 # 如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效
-
3. 编译安装
3.1 获取源码包
-
**例如:**获取一个python3版本的源码包
wget -c https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tar.xz
-
解压源码包
-
根据源码包解压格式选择解压所需要的命令
-
例如:解压python3的包
unxz Python-3.9.0.tar.xz tar -xf Python-3.9.0.tar.xz
-
3.2 编译安装python3
-
过程
-
需要提前安装依赖包:
wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git libffi-devel
-
安装依赖包
yum install -y sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git libffi-devel
-
编译python3
cd Python-3.9.0/ # 进入解压出来的文件夹 ./configure --prefix=/usr/python3 --enable-shared CFLAGS=-fPIC # --prefix 后面是指定安装的路径 make # 对软件源代码文件进行编译 make install # 开始安装python库文件
-
创建软连接
ln -s /usr/python3/bin/python3.9 /usr/bin/python3 ln -s /usr/python3/bin/pip3 /usr/bin/pip3 #/usr/bin/ 主要放置一些应用软件工具的必备执行档,即可执行文件,执行命令会查找/usr/bin/等目录
-
错误提示及解决
# 错误: python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory #原因是因为python运行时没有加载到libpython3.5m.so.1.0 这个库文件将其复制到响应目录OK #解决方法: cp libpython3.9.so.1.0 /usr/lib64/ cp libpython3.9.so.1.0 /usr/lib cp libpython3.9.so.1.0 /usr/local/lib64/
-