Linux是我多年的心结,主要是因为工作中没有接触过,作为一个程序员,真的是奇葩,在我心里,Linux,有一种神秘感,总觉得熟练掌握Linux的都是大神,遥想当年,2019年11月份,我与公司的另一个资深员工(大概10年工作经验)去贵州出差,现场主要是Linux服务器操作,我是一脸蒙蔽,人家噼里啪啦一顿操作,搞定,我在一旁只能是羡慕嫉妒恨,也有另一种心情,因为不会,没活一身轻。
上个月,公司终于有Linux的需求了,但我还是不会,只能抓瞎,边学边整,最后迷迷糊糊的搞定了,有惊无险,学习是痛苦的,但,学会了,就真香了,今天我将我学习Linux的过程和心得分享给大家,和大家一起揭开Linux的神秘面纱。
Linux,全称GNU/Linux,是一种免费使用和自由传播的的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。
Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。
Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,甚至当作网络防火墙,这是Linux的一大亮点。
Linux具有开放源码、没有版权、技术社区用户多等特点,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。
centos7.6: https://vault.centos.org/7.6.1810/isos/x86_64/
vm15.5.1: https://www.nocmd.com/windows/740.html
具体的安装步骤,自行百度吧!当你看到这个页面,恭喜你,Linux安装成功了!
桥接模式表示虚拟机与主机在同一网段下,也就相当于局域网,如果IP地址为192.168.100.129,那么网段就是192.168.100,也就是说虚拟机ip最多会有255个,这样就有了局限性,容易造成IP冲突。
虚拟机中是独立的网络,通过代理与主机互通,不会造成IP冲突。
只有本机能用的虚拟机,不建议使用。
(1)NAT网络配置
(2)配置网关192.168.2
(3)设计主机名和hosts映射
修改文件在/etc/hostname指定
Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。
Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还有丰富的外观配色方案以及样式选择。
Xftp是一个功能强大的SFTP、FTP 文件传输软件。使用了 Xftp 以后,MS Windows 用户能安全地在 UNIX/LINUX和 Windows PC 之间传输文件。Xftp 能同时适应初级用户和高级用户的需要。它采用了标准的 Windows 风格的向导,它简单的界面能与其他 Windows 应用程序紧密地协同工作,此外它还为高级用户提供了众多强劲的功能特性。
https://www.netsarang.com/en/free-for-home-school/
(1)vim基本编辑保存步骤
vim data.txt:打开或创建data.txt文件,进入一般模式
输入i进入编辑模式,并进行文本编辑
按esc,输入:,①wq保存并退出,②q不保存退出,③q!不保存并强制退出
(2)vi和vim快捷键(都在一般模式下)
拷贝当前行yy,拷贝当前行向下的3行3yy,粘贴p
删除当前行dd,删除当前行下3行3dd
文件中查找某关键字:/关键字
设置文件行号:set nu,取消文件行号:set nonu
一般模式下,到最后一行G,到第一行gg
撤销u
定位到第20行,输入20,在输入shift+g
(3)模式切换
(4)vi和vim快捷键大全
(1)关机、重启
shutdown -h now | 立刻进行关机 |
shutdown -h 1 | 1分钟后关机 |
shutdown -r now | 重启 |
halt | 关机 |
reboot | 重启 |
sync | 把内存的数据同步到磁盘 |
注意:
(2)登录与注销
一般不用系统管理员登录,实际中都用一般用户登录,然后可以通过命令切换到管理员权限,
切换系统管理员:su - root
注销:logout
指令 | 描述 | 备注 |
useradd 用户名 | 添加用户 | useradd -d /home/test king |
passwd 用户名 | 更改密码 | |
pwd | 显示当前所在目录 | |
userdel 用户名 | 删除用户 | |
userdel -r 用户名 | 删除用户并删除对应的home目录 | |
id 用户名 | 查询用户信息 | |
su - 切换用户名 | 切换用户 | |
exit或logout | 返回原用户 | |
who am i | 显示登陆的信息 |
指令 | 描述 | 备注 |
groupadd 组名 | 新增组 | |
groupdel 组名 | 删除组 | 如果创建用户时,没有创建组,系统就会默认创建一个组,组名和用户名一致。 |
useradd -g 用户组 用户名 | 新增用户时直接加上组 |
(1)指定运行级别
(2)查看
查看当前运行级别:systemctl get-default
指定用户默认运行级别:system set-default multi-user.target
3:多用户级别,multi-user.target
5:图形化界面级别,graphical.target
指令 | 描述 | 备注 |
man | 获取帮助信息 | 例如:查看ls命令的帮助信息man ls 在Linux下,隐藏文件是以.开头,选项可以组合使用,比如ls -al,比如ls -al /root |
help | 获取shell内置命令的帮助信息 |
指令 | 描述 | 备注 |
pwd | 显示当前工作目录的绝对路径 | |
ls | 显示当前目录下文件 | |
ls -lh | 显示目录下文件的详细信息(将文件大小由字节变为k,M,G) | |
cd~ | 回到自己的家目录 | |
cd.. | 到上级目录 | |
mkdir | 创建目录 | 默认只能创建一级目录,创建多级目录:mkdir -p /home/animal/tiger |
rmdir | 删除目录 | |
touch | 创建空文件 | |
cd source dest | 拷贝指令cp | |
cd -r source dest | 递归复制整个文件夹 | |
rm | 删除目录 | -r:递归删除整个文件夹,-f:强制删除不提示; |
mv oldNameFile newNameFile | 重命名 | |
mv /temp/movefile /targetFolder | 移动文件 | |
less | 分屏查看文件内容 | |
echo | 输出内容到控制台 | |
head | 显示文件的开头部分内容 | 显示文件的前五行 head -n 5 |
tail | 显示文件的尾部内容 | |
> | 输出重定向 | |
>> | 内容追加 | 列表的内容写入文件中:ls -l > 文件 列表的内容追加到文件的尾部:ls -al >> 文件 将文件1的内容覆盖到文件2:cat 文件1 > 文件2 echo "内容" >> 文件 |
ln | 软链接,也成符号链接,类似于Windows里的快捷方式 | ln -s [原文件或目录][软链接名],例如:ln -s /root/ myroot |
history | 查看已经执行过的历史命令 | 1、显示所有的历史命令:history 2、显示最近使用过的10条指令:history 10 3、执行历史编号为5的指令:!5 |
指令 | 描述 | 备注 |
date | 显示当前时间 | |
date + %Y | 显示当前年份 | |
date + %m | 显示当前月份 | |
date + %d | 显示当前是哪一天 | |
date + "%Y-%m-%d %H:%M:%S" | 显示年月时分秒 | |
date -s 字符串时间 | 设置系统当前时间 | date -s "2021-04-11 15:46:00" |
cal | 日历指令 | 显示本月日历 |
cal 2021 | 日历指令 | 显示2021年日历
|
指令 | 描述 | 备注 |
find | 将从指定目录向下递归遍历其子目录,将满足条件的文件或目录显示在终端。 | 基本语法:find [搜索范围][选项] 例子: 1、find /home -name hello.txt 2、find /opt -user jack 分页显示:find /home -user jack | more 3、查找整个Linux下大于200M的文件 find / -size +200M |
locate | 快速定位文件路径 | 需先执行updatedb创建locate数据库 |
which | 查看某个指令在哪个目录下 | 例如:which ls |
grep | 过滤查找 | 基本语法:grep [选项] 查找内容 源文件 选项:-n 显示行号;-i 忽略大小写 例如: 1、cat /home/hello.txt |grep "yes" 2、grep -n "yes" /home/helo.txt |
| | 管道 |
指令 | 描述 | 备注 | ||||||||||||
zip | 压缩文件 | -r:递归压缩;-d:指定压缩文件的存放目录 例如:zip -r myhome.zip /home/ |
||||||||||||
unzip | 解压文件 | 例如:unzip -d /opt/temp /home/myhome.zip | ||||||||||||
tar | 压缩和解压文件 | 基本语法:tar [选项] xxx.tar.gz 打包的内容 选项说明:
例如: 1、将/home的文件夹压缩成myhome.tar.gz tar -zcvf myhome.tar.gz /home/ 2、解压myhome.tar.gz到opt/tmp目录下 (1)mkdir opt/tmp (2)tar -zxvf /home/myhome.tar.gz -C /opt/tmp |
查看:ls -ahl
修改文件所有者:chown 用户名 文件名
创建组:groupadd 组名
创建一个用户tom,并将其放入moster组中
useradd -g monster tom
ls -l中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
指令 | 描述 |
r | 读read |
w | 写write |
x | 可被执行 |
0-9位说明
(1)第0位确定文件类型(d,-,l,c,b)
指令 | 描述 |
b | 表示块设备,比如硬盘 |
d | 表示目录,相当于Windows的文件夹 |
c | 表示字符设备文件,比如键盘鼠标 |
l | 表示链接,相当于Windows的快捷方式 |
- | 表示普通文件 |
(2)第1-3位确定所有者的权限
(3)第4-6位表示所在组对该文件的权限
(4)第7-9位表示其他用户对该文件的权限
通过chmode指令,可以修改文件或目录的权限
(1)+,-,= 变更权限
u:所有者
q:所在组
o:其它人
a: 所有人
chmod u=rwx,g=rx,o=x 文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名
(2)通过数字变更权限
r=4 w=2 x=1 rwx = 4+2+1=7
chmod u=rwx,g=rx,o=x 文件/目录名 相当于 chmod 751文件名
基本介绍
chown newowner 文件/目录名 改变所有者
chown newowner:newgroup 文件/目录名 改变所有者和所在组
-R 如果是目录 则使其下所有子文件或目录递归生效
例如:
(1)请将/home/abc.txt文件的所有者修改为tom
chown tom /home/abc.txt
(2)请将/home下所有文件的所有者修改为tom
chown -R tom /home
-chgrp newgroup 文件/目录 改变所在组
警察和土匪游戏
police,bandit
Jack,Jerry:警察
zs,ls:土匪
(1)创建组
groupadd police;groupadd bandit
(2)创建用户
useradd -g police jack;
useradd -g police jerry;
useradd -g bandit zs;
useradd -g bandit ls;
(3)jack创建一个文件,自己可以读写,本组人可以读,其它组没任何权限
vim jack.txt;
chmod u=rwx,g=rx,o=x jack.txt
(4)jack修改该文件,让其他组人可以读,本组人可以读写
chmod o=r,g=r jack.txt
(5)zs投靠警察,看看是否可以读写
usermod -g police zs
(6)测试,看看zs是否可以读写,ls是否可以
(1)、简介
crondtab进行定时任务的设置
基本语法:crontab [选项]
常用选项:
-e | 编辑crondtab定时任务 |
-l | 查询crondtab任务 |
-r | 删除当前用户所有的crondtab任务 |
crond相关指令:
(2)、举例说明
*/1 * * * * ls -l /etc/ > /tmp/to.txt
定时每分钟执行,将etc的ls内容重定向到tmp下to.txt文件中。
项目 | 含义 |
第一个* | 一小时中的第几分钟 |
第二个* | 一天中的第几小时 |
第三个* | 一个月中的第几天 |
第四个* | 一年中的第几月 |
第五个* | 一周中的星期几 |
特殊符号:
特殊字符 | 含义 |
* | 代表时间,比如第一个*,代表每小时中的每分钟都执行一次 |
, | 代表不连续的时间,比如0 8,12,16 * * * 代表每天的8点0分,12点0分,16点0分都执行一次 |
- | 代表连续的时间范围,比如0 5 * * 1-6 代表在周一到周六的凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次,比如*/10 * * * * 代表每隔十分钟执行一遍命令 |
(3)应用实例
*/1 * * * * date >> /tmp/mydate.txt
步骤:
vim /home/my.sh 写入内容 date >> /home/mydate 和 cal >> /home/mydate
给my.sh增加执行权限,chmod u+x /home/my.sh
crontab -e 增加 */1 * * * * /home/my.sh
指令:mysqldump -u root -p密码 数据库 > /home/db.bak
crontab -e
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
(4)at定时任务
at [选项][时间]
Ctrl + D 结束at命令的输入
(1)进程号
在Linux中,每个执行的程序都称为一个进程,每一个进程都会分配一个ID号(pid,进程号)。
(2)ps指令
显示系统执行的进程
属性:
-a:显示当前终端的所有进程信息
-u:以用户的格式显示进程信息
-x:显示后台进程运行的参数
分页显示:ps -aux | more
过滤显示:ps -aux | grep sshd
(3)ps显示信息详解
USER:用户名称
PID:进程号
%CPU:进程占用CPU的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TT:终端名称,缩写
STAT:进程状态(S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等)
STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
(4)终止进程
kill和killall
基本语法:
kill [选项] 进程号(功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
常用选项:-9 表示强制停止进程。
(5)查看进程树
pstree [选项],可以更加直观的查看进程信息
常用选项:
-p:显示进程的pid
-u:显示进程的所属用户
(1)简介
服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如mysql、sshd、防火墙等,因此我们又称之为守护进程,是Linux中非常重要的知识点。
(2)service管理指令
service 服务名[start | stop | restart | reload | status]
在centos7.0后,很多服务不再使用service,而是使用systemctl
service指令管理的服务在/etc/init.d查看
(3)chkconfig指令
通过chkconfig可以给服务的各个运行级别设置自启动/关闭。
基本语法:
chkconfig --list [| grep xxx]
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off
(4)systemctl指令
基本语法:
systemctl [start | stop | restart | reload | status] 服务名
systemctl指令管理的服务在/us/lib/systemd/system查看
systemctl设置服务的自启动状态
systemctl list-unit-files [|grep 服务名](查看服务开机启动状态,grep可以进行过滤)
systemctl enable 服务名(设置服务开机启动)
systemctl disable 服务名(关闭服务开机启动)
systemctl is-enabled 服务名(查询某个服务示范是自启动的)
应用案例:
查看当前防火墙的状况,关闭防火墙和重启防火墙。
systemctl status firewalld;
systemctl stop firewalld;
systemctl start firewalld;
(5)firewall指令
打开端口:firewall-cmd --permanent --add-port=端口号/协议
关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
重新载入,才能生效:firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port=端口号/协议
1、分区命令:fdisk /dev/sdb
2、磁盘情况查询
基本语法:df -h
3、磁盘情况实用指令
(1)jdk下载路径
(2)mkdir /opt/jdk
(3)通过xftp7上传jdk到 /opt/jdk下
(4)解压tar -zxvf jdk-8u144-linux-x64.tar.gz
(5)mkdir /usr/local/java
(6)mv /opt/jdk/jdk1.8.0_144 /usr/local/java
(7)配置环境变量的配置文件 vim /etc/profile
(8)source /etc/profile 使配置文件生效
(9)输出hello Linux
(1)下载Tomcat
(2)mkdir /opt/tomcat
(3)通过xftp7上传jdk到 /opt/tomcat下
(4)解压tar -zxvf apache-tomcat-8.5.65.tar.gz
(5)启动tomcat
(6)访问浏览器无效
(7)将8080端口加入到Linux防火墙,开放8080端口
(8)浏览器访问8080
(9)编写一个简单的html文件,并在浏览器访问
(1)新建文件夹/opt/mysql
(2)下载MySQL安装包
运行wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
(3)运行tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
友好提示:Linux中可以在输入长的存在的字符串时按键盘左侧tab键补全。
(4)Linux下安装MySQL必须卸载centos自带的mariadb数据库
(5)开始安装MySQL
依次运行以下几条,顺序不能乱:
(6)启动MySQL
systemctl start mysqld.service
(7)测试MySQL
create database gooReey;
use gooReey;
create table user(id int, name varchar(50), password varchar(50), sex int, address varchar(500));
insert into user(id, name, password, sex, address) values (1, 'gooReey', '123456', 1, 'dalian');
select * from user;
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
(1)脚本格式要求
(2)用Shell脚本输出hello shell
(1)Shell变量简介
Linux Shell中的变量分为系统变量和用户自定义变量。
系统变量:$HOME、$PWD、$SHELL、$USER等,比如echo $HOME
显示当前shell中所有变量:set
(2)shell变量的定义
定义变量:变量名=值
撤销变量:unset 变量
声明静态变量:readonly变量,注意,不能unset
变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
等号两侧不能有空格
变量名称一般习惯为大写,这是一个规范,遵守即可。
NAME=`date`反引号,运行里面的命令,并将结果赋给变量NAME
NAME=$(date)等价于反引号
(1)需求分析
(2)代码实例
往期精彩内容:
Java知识体系总结(2021版)
Java多线程基础知识总结
【全栈最全Java框架总结】SSH、SSM、Springboot
超详细的springBoot学习笔记
常见数据结构与算法整理总结
Java设计模式:23种设计模式全面解析
Java面试题总结(附答案)