我们用手机浏览器打开一个网页的时候,和用电脑浏览器打开同一个网页时,显示是不一样的,手机浏览器会自动的去适应这个网页,但是如果手机打开的网页和电脑浏览器打开的网页那样,那么就要我们自己去进行缩放,去找到自己的东西,那样很麻烦,我们的操作也很不方便。
所以系统程序在Liunx运行的时候,Liunx会自动去协调、调整相关的参数,并且Liunx提供好一些所需要的功能,网络功能、多用户登录等功能,无需用户自己在去构建这些东西,程序在运行的时候和网络的交互等,Liunx已经帮助我们做好了。
这个要讲一下这个Unix和Liunx的一点小历史,大家可以理解为在60年代,有一群人可以说是在这个AT&T贝尔实验室内机缘巧合下开发了出了这个系统(具体的历史,大家去百度,我们这是用白话文去讲解),AT&T意识到了这个操作系统的商业价值就将Unix包装成商业产品(收费)。
Liunx的产生是源于有那么一个人林纳斯·托瓦兹(Linus Torvalds),也就是这Liunx创始人,觉得不满意那些收费的,他就以Unix为基础编写了一个新的操作系统,这个新的操作系统就是Liunx。
Liunx在编写的过程中,使用了大量的由麻省剑桥免费软件基金的GNU软件,也是要感谢这个Liunx创始者,所以这个Liunx才得以开源,免费。
Liunx是一套免费和自由传播的类Unix操作系统,一个多用户、多任务、支持多线程和多CPU的操作系统,Liunx能运行主要的Unix工具软件、应用程序和网络协议,所以Liunx也继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Liunx也支持32位和64位硬件。
目前市面上比较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、Suse、OpenSUSE。
Windows是我们常用的桌面化操作系统,但是这个桌面化操作系统为了更加人性化,所以做了很多事情,使得用户不用在像操作Unix或Liunx那样敲代码,但是就因为做了太多的事情,使得我们的应用在运行的时候,往往很多计算机资源就没有办法给应用利用起来,因为这些资源都去做了很多人性化的东西。
Liunx就是一个白色,空的篮。
Windows就是一个装饰好,而且还很人性化的设计了一个可以提的把手。
Liunx适合搬运东西。
Windows适合出去拿着出去买菜。
一切都是文件
没有后缀之说,什么后缀的文件都可以查看
支持32位和64位硬件
多用户
……
目录 | 描述 |
/ | 根目录 |
bin | 系统脚本命令 |
boot | 系统启动相关 |
dev | 挂载外部设备(光盘等…) |
etc | 配置文件 |
home | 自定义用户根目录 |
lib64 | Liunx自带库(C++等) |
lost+found | |
media | 存放系统自动识别设备,例如U盘 |
mnt | 也是用于挂载用,例如共享文件夹 |
opt | 挂载软件,用户安装的软件所相关的存放目录,如:oracle |
proc | 存放系统镜像、内存 |
root | 超级管理员目录 |
sbin | 系统命令 |
seliunx | 系统安全相关 |
srv | Service简写,系统服务等 |
tmp | 临时文件 |
usr | 存放一些安装软件,和opt差不多 |
var | 变化文件(日志、变量…) |
所有的Unix Like系统都会内建Vi文书编辑器,其他的文书编辑器则不一定会存在,但是目前使用比较多的是Vim编辑器。
Vim具有程序编程能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
Vim是从Vi发展出来的一个文本编辑器。
简单来说Vi是老式的字处理器,不过功能很齐全了,但是还有进步的空间。
Vim编辑器有三种模式:一般模式、编辑模式、指令模式
文本使用Vim编辑器命令:
vi test.txt
vim test.txt
操作 | 描述 |
i | 进入编辑模式,当前光标前 |
a | 进入编辑模式,当前光标后 |
o | 进入编辑模式,当前光标行下一行,新开一行 |
进入指令模式:输入 :
操作 | 描述 |
:set nu | 设置行号 |
:set nonu | 取消行号 |
:wq! | w 保存、q 退出 、 ! 强制执行 |
操作 | 描述 |
yy | 复制光标一行 |
y数字y | 复制一段(光标起始,第几行到第几行) |
p | 箭头移动到目的行粘贴 |
u | 撤销上一步 |
dd | 删除光标当前行 |
d数字d | 删除光标(含) 后多少行 |
x | 删除一个字母 |
X | 删除一个字母 |
yw | 复制一个词 |
dw | 删除一个词 |
shift+^ | 移动到行头 |
shift+$ | 移动到行尾 |
1+shift+g | 移动到页头 |
shift+g | 移动到页尾 |
数字N+shift+g | 移动到目标行 |
命令 | 描述 | 备注 | 示例 |
ifconfig | 查看网络和网关 | ||
ping 地址 | ping 192.168.1.1 | ||
service network restart | 重启网络 | ||
netstat | 显示网络统计信息 | netstat -anp #显示整个系统的网络请,连接数,书包传递,路由表内容等 |
命令 | 描述 | 备注 | 示例 |
hostname | 查看主机名称 | ||
hostname 主机名 | 临时修改主机名称 | hostname myhost | |
cat/etc/sysconfig/i18n | 查看系统语言 |
CentOS6
修改主机名称:vi /etc/sysconfig/network
修改:HOSTNAME=hadoop100
备注:修改是不起作用的,要reoot机器重启才会启用,重启网络也是没有用的
CentOS7
vi /etc/hostname
#先删除,只保留下面内容
hadoop-senior01-levi.com
Linux6.x系统防火墙
命令 | 描述 | 备注 | 示例 |
service iptables status | 查看防火墙状态 | ||
service iptables stop | 临时关闭防火墙 | ||
service iptables start | 临时关闭的开启 | ||
chkconfig iptables --list | 查看防火墙状态列表 | 0系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动 1单用户工作状态,root权限,用于系统维护,禁止远程登录 2多用户状态,没有NFS 3完全的多用户状态,有NFS,登录后进入控制台命令行模式 4系统未使用,保留 5控制台,登录后进入图形GUI 6系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动 | |
chkconfig iptables off | 关闭防火墙 | ||
chkconfig iptables on | 启动防火墙 |
Linux7.x系统防火墙
命令 | 描述 | 备注 | 示例 |
firewall-cmd --state | 查看防火墙的状态 | ||
iptables -L | 查看防火墙的状态 | ||
systemctl stop firewalld.service | 关闭防火墙 | 但是开机之后还会启动防火墙 | |
systemctl restart firewalld.service | 重启防火墙 | ||
systemctl start firewalld.service | 启动防火墙 | ||
firewall-cmd --reload | 重新加载防火墙配置 | ||
systemctl disable firewalld.service | 禁止firewall开机启动 | ||
cat /etc/sysconfig/iptables-config | 查看防火墙配置 | ||
firewall-cmd --permanent --zone=public --add-port=端口号/tcp | 放通某个端口 | ||
firewall-cmd --permanent --zone=public --remove-port=端口号/tcp | 移除规则 | ||
firewall-cmd --permanent --zone=public --add-port=端口号-端口号/tcp | 放通某个端口段 | ||
firewall-cmd --zone=public --list-ports | 查看所有放通的端口 | ||
firewall-cmd --list-all | 查看防火墙的配置 | ||
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=IP地址 accept' | 放通某个IP访问 | ||
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address=IP地址 accept' | 移除规则 | ||
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=IP地址/掩码数 accept' | 放通某个IP段访问 | ||
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=IP地址 drop' | 禁止某个IP访问 | ||
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=IP地址 port protocol=协议 port=端口 accept' | 放通某个IP访问某个端口 |
防火墙文件
修改防火墙文件,关闭防火墙值为disabled
vi /etc/sysconfig/seliunx
SELINUX=disabled
命令 | 描述 | 备注 | 示例 |
sync | 将内存的数据同步到磁盘中 | 养成关机和重启都操作一次是最好 | |
shutdown [选项] 时间 | 关机或重启 | shutdown -h now #马上关机 shutdown -r now #马上重启 shutdown -r 1 "描述信息" #一分钟后重启 | |
halt | 直接关机 | 等于shutdown -h now 和 power off | |
reboot | 重启 | 等于shutdow -r now |
快捷键 | 描述 | 备注 | 示例 |
ctrl + c | 停止进程或退出进程 | ||
ctrl + l | 清屏 | ||
ctrl + q | 退出 | ||
ctrl + alt | Liunx和windows之间切换 | ||
tab | 自动补全 | ||
上下键 | 最近执行的命令 |
命令 | 描述 | 备注 | 示例 |
pwd | 显示当前目录绝对路径 | ||
ls | 列出目录内容 | -a 全部文件,包括隐藏文件 -d 列出目录本身 -l 长数据串列出,包括文件属性与权限,这个可写成ll | ls -a ls -al ll |
mkdir 文件夹名称 | 创建空文件夹 | -p 创建多层目录 | mkdir dirname mkdir -p f/s/t |
ln | 文件或文件夹链接 | -s 软链接 硬链接:当原文件删除时,任然可以独立自由使用 软链接:当原文件删除时,就无法使用 | touch test.sh vi test.sh #!/bin/bash ls ln -s test.sh testm.sh ln test.sh testh.sh chmod 777 test.sh testh.sh testm.sh ./testm.sh ./testh.sh rm -rf test.sh ./testh.sh ./testm.sh |
cd | 切换目录 | cd 切换目录 cd 绝对路径 #切换到当前这个文件夹下 cd 相对路径 #切换到文件夹内的文件夹 cd ~或cd #回到用户的家目录,即当前用户主目录 cd - #回到上一次的目录 cd .. 回到当前目录的上一级目录 cd -P 跳转到实际的物理目录,例如:软连接的文件夹 | cd /home |
cp | 复制文件或目录 | cp source dest #复制 原 目的地 cp -r source dest #复制(递归) 原 目的地 | cp test.txt test2.txt |
rm | 删除文件或目录 | -r 递归 -f 强制删除 -i 询问是否删除 | rm -rf #强制递归删除文件夹
|
mv | 移动文件与目录或重命名 | mv 原文件/文件夹名 新名(当前目录不可重名) mv 被移动 移动地址 | mv test.txt test2.txt mv test.txt /home |
cat | 查看文件内容 | cat 文件名 cat -n 文件名 #显示行号 cat -A #显示特殊符号,便于查询BUG,空行,看不见特殊字符等等 cat -b 列出行号,仅对非空白行做行号显示,空白行不标行号 cat -E #将结尾的空行以$显示 cat -T #将[tab]按键以^| 显示出来 cat -v #列出一些看不见的特殊字符 备注:-T和-v都包含到-A | cat -b - A -n #显示行号也显示符号 写法1:cat -nAbE string2.txt
|
tac | 查看文件内容 | 是cat的反写,就是倒着看,从结尾行开始看 | tac test.txt |
more | 查看更多文件内容,一页一页展示 | 空白键[space]:向下翻一页 Enter:向下翻一行 q:表示离开more,不在显示该文件内容,几乎所有q都代表离开,部分特殊的不说 ctrl+F:向下滚动一屏 ctrl+B:返回上一屏 =:输出当前行的行号 :f :输出文件名和当前行的行号 | more test.txt |
less | 查看文件内容 | 作用和more类似,不同的是允许使用[pageup]和[pagedown]往回滚动 [pagedown]:向下翻一页 [pageup]:向上翻一页 /字符串:向下搜索 ?字符串:向上搜索 q: 离开less | less test.txt |
head | 查看文件内容头几行 | -n 查看前几行 | head -n 10 文件名 #查看文件前几行 |
tail | 查看文件内容,查看尾几行,很多时候查看日志都是查看后几行 | -f追踪文件变化,日志不断打印的时候,不断的监控追加的日志 | tail -f 文件名 |
命令 | 描述 | 备注 | 示例 |
grep | 将结果内搜索字符串匹配的行并输出 | grep + 参数 + 查找内容 + 源文件 -l 不区分大小写(使用单字符) -h 查询多文件时不显示文件名 -l 查询多文件时只输出包含匹配字符的文件名 -n 显示匹配行和行号 -s 不显示不存在或无匹配文本的错误信息 -v 显示不包含匹配文本的所有行 | ls -l | grep ll.txt #将查询结果过滤出ll.txt这个文件 ls -l | grep -n ll.txt # 将查询结果过滤出ll.txt这个文件,并显示行号 |
命令 | 描述 | 备注 | 示例 |
| | 管道,将一个命令输出传送给另一个命令,管道可以连接多个文件 | ls -l /etc | grep init #过滤这个查询出来的文件 ps -ef | grep tomcat #查询出所有的进程信息,并且过滤出tomcat | |
&& | 逻辑与 | 第一个命令成功,就执行第二个命令成功 | ls && pwd #执行成功 lss && pwd #执行失败 |
|| | 逻辑或 | 第一个命令不成功,或执行第二个命令 | ls || pwd lss || pwd |
> | 输出重定向 > 输出结果覆盖文件 >> 输出结果在文件后追加 | Shell对每一个进程预先定义了3个文件描述字,0,1,2 0标准输入,1标准输出,2标准错误输出 | ll /usr > /home/test.log #会把ll的结果输出到这个文件中,会把内容给覆盖,将>换成>>才会追加 lls /usr 2> /home/test.log #错误重定向,将执行错误日志信息放到指定的log日志中 |
< | 结果输入重定向 < 输出结果覆盖文件 << 输出结果在文件后追加 | Shell对每一个进程预先定义了3个文件描述字,0,1,2 0标准输入,1标准输出,2标准错误输出 | wall < /test/x.log |
命令 | 描述 | 备注 | 示例 |
history | 显示当前账号敲过的命令历史 |
命令 | 描述 | 备注 | 示例 |
date [OPTION]...[+FORMAT] | 时间 | date #显示当前日期、时间 date "+%Y-%m-%d %H:%M%:S" #按照年月日,时分秒显示 date -d "next day" #明天的日期 date -d "yesterday" #昨天的日期 date -d "next week" #下周 date -d "next monday" #下周一 date -s "2018-06-30 11:45:45" #设置日期 | |
cal | 查看日历 | cal #查看日历 cal -3 #最近三个月 cal 2017 #显示年的日历 |
同步时区:
1、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可
2、拷贝该时区文件,覆盖系统本地时区配置
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#重启后无效
sudo date -s '2016-04-20 11:22:33'
#永久
hwclock -w
#查看时区
timedatectl
命令 | 描述 | 备注 | 示例 |
fdisk | 查看分区 | -l 查看分区详情,在root权限下才能知晓 | fdisk -l #查看分区详情,在root权限下才能知晓 |
命令 | 描述 | 备注 | 示例 |
man | 帮助命令,获取命令的帮助文件,如何使用等 | q 是退出 | man ls |
命令 –help | 查看命令选项用法 |
命令 | 描述 | 备注 | 示例 |
find [搜索范围] [搜索条件] | 查找文件或目录 | -name 按照文件名查找 -size 按照文件大小查找 -type 按照文件类型查找(f二进制文件、l链接文件、d是目录) find 也可以用逻辑与和逻辑或 -a 逻辑与 or 逻辑或 -exec是连接其他一起 | find /home -name "*.txt" #查询home目录下的所有文件,后缀是.txt find /home -user root *.txt #所有者的是root的用户,且后缀是.txt find /home -size +10 #查找大于10个字节的文件 find /home -size -10 #查找小于10个字节的 逻辑与和逻辑或 find /opt -size -10 -a -name "*.txt" #逻辑与 find /opt -size -10 -or -name "*.txt" #逻辑或 find /opt -type d #查找文件类型是文件夹的 find /opt -type f -exec rm -rf {} ; #查找出这个目录下的文件,全部删除,,{}是结果数据 |
which | 搜索命令执行位置 | 在liunx中一般有两种命令,一种是所有用户可以使用,一种是只允许管理员使用, | which ls #搜索这个命令在哪里 |
whereis | 搜索命令执行位置 | 比which显示的更多 | whereis ls #搜索这个命令相关文件 |
命令 | 描述 | 备注 | 示例 |
ps | 查看系统中所有进程 | ps -aux #查看所有进程 ps -aux | grep 3121 #过滤结果是3121 | |
top | 查看进程状态 | -d 秒数 #几秒刷新一次 -i #使top不显示任何闲置或僵死进程 -p 进程PID #通过指定监控进程ID来仅仅监控某个进程状态 -s #使top命令在安全模式中运行,这将除去交互命令所带来的潜在风险 进入top之后 P 以CPU使用率排序,默认就是此 M 以内存使用率排序 N 以PID排序 | top -d 1 #1秒刷新一次 |
pstree | 查看进程树 | -u 显示进程所属者 -p 显示进程的进程号 | pstree -u #显示进程所属者 pstree -p #显示进程的进程号 |
kill | 终止进程 | kill -9 进程号 #删除进程 |
ps结果解释图
top结果图
命令 | 描述 | 备注 | 示例 |
gzip | 压缩的时候不保留原文件,只压缩单个文件,不能压缩目录和多个文件 | gzip test.txt gzip test.txt test1.txt | |
gunzip | 解压缩文件,不保留压缩的源文件 | gunzip 已压缩的文件.gz | |
zip 选项[-r] [压缩后的文件名称] [源文件[可多个]] | zip是windows和liunx通用的格式,可以压缩文件和目录,压缩的时候需要选项-r | zip test.zip test | |
unzip | 解压缩文件 | -d 表示文件解压后的存放路径 | Unzip test.zip |
tar [zcvf] [zxvf] | .gz.tar是tar的解压缩文件 [zcvf] 压缩 [zxvf] 解压 | tar [zcvf] [zxvf] 打包文件名称.tar.gz 源文件 -c 产生打包文件(必) -x 产生解压缩文件(必) -v 显示详细信息 -f 指定压缩后的文件名 -z 打包同时压缩 最后 -C 路径,表示文件解压后存放的路径 | tar -zcvf xxx.tar.gz 文件 文件夹 #压缩 tar -xvf xxx.tar.gz -C 路径 #解压缩 |
命令 | 描述 | 备注 | 示例 |
cat /etc/group | 查 | 创建的用户默认就会有一个组,组名就一样,所以在删除用户的时候,是删除不了,要先删除用户组 | |
groupadd | 增 | groupadd 组名 #创建组 | |
groupdel | 删 | groupdel 组名 | |
groupmod | 改 | groupmod -n 新名 旧名 |
命令 | 描述 | 备注 | 示例 |
useradd | 增 | useradd test #添加用户 | |
id | 判断用户是否存在 | id test #查看用户是否存在 | |
su | 切换登录用户 | 三种方式: #切换到root,环境变量和工作空间都是当前用户(levi) su #环境变量和工作空间都是当前用户(levi),当前用户变量会覆盖系统变量,优先级 su root #工作空间和环境变量切换到root su - root | su test #切换账号 |
userdel | 删 | userdel 用户名 #删除用户,但保存用户主目录,否则在重新useradd的时候会发现提示Creating mailbox file: File exists文件已存在 -r删除用户与用户主目录 | userdel test #删除用户,会发现删除不了,因为没有权限 su root #切换到root userdel test # 会发现删除不了,在使用中 exit #退出,会回到test账号,在exit,回到root,才会退出test |
usermod | 改 | usermod -g 用户组 用户名 #修改用户组名 | |
who | 当前登录用户 | ||
who am i | 登录用户的用户名 | ||
whoami | 显示当前用户 |
普通账号设置root权限
修改/etc/sudoers文件,
找到
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
用户名 ALL=(ALL) ALL
修改完,切换用户,就可以获得root权限
文件信息详解
权限,rwx读,写,执行。
三个为一组,-表示没有这个权限
总共有三组,第一组,当前用户权限,第二组,用户组权限,第三组,其他用户权限
例如:
-rw-r--r--. 1 root root 0 6月 30 10:48 duanyu.txt
drw-rx-r--. 2 root root 0 6月 30 10:48 test
第一位:-
-:表示文件
d:表示文件夹
第2-4位:rw-
当前用户权限:r读、w写、x执行;-无权限
第5-7位:r--
用户组权限:r读、w写、x执行;-无权限
第8-10位:r--
其他用户权限:r读、w写、x执行;-无权限
1、2等数字:文件表示硬链接数,文件夹则表示内有的文件,包括隐藏文件,ls -al 就可以看,会有其中关联的上一级目录,会作为隐藏文件
文件拥有者:用户名,谁创建就是谁的
文件用户组:文件创建人的组
创建时间
文件名/文件夹名称
备注:文件夹的w权限表示用户可以删除和里面的文件,而其他用户那一栏的文件的w权限,表示不能删除,能够修改,除非有文件夹的w权限
命令 | 描述 | 备注 | 示例 |
chmod {ugo[a](+-=)(rwx)} 文件/目录 | 设置权限 | u:用户栏 g:组栏 o:其他栏 加权限就是+ 减权限就是- | chmod u+x 文件名#修改权限,添加权限 chmod g-w 文件名 #取消写权限 chmod a+x 文件名 #a表示所有 |
chmod (421) 文件/目录 | 设置权限 | 421对应rwx | chmod 777 #所有都有,第一个7是用户栏,第二个、第三个都是如此 |
chown | 设置所有者 | 那样就只能用这个账户操作了,一般在公司获取到权限的话,就会有一个属于你这个账号的地址 | chown 最终用户 文件或目录 #修改所有者 chown 用户:用户组 文件名 #修改用户和用户组 |
chgrp | 修改所有组 | chgrp 最终组 文件名 #修改所有组 | |
命令 | 描述 | 备注 | 示例 |
echo “hello” | 打印 | -e 执行特殊字符,如t、n | echo -e "hellotworld" echo $HOME |
用户信息文件:/etc/passwd
密码文件:/etc/shadow
用户配置文件:/etc/login.defs /etc/default/useradd
新用户信息文件:/etc/skel
用户组文件:/etc/group
用户组密码文件:/etc/gshadow
用户变量:~/.bashrc
Liunx下的用户一般分为三种:
超级用户root(UID=0)
一般来说UID为0的用户就是超级用户,但一般来说root的权限特别的大,很多Liunx操作系统命令不考虑root
普通用户(UID 500 - 600)
普通用户则按照UID=500开始默认递增
伪用户(UID 1 - 499)
伪用户一般是Liunx系统和进程服务相关的,如:bin、shutdown等,任何的Liunx系统都会有这些伪用户,比如关机操作,其实就调用了一个系统的伪用户身份,在Liunx系统里任何一个进程操作都必须有一个用户身份,伪用户一般无法登陆系统
命令 | 描述 | 备注 | 示例 |
crondtab [选项] | 定时任务 | -e 编辑crontab定时任务 -l 查询crontab任务 -r 删除当前用户所有crontab任务 |
* * * * *
第一个:一个小时的第几分钟 0 - 59
第二个:一天中的第几个小时 0 - 23
第三个:一个月中第几天 1 - 31
第四个:一年中第几月 1 - 12
第五个:一周当中星期几 0 - 7(0和7都代表星期天)
特殊字符
* #任何时间
, #不连续时间,如:0 8,12 * * * *,表示每天8点,12点都执行一次命令
- #时间范围,如:0 5 * * 1-6,表示在周一到周六凌晨5点0分执行
*/n #代表每隔多久执行一次,如:*/10 * * * *,表示每隔10分钟执行一次
特定时间执行命令
45 22 * * * 命令(cd /) #在22点45分执行命令
0 0 1,15 * 1 命令 #每个月1号和15号,或每周一执行这个命令
命令:
进入编辑:crondtab -e
*/1 * * * * echo "helloworld" >> /home/log.txt
备注:service crond start #开启是否有启动
tail -f log.txt #追踪
RPM软件包(RedHat Package Manager)类似windows里面的setup.exe是liunx这系列操作系统的打包安装工具,是RedHat的标志,但是理念是通用的。
实际中很少用,因为装之前需要很多依赖,一般也是用yum。
学过Java的,可以RPM理解为搭建一个SSM框架的maven
YUM可以理解为SpringBoot在maven的使用
名称格式
Apache-1.3.23-11.i386.rpm
Apache 软件名称
1.3.23-11 版本号,主版本和此版本
i386 软件运行的硬件平台
rpm 文件扩展名,代表RPM包
命令 | 描述 | 备注 | 示例 |
rpm | RPM包安装 | -i 安装 -v 显示详细信息 -h 进度条 -nodeps 不检测依赖进度 | rpm -qa #查询系统所有rpm的安装软件 rpm -qa | grep fire #查询并过滤结果 rpm -e 名称 #卸载,通过rpm -qa可查询出来名称 |
YUM(Yellow dog Updater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端包管理器,基于RPM包管理,能够从指定服务器自定下载RPM包并且安装,可以自动处理依赖关系,并且一次性安装所有依赖的软件包,无需繁琐的一次次下载、安装。
学过Java的,可以RPM理解为搭建一个SSM框架的maven
YUM可以理解为SpringBoot在maven的使用
基本常用命令:
yum install -y httpd 安装httpd并确认安装
yum list 列出所有可用的package和package组
yum clean all 清楚所有缓冲数据
yum deplist httpd 列出一个包所有依赖包
ymb remove httpd 删除httpd
安装树
yum install -y tree
YUM原理,有一台YUM服务器,存放了要安装的RPM包,本地的服务器有一个配置文件,指定要到哪里,查找相应的RPM包
所以前提本机要联网(局域网/互联网,取决服务器在哪里)
案例:
1.mirrors.163.com/.help/centos.html
下载repo文件
2.mv *.repo文件 /etc/yum.repos.d/
移动到这
3.先备份后,将CentOS-BASE-163.repo 改为 CentOS-BASE.repo 那样系统才会自动识别文件
yum makecache #加载下载
修改/etc/sudoers文件,
找到
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
用户名 ALL=(ALL) ALL
修改完,切换用户,就可以获得root权限
配置文件:vi /etc/hosts
例如:
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
Win10:C:WindowsSystem32Driversetc
CentOS6
vi /etc/sysconfig/network-scripts/ifcfg-eth0
改:ONBOOT=yes
改(默认动态DHCP):BOOTPROTO=static
添加(配置IP地址):IPADDR=192.169.1.100
添加(配置网关):GATEWAY=192.168.1.2
添加(DNS服务器):DNS1=192.168.1.2
备注:
1、记得重启网络:service network restart
2、如果是克隆出来的机器,要修改网卡信息
vi /etc/udev/rules.d/70-persistent-net.rules
#1、将PCI device 0x8086下的这行代码干掉,因为这个是克隆
#2、将第二个PCI device 0x8086下的行尾改为eth0
#3、复制ATTR后的""内的信息,因为这个才是当前本机的网卡的物理IP地址
CentOS7
vi /etc/sysconfig/network-scripts/ifcfg-ens数字
#修改
BOOTRPORT=static
#删除UUID,这个是网卡标识,如果克隆的时候出现一样就很尴尬了
IPADDR=192.168.1.20
GAETWAY=192.168.1.2
NETMASK=255.255.255.0
#发给物理机
DNS1=192.168.1.2
DNS2=0.0.0.0
CentOS7
#查看
cat /etc/inittab
#执行关闭桌面命令,重启后生效
systemctl set-default multi-user.target
#执行命令带界面,重启后生效
systemctl set-default graphical.target
命令无法补全:
首先要确保网络畅通,因为该过程要通过网络下载相关的软件包。
在 root 用户下,使用
cd ~/Downloads
命令进入下载文件夹,然后依次输入如下三个命令:
wget http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
sudo rpm -ivh epel-release-6-8.noarch.rpm
sudo yum install -y bash-completion
一切正常的话,就可以使用Tab键自动补全功能了。 如果该功能没有实现,那么就推出命令行然后再重新打开终端。 或者重启系统以启动该软件。
sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。
严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略,并能把输入输出写入日志。
如:sudo rm -rf 文件/文件夹
sudo命令使用的时候不需要输入密码:
在 /etc/sudoers文件改一下
用户名 权限 命令
username ALL=(ALL) NOPASSWD: ALL
username NOPASSWD: ALL
scp是实现服务器之间的数据传输、拷贝,而且可以实现不跟本机有关系,操作远程主机和别的机器进行数据传输、拷贝。
#1、传输一个文件到hadoop103服务器,由test用户接收,传到/opt/test这个目录下,前提是要先配置/etc/hosts
touch scp.txt
scp -r scp.txt test@hadoop103:/opt/test
#2、控制hadoop103服务器,将scp.txt文件传输到hadoop104服务器
scp -r test@hadoop103:/opt/test/scp.txt test@hadoop104:/opt/test
#会发现执行这条命令是需要输入密码的
ssh 目标地址
#不需要执行密码的配置
cd ~
ls -al
cd .ssh
ssh-keygen -t rsa
#最好自身给自身服务器也配置一个,那么在运行类似hadoop这样的应用时,不会出现运行不了等错误。
ssh-copy-id 目标地址
加密命令:ssh-keygen -p
输入密码
登录:ssh 用户名@服务器地址 -p 端口号
输入密码
#ssh-agent用于管理 ssh private keys,主要是对解密的私钥进行高速缓存。
#ssh-add 提示并将用户使用的私钥添加到 ssh-agent 维护列表中
命令:ssh-add -l
命令:ssh-agent
登录:ssh 用户名@服务器地址 -p 端口号
rsync远程同步工具,主要用于备份和镜像,具有速度快,避免复制相同内容和支持符号连接的优点
#将本地/opt/software/rsyncdir/下的所有目录和文件都复制到目标地址的/opt/software
sudo rsync -rvl /opt/software/rsyncdir/ test@目标地址:/opt/software
tsv格式:字段直接用制表符(t)分割
示例:name age
Mike,22
csv格式:字段直接用逗号(,)分割
示例:name age
Mike 22
1、make的安装,要注意查看作者写的make文件(卸载命令常见的clean/uninstall),这个文件内的卸载是怎么样的,卸载时,要注意安装的用户是哪个,卸载就切换到那个用户
2、ulimit -n 查看允许最大进程数,调整到最大
3、ulimit -u 查看允许打开最大文件数,调整到最大
4、所有的程序进程号、路径、命令都要记录到文档,特别是分布式、集群的环境。
5、集群的所有服务器时间统一
6、启动服务要作为守护程序则加上&
如: bin/kafka-server-start.shconfig/server.properties &
在操作Liunx的时候,我们希望这些命令可以作为一个整体逻辑来运行时,没有办法,因为Liunx是你敲一个命令就执行了,要么就通过&&和||来实现,但是复杂的逻辑是没有办法的实现的,而Shell就是提供了各种语法,让我们可以去实现需求。
Shell是一个命令行解释器,它为用户提供了一个向Liunx内核发送请求以便运行程序的界面系统程序,用户可以使用Shell来启动、挂起、停止,甚至编写程序。
Shell还是一个功能强大的编程语言,易编程、易调试、灵活性强,Shell是解释执行的脚本语言,在Shell中可以调用Liunx命令。
文件后缀都是.sh
脚本开头都是:#!/bin/bash
vi helloworld01.sh
#!/bin/bash
echo -e "hellotworld"
echo "hello t world"
:wq!
chmod 777 helloworld01.sh #先赋予执行权限
./ helloworld01.sh
sh ./helloworld01.sh
sh helloworld01.sh
bash ./helloworld01.sh
bash helloworld01.sh
sh /opt /helloworld01.sh
sh -x /opt /helloworld01.sh #追踪每一行脚本代码执行结果
Liunx中的变量分为系统变量和自定义变量,在系统下可以使用set查看
如:set | grep 变量名
系统变量:$HOME、$USER等
运行:echo $HOME
定义变量:TEST=100
获取变量:echo $TEST
销毁变量:unset TEST
定义静态变量:readonly TESTR=100 #定义静态变量的时候要慎重,因为撤销不了(unset)
1.字符、数字、下划线组成,不能用数字开头
2.等号两侧不可以有空格
3.变量名称一般习惯为大写
4.双引号仅将格脱意,但特殊字符会转义如:输出为;单引号将特殊字符脱意(脱意:不起作用,原封不动的输出)
如:
NUM=100
echo '$NUM' #单引号是直接输出 = $ NUM'
echo "$NUM" #双引号是命令引用输出 = 变量
A=`ls -al` 等价 A=$((ls -al))
echo $A
基本语法:
export 变量名=变量值 #设置环境变量的值,export表示全局
source 配置文件#重启后生效
echo $变量名 #查询变量值
$n #n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十个参数以上的参数需要用大括号包含,如:${10}
$* #表示命令行中所有的参数,$*把所有参数看成一个整体
$@ #这个变量也代表命令行中的所有参数,不过$@把每个参数区分对待
$# #代表命令行中所有参数的个数
$$ #显示当前进程的进程号
$! #后台最后一个进程的进程号
$? #最后一次执行命令的返回状态,如果为0就是正确执行,非0则是非正确执行
vi helloworld01.sh
#!/bin/bash
echo -e "hellotworld"
echo "hello t world"
echo "===$$"
vi param02.sh
#!/bin/bash
echo "$0"
echo "$1"
echo "$*"
echo "$@"
echo "$#"
echo "-------------------------------"
echo "$$"
./helloworld01.sh
echo "$!"
echo "$?"
#赋予权限
chmod 777 helloworld01.sh
chmod 777 param02.sh
#执行
./param02.sh 111
$((5+3)) 或 $[(2+3)*5]
如:
A=$((2+3)) 或 A=$[2+3]
echo “$A”
expr m + n
expr m - n
/*,/,% #乘、除、取余
备注:默认保持先算乘除后加减,如果需要优先运算则需要加命令替换符
也可以对变量进行运算操作
案例:2+3*4
$[(2+3)*4]
expr `expr 2 + 3` * 4
test命令可以对文件、字符串进行测试是否有问题,一般配合控制语句(if、else)使用,不应该单独使用
例如:
test str1=str2
test 1 -eq 2
= 字符串比较
le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
-f 是否是文件
-e 是否存在
-d 是否是一个目录
if[ 条件表达式 ];then
程序
fi
if [ 条件判断式 ]
then
程序
fi
#!/bin/bash
echo "----------------------------"
if [ -d param02.sh ]
then
echo "文件夹"
echo
elif [ -f param02.sh ]
then
echo "文件"
fi
echo "----------------------------"
read in
if [ $in -eq 2 ]
then
echo "2"
else
echo "不等于2"
fi
echo "---------------------"
if [ $1 -gt 66 ]
then
echo "66"
elif [ $2 -ne 2 ]
then
echo "2"
else
echo "ndfdfe"
fi
echo "----------------------------"
if [ $1 -gt 55 -a $2 -gt 77 ]
then
echo "逻辑与"
elif [ $1 -eq 20 -o $2 -eq 30 ]
then
echo "逻辑或"
fi
#执行,其他执行参考这个
./if03.sh 1 2
case $变量名 in "值1")
echo "exe1"
;;
"值2")
echo "exe2"
;;
*)
echo "exeN"
;;
esac
#!/bin/bash
read in
case $in in 66)
echo "exe66"
;;
77)
echo "exe77"
;;
*)
echo "N"
;;
esac
for 变量 in 值1 值2 值3
do
程序
done
for((初始值;循环控制条件;变量变化))
do
程序
done
#!/bin/bash
for var in 1 2 3 4 5 6 7
do
echo "number $var"
done
echo "--------------------"
for i in "$*"
do
echo "* $i"
done
echo "---------------"
for j in "$@"
do
echo "@区分对待 $j"
done
echo "----------- 语法二"
for ((i=0; i < 100; i++))
do
s=$[$s+$i]
if [ $i -eq 5 ]
then
echo "$i"
fi
done
echo "s = $s"
select 变量 in 列表
do
cmd
done
#!/bin/bash
select var in "java" "c++" "php"
do
break
done
echo "选择:$var"
while [ 条件 ]
do
命令
done
#!/bin/bash
in=1
while [ $in -le 66 ]
do
sum=$[$sum+$in]
in=`expr $in + 1`
done
echo "$in"
echo "$sum"
basename [pathname] [suffix]
basename /opt/test/for1.sh #显示文件名称,显示for1.sh
dirname [pathname]
dirname /opt/test/for1.sh #显示文件夹路径,结果为/opt/test
[function] funname[()]
{
Action;
[return int;]
}
调用函数:funname
注意:
1、必须在调用函数的地方之前先声明
2、函数返回值,只能通过$?系统变量获得,可以显示加;return 返回,如果不加将最后一条命令运行结果,作为返回值。return 后跟数值n(0-255)
#!/bin/bash
function sum(){
result=0
result=$[$1 + $2]
echo "$result"
}
read -p "请输入:" in1
read -p "请输入:" in2
sum $in1 $in2
最新评论