齐爷学Linux
一、Linux概述
1.常见操作系统
Windows、Unix 、Linux、Chrome OS、Android、iOS、HarmonyOS
Windows不开源且不免费,不安全,经常中病毒。
Linux开源且安全,Tomcat服务器可以安装到Linux上,部署web项目。
2.虚拟机环境
在创建虚拟机时,网络连接模式有桥接模式和NAT模式,应该根据个人实际需求来选择。
桥接模式:虚拟机会直接接入宿主机网络中,相当于虚拟机相当于网络中的一个普通计算机,有自己的ip地址和MAC地址,可以访问网络上其他的设备。适用于需要虚拟机与宿主机处于同一网段的场景,如测试、网络应用开发等。
NAT模式:虚拟机通过虚拟化的NAT网络与宿主机连接,宿主机向虚拟机提供网络访问能力,虚拟机之间不能相互访问。NAT模式适用于虚拟机需要访问外部网络,但只有一个公共IP地址的情况下使用。
总之,根据个人实际需求来选择适合自己的网络连接模式,有需要虚拟机与宿主机处于同一网段的情况选桥接模式,有需要虚拟机访问外部网络的情况选NAT模式。
查看ip
ifconfig
3.Xshell
Xshell是一款用于在本地计算机上远程连接到服务器,并进行命令操作,文件管理等功能的SSH客户端软件。
可以在Windows操作系统中,通过Xhell远程连接并操作Linux操作系统。
4.Xftp
Xftp是一款功能强大的Windows环境下的FTP客户端软件,用于在本地计算机与远程FTP服务器之间进行文件传输。
二、磁盘和文件管理
1.磁盘管理
Windows和Linux磁盘管理的区别
windows分盘管理。
Linux的文档以树的形式组织,Linux操作系统有一个根文件夹,叫做 / 。
常用目录
/bin目录:包含一些常用的二进制可执行文件,如cat、ls、mkdir、rm等。这些二进制文件在系统运行时始终可用,可以被任何用户运行。
/etc目录:包含了系统的大多数配置文件,如网络配置、用户登录信息、软件包安装配置等。大多数应用程序在安装后都会在这个目录下创建自己的子目录,以便存储自己的配置文件。
/home目录:包含Linux系统用户的家目录,每个用户的数据和个人文件都存放在这里。
/lib目录:包含一些共享库文件,应用程序可以通过这些共享库文件调用系统的功能,如libc.so,是C语言函数库的共享库。
/root目录:是系统管理者(超级用户)的家目录。
/tmp目录:是系统中的一个临时目录,所有用户都可以在这里创建临时文件,文件系统会定期清空该目录,以防止文件滞留。
/usr目录:包含系统启动后,所有用户能访问的应用程序和数据文件。
/var 目录:包含可变数据的文件。包括日志、数据库、Web服务器、邮件队列等文件。它是一个经常被修改的目录,如果在其他目录有可变数据的话,它们都应当被链接到 /var 中
pwd命令
查看当前所在的位置。
pwd
man命令和--help参数
man命令可以查看某个命令的具体用法。空格翻页,q退出。
man pwd
--help参数也可以查看一个命令的帮助,一次性全部列出。
touch --help
clear清屏命令
作用就是清屏~
clear
ls命令
1.ls命令就是list的意思,可以查看当前文件的子文件及子目录,不包含隐藏文件
ls
隐藏文件:所有隐藏文件的文件名都以 . 开始。例如:.myfile .qiye
2.ls -a命令(意思为list all),查看当前文件的子文件及子目录,且包含隐藏文件
ls -a
3.ls -l命令(list long format),查看当前文件的子文件及子目录,且长格式显示
ls -l
简写为ll
ll
4. ls -al命令,查看当前文件的子文件及子目录,且包含隐藏文件并长格式显示。
ls -al
简写ll -a
ll -a
ll -a还可以指定目录
ll -a /home
cd命令
cd命令可以改变当前目录。
/开头为绝对路径,否则为相对路径。
回到主目录
cd ~
回到上级目录
cd ..
回到根目录
cd /
2.文件管理
1.mkdir新建目录
mkdir abc
mkdir -p建立多级目录,y为确认,n为取消
mkdir -p a/b/c
2.touch新建文件
可以同时新建多个文件
touch Hello.java a.txt
3.rm删除文件
rm 文件名,可以同时删除多个文件
rm a.txt
rm -f 强制删除,无需确认
rm -f b.txt
4.rm -r删除目录
rm -r 目录名
rm -r abc
5.cp文件拷贝
cp file1 file2 将file1拷贝到路径file2。
6.cp -rf file1 file2目录拷贝
r递归 f强制拷贝
cp -rf a b
7.mv移动
mv file1 x 把file1移动到x目录下
8.文件搜索
find命令 查找文件
find 路径 -name 名字 按名字查找文件
find /root -name "Qiye.java"
whereis命令
在系统中搜索指定的命令的位置。
whereis ls
which命令
使用which命令也可以在系统中搜索指定的命令的位置。
which ls
9.文件的inode号
每一个文件都有一个唯一的inode号。
在ls文件时添加-i即可查看inode号
ll -i
3.软链接与硬链接
软链接
软链接类似于windows操作系统中的快捷方式。作用:方便操作,便捷。
软链接和它的快捷方式是两个不同的文件(inode号不同)。
添加软链接:ln -s 目标文件 快捷方式
给hello.java文件创建一个hello2.java的快捷方式(软链接)
ln -s HelloWorld.java HelloWorld.java2
硬链接
硬链接和目标文件实际上是同一个文件(inode号相同),修改其中一个,另一个也会改变。
添加硬链接:ln 目标文件 硬链接位置
ln HelloWorld.java HelloWorld.java2
作用:备份,目标文件和硬链接只要有一个存在,目标文件就还在。
4.tar文件压缩与解压
tar命令:tar 参数 要压缩或解压的文件或目录
压缩后的文件也成为归档文件。
tar命令的常用参数:
- z:指定是否使用gzip压缩方式压缩。(扩展名通常为:tar.gz。特点:速度最快)
- j:是否需要用 bzip2 压缩方式压缩。(扩展名通常为:tar.bz2。特点:体积最小)
- c:创建压缩(create)
- x:解压缩
- v:是否在压缩的过程中显示文件
- f:指定归档文件名(file)。f参数后面必须紧跟文件名,不能在f参数后面再加其他参数。
- t:查看 tarfile 里面的文件
- C:指定解压到的具体目录。注意是大写C。
注意:c、x、t,这三个参数不能共存,只能出现一个。
压缩
压缩一个文件
tar -zcvf mytxt.tar.gz log1.txt
压缩多个文件
tar -zcvf mytxt2.tar.gz log1.txt log2.txt log3.txt
tar -zcvf mytxt3.tar.gz *.txt
压缩目录 将test目录压缩为mytxt4.tar.gz
tar -zcvf mytxt4.tar.gz test
查看归档文件
tar -tf mytxt.tar.gz
解压
解压到当前目录下
tar -zxvf mytxt.tar.gz
将mytxt.tar.gz压缩包解压到test目录
tar -zxvf mytxt.tar.gz -C test
5.vi和vim编辑器
vim是vi的增强版,有语法高亮、对齐、插件支持等功能。
CentOS将vim的执行也命名为vi,所以在CentOS中使用vi和vim是一样的。
1.使用
vi/vim 文件名 打开文件
2.编辑文件
第一个模式:命令行模式。(此时键入的都是命令)
第二个模式:编辑模式。(此时键入的内容都会写入文件)
进入vi编辑器时是命令模式:键入i命令进入编辑模式
从编辑模式回到命令模式:按一下esc键
3.保存
在命令模式下,输入以下命令:
:wq 这个命令可以保存并退出。
:q! 这个命令可以强行退出vi编辑器,并且不保存。
6. vi编辑器常用命令
dd:删除光标所在行
yy:复制光标所在行到缓冲区
p:粘贴缓冲区中的内容
gg:光标回到文件第一行
GG:光标回到文件最后一行
^ :光标移动至当前行的行首
$ :光标移动至当前行的行尾
/关键字:按斜杠/键,可以输入想搜索的字符,然后确定进行搜索,如果第一次查找的关键字不是想要的,可以一直按 n 键往后查找到想要的关键字为止
o命令:在下一行插入。
x命令:命令行模式下,x命令会删除单个字符。
a命令:在光标后面插入。
7. nano编辑器(了解)
nano编辑器相对于vi编辑器来说出现的较晚,nano编辑器更加简单一些。
以下是nano常用的快捷键,这些快捷键多数是无法在windows环境下使用的,也就是说在xshell中无法使用,因为和windows很多快捷键是冲突的,只在linux环境中可以用:
- 打开文件:nano Test.java
- 保存文件:ctrl + o
- 退出nano:ctrl + x
- 选中多个字符:shift + 左方向/右方向
- 剪切:ctrl + k
- 粘贴:ctrl + u
- 搜索:ctrl + w
- 替换:ctrl + \
- 复制选中的:alt + 6
- 撤销:alt + u
- 重做:alt + e
三、系统命令
1.时间和su sudo
1.系统当前时间 date命令
date
2.切换用户 su 用户名
su felix
3.普通用户以root的身份执行命令 sudo 命令
2.打印输出 echo命令
输出字符串
输出变量
输出多行
支持特殊字符
3.文本文件排序并打印 sort命令
按照字典顺序排序(数字也是)
升序
sort a.txt
降序
sort -r a.txt
数字要求按照大小排序 -n
sort -n a.txt
4.比较两个文件的不同 diff命令
diff 文件1 文件2
5.重定向
1.输出重定向
命令的执行结果不打印到控制台上,让它改变输出方向,例如输出到文件/其他设备中。这就是输出重定向。
覆盖原文件方式:输出命令 > 重定向目标位置
追加方式:输出命令 >> 重定向目标位置
2.输入重定向(了解)
< 将文件内容输入给命令,是一种默认的行为,可以省略。
以下两行命令是相同的含义
sort -n < a.txt
sort -n a.txt
<< 模拟接收用户键盘的输入
命令 << 结束标记
6.在某段内容中搜索 grep命令
grep 搜索的内容 文本文件
搜索单个文件
递归搜索 -r
grep -r f dir
-n 输出行号 -i 忽略大小写 -v 找出不匹配的行 -E 使用正则表达式匹配
-B n 展现前n行 -A n 展现后n行 -C n 展现前和后n行
7.管道 |
将前面命令的输出作为后面命令的输入,可以叠加。
搜索带txt的文件
8.查看系统进程 ps
-e 当前所有线程
-f 显示UID,PPID,STIME信息
UID:进程是哪个用户发起的。
PID:进程的id。
PPID:父进程的id。
C:CPU占用百分比。
STIME:进程启动的时间。
TTY:进程是哪个终端启动的。
TIME:进程运行多久了。
CMD:该进程对应的命令。
ps -ef
筛选带su的进程
9.sleep命令(了解)
在一段时间内暂停程序的执行。
默认单位为秒,m分钟,h小时,d天
sleep 3
sleep 1m
sleep 2h
sleep 1d
10.杀死进程 kill命令
kill 进程号
kill -9 进程号 强行杀死进程
杀死让程序休眠一天的进程:
11. &符号
在后台运行命令。
例如:
sleep 10d &
12.top命令
实时动态的,查看进程并把系统中耗费资源多的进程显示在前面。
top
q:退出top命令。
僵尸进程 (Zombie Process) 是指一个已经执行结束的进程,但其进程描述符仍然留在进程列表中,它不再执行任何其他操作,但仍然占用一定内存空间。我们应杀死僵尸进程。
交换分区(Swap),也称虚拟存储器,是一种在计算机内存不足时,为了增加内存所采用的一种技术。当系统内存不足时,操作系统会把暂时不需要的内存数据和程序信息通过交换机制存储到硬盘上的交换分区中,以节省内存的使用,从而保证共享内存的进程正常运行。
13.free和uptime命令(了解)
free:显示物理内存和交换分区的使用情况。
free
uptime:显示系统运行时间。
uptime
14.df和du命令
df命令:(disk free)磁盘空间使用情况。
df
应该重点关注以上红框中的内容,已用空间超过80%则需要重点注意,以防磁盘已满导致数据无法写入而丢失。
du命令:显示文件或目录占用的磁盘空间大小。
15.重启和关机
重启:reboot命令
reboot
关机:shutdown -h now 或 poweroff
shutdown -h now
命令会向系统发送信号,通知所有正在运行的进程停止运行,并保存当前的状态,然后关闭系统。通常会在关机前向所有用户发送通知消息。
poweroff
命令相较于 shutdown -h now
更为强制,它会立即关闭系统电源,不会等待正在运行的进程结束。使用 poweroff
命令时需要特别小心,因为它可能会丢失尚未保存的数据。
shutdown -h now更友好。
16.查看ip信息 ifconfig命令
ifconfig
17.查看两台计算机是否能通讯 ping命令
windows也有这个命令。
ping ip地址/域名 ctrl c停止
ping www.baidu.com
18.模拟浏览器行为 curl命令(了解)
curl命令:模拟用户访问,模拟浏览器行为。
可以用来测试编写的web服务接口。
只有一个终端,没有浏览器时可以使用该命令。
curl www.baidu.com
curl
命令的常用选项如下:
-i
:显示响应头信息。-I
:只显示响应头信息,不显示响应体。-X
:设置请求方法,包括 GET、POST、PUT、DELETE 等。-d
:设置请求体数据(POST 请求)。-H
:设置请求头信息。-o/-O
:下载文件,并保存到本地。-u
:设置认证信息。-A
:设置 User-Agent。-s
:静默模式,不输出进度信息。
19.wget命令
下载资源。
wget 资源路径
20.查看网络连接状态及端口 netstat命令
使用netstat命令,开发人员可以快速了解当前系统上的所有网络连接,包括正在监听的端口、建立的连接、连接状态等信息。这对于排查网络问题和监控系统状态非常有用。另外,netstat还可以用于检查网络安全,例如查看哪些端口正在被占用,是否有不安全的连接等。
netstat -a 查看所有网络连接
netstat -an 查看所有网络连接且显示数字形式的url
四个状态
LISTENING 状态:表示该端口已占用,正在监听,等待客户端的连接。
CONNECTED状态:表示网络连接已建立,但并没有开始数据传输。
ESTABLISHED 状态:表示网络已连接,数据正在传输中。
TIME_WAIT 状态:表示连接已经被终止,在双方都完成数据传输后,该连接会进入`TIME_WAIT`状态,并等待一段时间后关闭。
四、文件内容查看
1.cat命令
cat [选项]... [文件]...
常用选项:
-n, 对输出的所有行编号
-b, 对输出的所有行编号(不含空白行)
-t, 将制表符(tab)显示为^I
-e, 在每行结束处显示"$"
-s, 当连续空白行数量大于1时,合并为1个空白行
cat是一次性展现,所以仅适合展现小文件。
清空文件内容:
cat /dev/null > HelloWorld.java
2.more命令
more命令和cat命令的相同点和不同点:
相同点:more和cat在开始读取文件的时候,都是一次性的将文件全部内容装载到缓存中。
不同点:cat是一次性的全部输出打印。more可以进行部分打印(一屏一屏的打印)。
用法:
more [选项] <文件>...常用选项:
-<number> 每个屏幕的行数
+<number> 从行号开始显示文件
+/<pattern> 从匹配的位置前两行开始显示内容
-p 以清除原内容的方式进行翻页。
常用操作:
回车键 【显示下一行】
空格键 【显示下一页】
ctrl + b 【显示上一页】
= 【显示行号】
:f 【显示文件名的同时显示行号】
q 【退出more命令】
3.less命令
less功能相较于cat和more更加强大。是Linux正宗的查看文件的命令。
less有搜索功能。
less [选项] 文件
常用选项:
-g 只标志当前搜索到的关键词所在行
-I 忽略搜索时的大小写(注意:是大写I)
-m 显示类似more命令的百分比
-N 显示每行的行号
+num 从第num行开始显示常用操作:
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)y 向前滚动一行
回车键 向后滚动一行u 向前滚动半页
d 向后滚动半页b 向前翻一页
空格键 向后翻一页g 移动到第一行
G 移动到最后一行= 显示详细信息(第几行,共多少行,内容的字节数量等)
v 使用vim编辑器进行编辑
q 退出less 命令
[pagedown] 向下翻动一页
[pageup] 向上翻动一页
less命令标记兴趣点
在感兴趣的位置添加标记:
- 先按m键 (set mark)
- 输入标记名称,例如标记名字为:x
需要回到感兴趣的位置时:
- 先按 ' 键 (goto mark)
- 输入标记名称 x
less命令实时监控文件动态变化
第一步:在窗口1中执行:less +F log.txt
第二步:在窗口2中执行:ps -ef >> log.txt
注意:在监控的过程中,按 ctrl + c是终止监控,可以继续使用less命令的相关操作。按大写F,再次进入监控模式。
注意:log.txt是一个文件名。只有机器自动写入或通过输出重定向写入的才可以被监控。
4.head命令
head 显示文件头部内容
-c 输出前几个字符 -n 指定行数(默认为10 ) -q 不显示包含给定文件名的文件头
5.tail命令
tail 显示文件末尾内容
参数和head类似, -f 随文件增长即时输出新增数据
tail a.txt
tail -3 a.txt
tail -n 3 a.txt
6.nl命令
可以显示行号。
- nl -b a 所有行添加行号,包括空白行;
- nl -b t 给行添加行号,不包括空白行(默认行为,和直接使用 nl 一样效果);
- nl -n ln 行号在自己栏位左侧显示;
- nl -n rn 行号在自己栏位的右侧显示 ;
- nl -n rz 显示行号,行号栏位不满时,自动补0 ;
- nl -w 行号栏位的占用的位数。
7.tailf
tailf:如果文件不增长,它不会去访问磁盘文件。tailf特别适合那些便携机上跟踪日志文件,因为减少了磁盘访问,所以它能省电。
tailf是一个C语言程序。
/* tailf.c -- tail a log file and then follow it
* Created: Tue Jan 9 15:49:21 1996 by faith@acm.org
* Copyright 1996, 2003 Rickard E. Faith (faith@acm.org)
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* less -F and tail -f cause a disk access every five seconds. This
* program avoids this problem by waiting for the file size to change.
* Hence, the file is not accessed, and the access time does not need to be
* flushed back to disk. This is sort of a "stealth" tail.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <malloc.h>
#include <sys/stat.h>
//#include "nls.h"
#define _(s) s
static size_t filesize(const char *filename)
{
struct stat sb;
if (!stat(filename, &sb)) return sb.st_size;
return 0;
}
static void tailf(const char *filename, int lines)
{
char **buffer;
int head = 0;
int tail = 0;
FILE *str;
int i;
if (!(str = fopen(filename, "r"))) {
fprintf(stderr, _("Cannot open \"%s\" for read\n"), filename);
perror("");
exit(1);
}
buffer = malloc(lines * sizeof(*buffer));
for (i = 0; i < lines; i++) buffer[i] = malloc(BUFSIZ + 1);
while (fgets(buffer[tail], BUFSIZ, str)) {
if (++tail >= lines) {
tail = 0;
head = 1;
}
}
if (head) {
for (i = tail; i < lines; i++) fputs(buffer[i], stdout);
for (i = 0; i < tail; i++) fputs(buffer[i], stdout);
} else {
for (i = head; i < tail; i++) fputs(buffer[i], stdout);
}
fflush(stdout);
for (i = 0; i < lines; i++) free(buffer[i]);
free(buffer);
}
int main(int argc, char **argv)
{
char buffer[BUFSIZ];
size_t osize, nsize;
FILE *str;
const char *filename;
int count;
//setlocale(LC_ALL, "");
//bindtextdomain(PACKAGE, LOCALEDIR);
//textdomain(PACKAGE);
if (argc != 2) {
fprintf(stderr, _("Usage: tailf logfile\n"));
exit(1);
}
filename = argv[1];
tailf(filename, 10);
for (osize = filesize(filename);;) {
nsize = filesize(filename);
if (nsize != osize) {
if (!(str = fopen(filename, "r"))) {
fprintf(stderr, _("Cannot open \"%s\" for read\n"), filename);
perror(argv[0]);
exit(1);
}
if (!fseek(str, osize, SEEK_SET))
while ((count = fread(buffer, 1, sizeof(buffer), str)) > 0)
fwrite(buffer, 1, count, stdout);
fflush(stdout);
fclose(str);
osize = nsize;
}
usleep(250000); /* 250mS */
}
return 0;
}
编译
gcc -o /usr/bin/tailf tailf.c
五、Linux用户管理
- 用户组的管理
- 用户的管理
- 为用户主目录之外的目录授权
1.用户组的管理
查看用户组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。
涉及用户组的添加、修改和删除,实际上就是对/etc/group文件的更新。
查看系统的用户组
cat /etc/group
每一个用户组四部分组成:组名:密码标识:GID:该用户组中的用户列表
groups [用户名] 查看用户属于哪个组,不写用户名时是查看当前用户
groups
groups root
添加用户组
groupadd [选项] 组名
-g 可以指定新用户组的GID
groupadd -g 8888888 manbo
修改和删除用户组
修改
groupmod [选项] 新GID/新组名 原组名
-g为修改GID -n为修改名字
groupmod -g 101 manbo
groupmod -n manboo manbo
删除
groupdel 组名
groupdel manboo
2.用户管理
添加用户
添加用户就是在系统中创建一个新账号,然后为新账号分配用户组、主目录等资源。
语法:useradd [选项] 用户名
- -d 指定新用户的主目录
- -g 指定新用户属于哪个组(主组)
- -G 可以给新用户添加附加组
默认的组名:和自己用户名一样 默认的主目录:/home/用户名
useradd zhangsan
删除用户
userdel -r 用户名
-r的用处是连同目录的主目录一起删除
userdel -r zhangsan
设置密码
passwd 用户名
查看系统中的用户
cat /etc/passwd
存放密码的位置(这里的密码加密了)
cat /etc/shadow
切换用户就是 su 之前已经使用过了。
修改用户
usermod [选项] 用户名
- -d 指定新用户的主目录
- -g 指定新用户属于哪个组(主组)
- -G 可以给新用户添加附加组
- -l 指定新的用户名(小写的L)
- -L 锁定用户
- -U 解锁用户
usermod -l zhangliang zhangsan
3.为用户主目录之外的目录授权
第一步:创建目录
mkdir /java
第二步:给目录授权
R表示递归设置权限,该目录下所有的子目录以及子文件
775 - 7 文件拥有者的权限 7 同组人员的权限 5 其他组成员的权限
7代表 读、写、执行 5代表 读、执行
4 读 2 写 1 执行
chmod -R 775 /java
第三步:创建组
groupadd dev
第四步:把目录赋予组
chgrp -R dev /java
第五步:创建用户
useradd xiaoming
第六步:设置密码
passwd xiaoming
第七步:给用户添加附加组
usermod -G dev xiaoming
六、文件权限
1.概述
linux中,可执行文件的拓展名为.sh。
读 r 写 w 执行 x
- 文件拥有者(User,简称U):该文件的创建人
- 同组用户(Group,简称G):和创建人在同一组的用户
- 其他组用户(Other,简称O):和创建人不在同一组的用户
这就是非常著名的UGO模型。也就是说一个文件的权限包括三组:
- 第一组U:我们可以给文件的创建者设置rwx权限。
- 第二组G:我们可以给文件创建者的同组人员设置rwx权限。
- 第三组O:我们可以给和文件创建者不在同一组的人员设置rwx权限。
2.查看文件权限
ls -l 即可
Linux中文件的类型有7种:
- - 代表普通文件
- d 代表目录
- l 代表链接(软链接:快捷方式)
- b 块设备(硬盘,软盘等存储设备)
- c 字符设备(通常以字节流的方式访问)
- p 管道文件(主要用于进程间通讯)
- s 套接字文件(主要用于网络通讯)
3.基于UGO设置文件权限
chmod命令
给同组人员添加读和写,其他人员添加读的权限。
chmod g+rw o+w dev.java
同组人员删除写的权限。
chmod g-w dev.java
chgrp 组名 文件名 给文件更改所在组
chgrp dev test.java
4.基于421设置文件权限
4读2写1执行。 读是写的前提。
chmod 三个数字 文件名
chmod 755 dev.java
chmod 700 manbo.java
5.chown修改文件拥有者
可以使用chown命令来修改指定文件或目录的拥有者和所属组。
语法:chown [选项] [所有者][:[所属组]] 文件
-R 递归修改,包括子目录和子文件
chown -R root:root manbo.java
七、软件的安装和卸载
1.安装方式概述
源码安装、rpm安装(二进制安装)、yum安装(在线安装)
源码安装
源码包是指C等语言所开发的源代码文件的一个压缩包,通常压缩为.tar.gz或.tar.bz2。源码通常需要编译器将其编译成二进制文件,如gcc编译器。
优点:
(1)开源,有能力者可以修改源代码;特别是要对某个软件,从头开发时,就特别需要对源码进行解读分析。
(2)可自由选择所需功能;
(3)卸载方便,直接删除目录即可。
(4)对于学习者而言,源码安装更有利于学习者发现软件环境和工具之间所依赖的关系。
缺点:
(1)安装麻烦,需要自行解决工具之间的依赖关系。
(2)某些软件编译过程耗费的时间较长。
(3)大型软件编译,对新手来说较为麻烦,所报错误往往超过所能解决的范围,排错过程有可能会把系统给搞崩溃。
rpm安装
RPM包:由Red Hat公司开发的包管理系统,软件包文件后缀是".rpm"。
DPKG包:由Debian Linux开发出来的包管理机制,主要应用在Debian和Unbuntu系统中。软件包文件后缀是".deb"。
优点:
(1)包安装与管理简单,往往仅通过几个命令即可实现包的安装、升级、查询和卸载。
(2)通常安装速度要比源码安装快很多;
缺点:
(1)二进制文件,看不到源码了,修改和分析源码已不太可能。
(2)模块功能已经被定制,用户功能选择远不如源码灵活;
(3)有时也需要解决依赖性的问题,此时解决依赖性有一定的困难。
yum安装
yum软件仓库是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。
yum的关键之处是要有可靠的respository(保证能够连接互联网,还需要保证它是一个互联网上正常可用的仓库)。
它能够从指定服务器自动下载rpm包并安装。yum能够自动解决软件依赖性问题,一次性安装所有依赖的软件包。
2.yum安装与卸载的相关命令
安装命令:yum -y install 软件名
升级命令:yum -y install 软件名
升级所有软件:yum -y install
卸载命令:yum remove 软件名
列出可安装的软件包:yum list
列出已安装的软件包:yum list installed
查询某个软件包:yum list 软件名
根据关键字搜索软件包:yum search Keyword
清除缓存:yum clean all
3.JDK的安装与配置
1.从yum仓库中搜索jdk:yum search jdk
2.安装jdk:yum -y install java-17-openjdk-devel.x86_64
3.看看jdk的安装目录
which java
ls -l /usr/bin/java
ls -l /etc/alternatives/java
4.在/etc/profile文件中配置环境变量
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.6.0.10-3.el9.x86_64
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
5.生效:source /etc/profile
4.Tomcat服务器的安装与配置
1.下载并解压Tomcat
2.第三方软件一般存放在/usr/local目录下,使用mv命令tomcat移动到该目录下
mv ./apache-tomcat-10.1.8 /usr/local
3.配置环境变量
4.生效:source /etc/profile
5.启动Tomcat startup.sh
(关闭为shutdown.sh)
6.关闭防火墙
systemctl stop firewalld.service
7.通过ip地址加8080端口即可访问Tomcat网站
5.MySQL安装与配置
1.更新CentOS Stream系统上的软件包:
dnf update
dnf是yum的升级。
2.添加MySQL Yum存储库
dnf install https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm
3.导入公钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
4.安装
dnf install mysql-community-server
5.启动MySQL服务
systemctl start mysqld
6.设置MySQL开机自启
systemctl enable mysqld
7.查看root临时密码
grep 'temporary password' /var/log/mysqld.log
8.配置MySQL安全设置
mysql_secure_installation
9.登录
mysql -u root -p
!!! MySQL我设置的密码:
Javaqiye_123
6.MySQL为Java程序员创建专属的MySQL用户
1.以root身份登录。
2.创建一个新的数据库
create database oa;
3.创建一个新用户并设置密码
CREATE USER 'java_dev'@'%' IDENTIFIED BY 'java_DEV123';
4.授权
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX, REFERENCES ON oa.* TO 'java_dev'@'%';
5.刷新权限
FLUSH PRIVILEGES;
6.关闭防火墙
systemctl stop firewalld
此时我们就可以在windows的Navicat中连接数据库了。
7.WEB应用的部署
将war放到tomcat的webapps下,启动tomcat,该war包会自动解压,就可以访问了。
八、shell编程
shell:Linux操作系统内置的一种编程语言。
xxx.sh 文件叫做shell脚本。sh在windows中对应的是exe。
shell脚本比较著名的功能:自动化处理。
1.Linux系统结构
Linux结构分为内核、Shell和应用程序三个层次。
内核层
内核是Linux系统的核心部分,它负责管理系统各种硬件设备、文件系统、内存管理和进程管理等核心任务。
Shell层
Shell是Linux系统的命令行解释器,它负责将用户输入的命令解释并执行。
应用层
应用层是Linux系统上的各种应用程序和服务,包括文本编辑器、图形界面、Web服务器、邮件服务器、数据库服务器等。
2.常见的shell
Shell是一种用于与操作系统进行交互的命令行解释器。它是一种脚本语言,可以通过编写一系列的命令和脚本来执行操作系统的功能和任务。
我们在终端中编写的命令都是Shell命令。例如:ls、grep......等。
常见的shell:
1.Bourne Shell(/bin/sh):是Unix系统最早的shell程序。
2.Bourne-Again SHell(/bin/bash):是GNU项目的一部分,是Bourne Shell的增强版,目前在大部分Linux发行版中是默认的shell程序。
3.C Shell (/bin/csh):一个具有面向对象设计理念的shell程序,它采用与C语言相似的语法和控制结构。
4.TENEX C Shell(/bin/tcsh):是C Shell的增强版。
5.Korn Shell(/bin/ksh):是Bourne Shell和C Shell的结合,拥有两种不同的工作模式:交互模式和批处理模式。
6.Z Shell(/bin/zsh):是一个功能强大的shell程序,它是Bourne Shell的增强版,具有缩写、自动完成、句法高亮等功能,同时也支持Korn Shell、C Shell以及Bourne Shell的语法和命令。
每种Shell都有其特定的语法和功能,但它们通常都具有共同的基本功能,如变量操作、条件语句、循环语句和命令执行等。
查看已安装的shell
cat /etc/shells
切换shell为Bourne Shell
chsh -s /bin/sh
查看当前shell
echo $SHELL
3.shell的基础语法
1.注释
单行注释以#开头。
多行注释以 : ' 开始 ' 结束,注意-----:和‘之间有空格。
2.变量
环境变量
在/etc/profile中配置。
定义环境变量:export 变量名=变量值
shell中取环境变量的值:echo $变量名
本地变量
应用在shell会话中的。
命名规则:
- 变量名由字母、数字和下划线组成。
- 不能以数字开头。
- 区分大小写。
- 等号两侧不能有空格。
- 不能使用特殊字符作为变量名,如$, &, !, (, ), *等。
特殊/内置变量
在Shell中预定义的变量。
常见的一些特殊变量:
$0
: 当前脚本的文件名$1, $2...
: 脚本参数列表中的第1个、第2个参数等等 (例如:./first.sh abc def,在执行这个脚本时,第一个参数abc,第二个参数def。)$#
: 脚本参数的数量$*
: 所有脚本参数的列表(将所有的参数作为一个字符串:"zhangsan lisi wangwu")$@
: 所有脚本参数的列表(将每一个参数作为一个独立的字符串:"zhangsan" "lisi" "wangwu")$$
: 当前脚本的进程ID号$?
: 上一个命令的退出状态,一个数值。
3.控制语句
[]的使用
-eq
: 判断两个值是否相等(equal to),例如[ $a -eq $b ]
-ne
: 判断两个值是否不相等(not equal to),例如[ $a -ne $b ]
-lt
: 判断左边的值是否小于右边的值(less than),例如[ $a -lt $b ]
-gt
: 判断左边的值是否大于右边的值(greater than),例如[ $a -gt $b ]
-le
: 判断左边的值是否小于等于右边的值(less than or equal to),例如[ $a -le $b ]
-ge
: 判断左边的值是否大于等于右边的值(greater than or equal to),例如[ $a -ge $b ]
-f
: 判断某个文件是否存在并且是一个常规文件(regular file),例如[ -f file.txt ]
-d
: 判断某个文件是否存在并且是一个目录(directory),例如[ -d dir ]
-z
: 判断某个字符串是否为空(zero length),例如[ -z "$str" ]
-n
: 判断某个字符串是否非空(not zero length),例如[ -n "$str" ]
-e
: 判断某个文件或目录是否存在(exist),例如[ -e file.txt ]
if语句
if可以嵌套
格式:
if condition
then
command1
command2
...
elif condition2
then
command3
command4
...
else
command5
command6
...
fi
for循环
list
是一个值或者多个带有空格或换行符分隔的值组成的列表。在每一次循环迭代时,var
会被list
列表中的一个值所替换,直到list
中的所有值都被处理完为止。
for var in list
do
command1
command2
...
done
while循环
条件为假时结束。
while condition
do
command1
command2
...
done
$((...)) 被称为算术扩展运算符,做数学运算的,并且将运算结果返回。$(...)运算符会将结果直接返回。
until循环
util和while的区别是条件为真时结束。
until condition
do
command1
command2
...
done
break和continue
和其他编程语言中的break和continue一样。
4.函数
定义和调用
function greet() {
echo "Hello, $1 $2"
}
greet "John" "Doe"