Linux
Linux文件目录结构
linux操作系统采用一个文档树来组织所有的资源,这棵树的根目录的名字叫做:/
- /bin目录:存放最经常使用的命令,以二进制可执行文件形式存在,如cat、ls、mkdir、rm等。w
- /etc目录:用于存放系统的配置文件,如网络配置、用户登录信息配置等。大多数应用程序在安装后都会在这个目录下创建自己的子目录,以便存储自己的配置文件。
- /home目录:存放普通用户数据的主目录,在Linux中每个用户都有一个自己的目录,一般以账号命名
- /lib目录:包含一些共享库文件,应用程序可以通过这些共享库文件调用系统的功能,如libc.so,是C语言函数库的共享库。
- /root目录:是系统管理者(超级用户)的主目录。
- /tmp目录:是系统中的一个临时目录,所有用户都可以在这里创建临时文件,文件系统会定期清空该目录,以防止文件滞留。
- /usr目录:包含系统启动后,所有用户能访问的应用程序和数据文件。
- /var 目录:存放着不断变化的数据,我们习惯将经常被修改的内容放在这个下面,如日志文件等。
- /opt目录:存放主机额外安装的软件,如MySQL等。
Vim编辑器
纯命令行【最小化安装】没有vim编辑器,需要在联网的情况下通过以下命令安装: yum -y install vim

一般模式
以vi/vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
| 语法 | 功能描述 |
|---|---|
| yy | 复制光标当前一行 |
| y数字y | 复制一段(从第几行到第几行) |
| p | 箭头移动到目的行粘贴 |
| u | 撤销上一步 |
| dd | 删除光标当前行 |
| d数字d | 删除光标(含)后多少行 |
| x | 删除一个字母,相当于del,向后删 |
| X | 删除一个字母,相当于Backspace,向前删 |
| yw | 复制一个词 |
| dw | 删除一个词 |
| ^ | 移动到行头 |
| $ | 移动到行尾 |
| gg或者1+G | 移动到页头(第一行) |
| G | 移动到页尾(最后一行) |
| 数字+G(先输入数字,在按G) | 移动到目标行 |
编辑模式
可以编辑文件内容
1)进入编辑模式
| 按键 | 功能 |
|---|---|
| i | 当前光标前 |
| a | 当前光标后 |
| o | 当前光标行的下一行 |
| I | 光标所在行最前 |
| A | 光标所在行最后 |
| O | 当前光标行的上一行 |
2)退出编辑模式
按『Esc』键
命令模式
在一般模式当中,输入『 : / ?』3个中的任何一个按钮,就可以将光标移动到最底下一行,进入命令模式。
| 命令 | 功能 |
|---|---|
| :w | 保存 |
| :q | 退出 |
| :! | **强制执行 (:ql 强制退出) ** |
| : %s/old字符/new字符 | 批量替换 |
| / 要查找的词 | n 查找下一个,N 往上查找 |
| ? 要查找的词 | n是查找上一个,N是往下查找 |
| :set nu | 显示行号 |
| :set nonu | 关闭行号 |
| ZZ(shift+zz) :nohl | 没有修改文件直接退出,如果修改了文件保存后退 去除高亮显示 |

虚拟机配置与使用
配置虚拟机ip地址
Vmvare中配置子网IP和网关,编辑——>虚拟机网络编辑器——>设置子网IP——>NAT设置,设置网关
查看当前虚拟机IP:ifconfig命名
修改IP为静态:
一、使用vim打开如下文件 /etc/sysconfig/network-scripts/ifcfg-ens33 二、设置: BOOTPROTO=static 添加: #IP地址 IPADDR=192.168.6.100 #网关 GATEWAY=192.168.6.2 #域名解析器 DNS1=192.168.6.2 三、执行systemctl restart network命令 四、如果报错: service NetworkManager stop 关闭 NetworkManger 服务 chkconfig NetworkManager off 永久关闭 Manager网卡 service network restart 重启network网卡ping +主机/其他网址:测试是否可以进行链接
设置与修改主机名
- hostname (功能描述:查看当前服务器的主机名称)
- vim /etc/hostname (使用vim打开主机名所在文件,修改该文件可以修改主机名)
- vim /etc/hosts(使用etc打开hosts文件,添加192.168.6.100 java100,可以使用过java100代替主机IP)
服务管理
基本语法(CentOS 6)
- service 服务名 start (功能描述:开启服务)
- service 服务名 stop (功能描述:关闭服务)
- service 服务名 restart (功能描述:重新启动服务)
- service 服务名 status (功能描述:查看服务状态)
- chkconfig (功能描述:查看所有服务器自启配置)
- chkconfig 服务名 off (功能描述:关掉指定服务的自动启动)
- chkconfig 服务名 on (功能描述:开启指定服务的自动启动)
- chkconfig 服务名 --list (功能描述:查看服务开机启动状态)
<strong style="color:red;">基本语法(CentOS 7)</strong>
systemctl start 服务名 (功能描述:开启服务)
systemctl stop 服务名 (功能描述:关闭服务)
systemctl restart 服务名 (功能描述:重新启动服务)
systemctl status 服务名 (功能描述:查看服务状态)
systemctl --type service (功能描述:查看正在运行的服务)
systemctl list-unit-files (功能描述:查看所有服务器自启配置)
systemctl disable 服务名 (功能描述:关掉指定服务的自动启动)
systemctl enable 服务名 (功能描述:开启指定服务的自动启动)
systemctl is-enabled 服务名(功能描述:查看服务开机启动状态)
(1)关闭防火墙的自动启动 [root@hadoop100 桌面]#system disable firewalld.service (2)开启防火墙的自动启动 [root@hadoop100 桌面]#system enable firewalld (3)查看防火墙状态 [root@hadoop100桌面]#systemctl is-enabled firewalld
虚拟机关闭:
- sync:(功能描述:将缓冲区内的数据由内存同步到硬盘中)
- poweroff:(功能描述:关闭系统,等同于shutdown -h now)
- reboot:(功能描述:就是重启,等同于 shutdown -r now)
- shutdown:(指定时间关闭或重启)
| 选项 | 功能 |
|---|---|
| -h | -h=halt关机 |
| -r | -r=reboot重启 |
| 参数 | 功能 |
|---|---|
| now | 立刻关机 |
| 时间 | 等待多久后关机(时间单位是分钟)。 |
快照:保存虚拟机状态

克隆虚拟机
- 关闭要被克隆的虚拟机
- 进行克隆

常用基本命令
帮助命令
man
对于查看的信息,可以通过空格翻页,输入q退出
# 参数
# -f:显示给定关键字的简短描述信息
# -a:在所有的man帮助手册中搜索
# ……………………
# 数字
# 1:用户在shell环境可操作的命令或执行文件;
# 2:系统内核可调用的函数与工具等
# 可以添加参数限定查询,也可以通过数字指定要查询的man手册,但没必要深入了解,不如百度
man -f lshelp
#没必要深入了解,不如百度
#内部命令获取帮助
help cd
#外部命令获取帮助
ls --helpclear(清屏)
常用快捷键:
| 常用快捷键 | 功能 |
|---|---|
| ctrl + c | 停止进程 |
| ctrl+l | 清屏;等价命令:clear 彻底清屏:reset |
| ctrl + q | 退出 |
| 善于用tab键 | 提示(更重要的是可以防止敲错) |
| 上下键 | 查找执行过的命令 |
| ctrl +alt | linux和Windows之间切换 |
文件目录类
pwd(显示路径)
pwdls (输出目录)

| 选项 | 功能 |
|---|---|
| ls -a | 查看当前目录的全部文件名,包括隐藏文件(以 . 开头的文件) |
| ls -l(缩写ll) | 查看当前目录的文件名及详细信息 |
| ls -al(缩写ll -a) | 查看当前目录的全部文件名及详细信息,包括隐藏文件(以 . 开头的文件) |
| ll -a /home/powernode | 查看自动目录,而非当前目录 |
| ls -i | 查看当前目录下文件和inode号,每个文件都有自己的inode号,并且不会重复 |
cd(切换目录)
相对路径
- ./ :当前目录
- ../ :当前目录上级目录
| 命令 | 命令 | 功能 |
|---|---|---|
| cd 绝对路径 | cd /root/opt | 按照绝对路径解析 |
| cd 相对路径 | cd ./opt | 按照相对路径解析 |
| cd ~或者cd | 回到自己的家目录 | |
| cd - | 回到上一次所在目录 |
mkdir(创建目录)
| 命令 | 功能 |
|---|---|
| mkdir abc | 创建单层目录 |
| mkdir -p a/b/c | 创建多层目录 |
rmdir(删除空目录)
如果目录非空,则不能删除
rmdir dir/touch(创建文件)
| 命令 | 功能 |
|---|---|
| touch Hello.java | 在当前目录下新建一个文件Hello.java |
| touch a.txt b.txt c.txt | 一次性在当前目录下,新建多个文件,文件名之间采用空格分隔 |
cp(复制文件或目录)
| 命令 | 功能 |
|---|---|
| cp a.txt aa.txt | 复制当前目录下的a.txt文件,粘贴到当前目录下并且生成新文件aa.txt,也可指定绝对路径 |
| cp -rf /home/a /home/x | 复制/home/a目录到/home/x下,(-r递归拷贝,-f强行拷贝) |
rm(删除文件或目录)
| 命令 | 功能 |
|---|---|
| rm a.txt | 删除当前目录下的a.txt文件,这种方式会询问是否删除,输入y表示删除,输入n表示不删除。 |
| rm -f a.txt | 强行删除a.txt文件,不询问 |
| rm -f b.txt c.txt | 强行删除b.txt和c.txt文件 |
| rm -f *.java | 强行删除所有.java结尾的文件,模糊匹配的方式。 |
| rm -r x | 递归删除x目录,需要用户自己输入y进行确认删除 |
| rm -rf x | 递归删除x目录,且不需要确认 |
| 选项 | 功能 |
| -r | 递归删除目录中所有内容 |
| -f | 强制执行删除操作,而不提示用于进行确认。 |
| -v | 显示指令的详细执行过程 |
| -rf | 递归删除目录中所有内容 ,且不用确认 |
mv(重命名或移动文件)
| 命令 | 功能 |
|---|---|
| mv Hello.java x | 将当前目录下的Hello.java文件移动到x目录下(如果没有x目录就是重命名),也可以使用绝对路径 |
| mv a.txt aa.txt | 将a.txt重命名为aa.txt |
cat(查看文件)
cat命令会一次性将文件的完整内容全部显示出来,不适合大文件。
| 选项 | 功能 |
|---|---|
| -n | 显示所有行的行号,包括空行。 |
| -b | 显示所有行的行号,不包括空行。 |
| -s | 当连续空白行数量大于1时,合并为1个空白行 |
| -t | 将制表符(tab)显示为^I |
| -e | 在每行结束处显示"$" |
| 命令 | 功能 |
| cat -n HelloWorld.java | 查看文件,并显示行号 |
| cat a.txt b.txt | 一次查看多个文件 |
| cat a.txt b.txt > c.txt | 使用cat合并文件 |
| cat -n HelloWorld.java > HelloWorld2.java | 加上行号之后输出到另一个文件 |
| cat /dev/null > HelloWorld.java | 清空文件内容 |
more(分屏查看文件)
- 相同点:more和cat在开始读取文件的时候,都是一次性的将文件全部内容装载到缓存中。
- 不同点:cat是一次性的全部输出打印。more可以进行部分打印(一屏一屏的打印)。
| 操作 | 功能 |
|---|---|
| 空白键 (space) | 代表向下翻一页 |
| Enter | 代表向下翻一行 |
| q | 代表立刻离开 more ,不再显示该文件内容。 |
| Ctrl+F | 向下滚动一屏 |
| Ctrl+B | 返回上一屏 |
| = | 输出当前行的行号 |
| :f | 输出文件名和当前行的行号 |
| 选项 | 功能 |
| -<number> | 每个屏幕的行数 |
| +<number> | 从行号开始显示文件 |
| +/<pattern> | 从匹配的位置前两行开始显示内容 |
| -p | 以清除原内容的方式进行翻页。 |
| 命令 | 功能 |
| more +3 log.txt | 从第3行起,查看文件内容 |
| more -4 log.txt | 每屏显示4条记录 |
| more +/java log.txt | 从文件中查找"java"字符串的行 |
| ps -ef | more -5 -p | 查看进程,每5条为一屏,翻屏时清空原内容 |
less(分屏查看文件)
功能与more指令类似,但是比more指令更加强大。
| 操作 | 功能说明 |
|---|---|
| 空白键 | 向下翻动一页 |
| [pagedown](键盘上对应键) | 向下翻动一页 |
| [pageup](键盘上对应键) | 向上翻动一页 |
| g | 移动到第一行 |
| G | 移动到最后一行 |
| = | 显示详细信息(第几行,共多少行,内容的字节数量等) |
| /字串 | 向下搜寻『字串』的功能;n:向下查找;N:向上查找 |
| ?字串 | 向上搜寻『字串』的功能;n:向上查找;N:向下查找 |
| q | 离开 less 这个程序 |
| 选项 | 功能 |
| -g | 只标志当前搜索到的关键词所在行 |
| -I | 忽略搜索时的大小写(注意:是大写I) |
| -m | 显示类似more命令的百分比 |
| -N | 显示每行的行号 |
| +num | 从第num行开始显示 |
标记兴趣点
在感兴趣的位置添加标记:
- 先按m键 (set mark)
- 输入标记名称 [ a-z 的字母]
需要回到感兴趣的位置时:
- 先按 ' 键 (goto mark)
- 输入标记名称 [ a-z 的字母]
实时监控文件动态变化
只有机器自动写入或通过输出重定向写入的才可以被监控。
less +F log.txt查看多个文件
less log.txt log2.txt
- 输入:n 跳转到log2.txt
- 输入:p 跳转到log.txt
echo(输出到控制台)
| 命令 | 功能 |
|---|---|
| name="John"<br/>echo "My name is $name" | 输出变量,使用$name将会被替换,输出My name is John |
| echo "Hello, world!" | 输出字符串 |
| echo "line 1<br/>line 2<br/>line 3" | 输出多行 |
| echo -e "Line 1\nLine 2\tTable" | 可以使用转义字符 |
head(输出文件开始内容)
| 选项 | 功能 |
|---|---|
| -n 行数 | 输出开头n行 |
| -c 数字 | 输出开头前几个字符 |
| -q | 不输出文件头 |
| 命令 | 功能 |
| head -n 10 aa.txt | 查看前十行 |
| head -c 10 aa.txt | 查看前十个字符 |
| head -n 5 aa.txt a.txt | 查看多个文件前五行 |
| head -q -n 5 aa.txt | 不输出文件头 |
tail(输出文件尾部内容)
| 选项 | 功能 |
|---|---|
| -n 行数 | 输出结尾n行 |
| -c 数字 | 输出结尾后几个字符 |
| -q | 不输出文件头 |
| -f | 监控文件末尾(通过编辑器写入的不算) |
| 命令 | 功能 |
| tail -n 10 aa.txt | 查看后十行 |
| tail -c 10 aa.txt | 查看后十个字符 |
| tail -n 5 aa.txt a.txt | 查看多个文件后五行 |
| tail -q -n 5 aa.txt | 不输出文件头 |
| tail -f c.txt | 监控文件末尾,显示文件最新追加的内容 |
tailf(实时查看文件尾部内容)
相对于tail -f 和 less +F,其消耗的效能更小,某些Linux没有安装,无法使用,需要执行以下步骤。
第一步:cd命令切换到/usr/local目录下,新建tailf.c文件,该文件内容如下:
#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;
}第二步:首先确保当前目录在/usr/local下,如果不在该目录下,请使用cd命令切换到/usr/local。然后编译c语言程序。
gcc -o /usr/bin/tailf tailf.cnl(显示行号)
| 命令 | 功能 |
|---|---|
| nl -b a file.txt | 所有行添加行号,包括空白行; |
| nl -b t file.txt | 给行添加行号,不包括空白行(默认行为,和直接使用 nl 一样效果) |
| nl -n ln file.txt | 行号在自己栏位左侧显示 |
| nl -n rn file.txt | 行号在自己栏位的右侧显示 |
| nl -n rz file.txt | 显示行号,行号栏位不满时,自动补0 |
| nl -w file.txt | 行号栏位的占用的位数 |
ln(创建链接)
软链接
类似于windows操作系统中的快捷方式,通过软链接可以直接访问。软链接和目标文件实际上是两个文件,在软链接中存储的是目标文件的路径。软链接关联的目标文件如果被删除,软链接这个快捷方式也就失效了。
硬链接
创建的硬链接和原文件是同一个文件,inode号一致,相当于新建了一个指针指向文件所在数据块,只有指针指向,数据就不会被删除,即目标文件或者硬链接只要有一个存在,文件就没有被真正的删除。

| 命令 | 功能 |
|---|---|
| ln -s Hello.java Hello2.java | 给Hello.java创建软链接Hello2.java |
| ln Hello.java Hello2.java | 给Hello.java创建硬链接Hello2.java |
| rm -rf Hello2.java | 删除创建的软链接 |
history (查看已经执行过历史命令)
sort(文件内容排序)
| 命令 | 功能 |
|---|---|
| sort a.txt | 将a.txt文件中的每一行,按照默认字典顺序排列输出 |
| sort -f a.txt | 忽略大小写排序 |
| sort -r a.txt | 逆序排列 |
| sort -n file.txt | 将每行内容当做数值排序 |
| sort -u file.txt | 删除重复行后排序 |
diff(比较文件)
diff a.txt b.txt>、>>(输出重定向)<(输入重定向)
| 命令 | 功能 |
|---|---|
| sort aa.txt > tmp.txt | 将排序内容覆盖输出到tmp.txt(不存在会创建) |
| sort aa.txt >> tmp.txt | 将排序内容追加输出到tmp.txt(不存在会创建) |
| sort -n < a.txt | 将文件内容输入给某个命令,这是一种默认的行为,通常 < 是可以省略的。 |
| sort -n << EOF<br/>> 1<br/>> -1<br/>> 3<br/>> -5<br/>> EOF | <<接受键盘的输入,对其进行排序 |
| sort -k 5 | 按照第五个字段进行排序 |
&(后台执行)
command1 &时间日期类
date(查看时间)
datecal(查看日历)
| 命令 | 功能 |
|---|---|
| cal | 查看当前月日历 |
| cal 2024 | 查看指定年份日历,1-9999 |
用户组管理命令
每个用户都有一个或者多个用户组,系统可以对一个用户组中的所有用户进行集中管理。
cat /etc/group(查看用户组)
输出构成:组名:密码标识:GID:该用户组中的用户列表
groups(查看用户属于哪个用户组)
| 命令 | 功能 |
|---|---|
| groups | 查看当前用户属于哪个组 |
| groups root | 查看指定用户属于哪个组 |
groupadd (添加一个用户组)
| 命令 | 功能 |
|---|---|
| groupadd dev1 | 添加一个用户组dev1 |
| groupadd -g 101 dev2 | 添加一共用户组,并通过 -g 指定新用户组的标识号(GID) |
groupdel(删除用户组)
| 命令 | 功能 |
|---|---|
| groupdel dev3 | 删除用户组dev3 |
groupmod(用户组修改)
| 命令 | 功能 |
|---|---|
| groupmod -g 102 dev2 | 修改dev2用户组的GID为102 |
| groupmod -n dev3 dev2 | 将dev2修改为dev3 |
用户管理命令
useradd(添加用户)
| 参数 | 功能 |
|---|---|
| -d | 指定新用户的主目录 |
| -g | 指定新用户属于哪个组(主组) |
| -G | 可以给新用户添加附加组 |
| 命令 | 功能 |
| useradd dev | 添加用户dev,默认组和自己用户名一样,默认主目录为/home/用户名 |
| useradd -d /usr/lisi -g dev -G test lisi | 添加lisi用户,该用户的主目录/usr/lisi,所属组dev(开发组),附加组test(测试组) |
passwd(修改密码)
# 两次输入密码确认即可
passwd 用户名cat /etc/passwd(查看创建用户的信息)

su (切换用户)
| 命令 | 功能 |
|---|---|
| su 用户名 | 切换到指定用户名,只能获得用户的执行权限,不会加载目标用户的环境变量,仍然保留当前用户的环境变量,且仍然保留在当前工作目录 |
| su - 用户名 | 加载目标用户的环境变量,完全模拟目标用户的登录环境。切换到普通用户之后,该普通用户默认只对自己的“主目录”有权限,主目录之外的目录是没有权限的。 |
userdel(删除用户)
| 命令 | 功能 |
|---|---|
| userdel -r zhangsan | -r 选项的作用是连同该用户主目录一块删除 |
| userdel zhangsan | 删除用户但保存用户主目录 |
whoami(显示登录用户名)
usermod(修改用户)
| 参数 | 功能 |
|---|---|
| -d | 指定新用户的主目录 |
| -g | 指定新用户属于哪个组(主组) |
| -G | 可以给新用户添加附加组 |
| -l | 指定新的用户名(小写的 l) |
| 命令 | 功能 |
| usermod -l zhangsi zhangsan | 修改用户名zhangsi 为 zhangsan |
| usermod -d /usr/zhangsan2 -m zhangsan(-m目录不存在时会新建) | 将zhangsan用户移动到/usr/zhangsan2,不存在就创建 |
| usermod -g dev1 zhangsan | 修改用户zhangsan,至dev1组 |
| usermod -L zhangsan | 锁定用户zhangsan |
| usermod -U zhangsan | 解锁账户zhangsan |
sudo(以root权限运行)
# 修改 /etc/sudoers 文件,91行,在root下面添加需要使用root权限的账号,如下所示:
root ALL=(ALL) ALL
atguigu ALL=(ALL) ALL
# 或者配置成采用sudo命令时,不需要输入密码
atguigu ALL=(ALL) NOPASSWD:ALL文件权限类
权限类型:
#文件类型
- 代表文件
d 代表目录
l 链接文档(link file)
#作用到文件:
[ r ]代表可读(read): 可以读取,查看
[ w ]代表可写(write): 可以修改,但是不可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
[ x ]代表可执行(execute):可以被系统执行
#作用到目录:
[ r ]代表可读(read): 可以读取,ls查看目录内容
[ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
[ x ]代表可执行(execute):可以进入该目录
chmod: 改变权限
第一种方式变更权限:u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
| 命令 | 功能 |
|---|---|
| chmod u-x,o+x houge.txt | 设置多个权限 |
| chmod u+rwx 文件名 | 添加指定权限 |
| chmod o=rw 文件名 | 赋值指定权限 |
第二种方式变更权限:每一个数字对应一个权限所有者,每个数字由三个二进制数组成,对应读、写、执行。
| 命令 | 功能 |
|---|---|
| chmod -R 777 xiyou/ | 为xiyou设置权限,-R表示递归操作,即修改的是整个文件夹 |
chgrp (改变文件或者目录的所属组)
| 命令 | 功能 |
|---|---|
| chgrp -R dev /java | 把目录/java赋予组dev |
chown(修改文件拥有者)
在使用 chown 命令时,需要有足够的权限才能修改文件或目录的拥有者和所属组。一般需要使用 sudo 命令或使用具有相应权限的用户来执行。
| 命令 | 功能 |
|---|---|
| sudo chown root /home/user/file.txt | 将 /home/user/file.txt 文件的所有者修改为 root 用户 |
| sudo chown -R userA:groupA /home/user/dir/ | 将 /home/user/dir/ 目录及其子目录和文件的所有者都修改为 userA 用户,所属组修改为 groupA 组 |
为用户主目录之外的目录授权
第一步:创建目录
mkdir /java第二步:给目录授权
# -R表示递归设置权限,该目录下所有的子目录以及子文件
# 第一个数字:文件拥有者权限,第二个数字:同组用户权限,第三个数组:其他用户权限
# 每一个数字由下面三部分组成:读权限:4,写权限:2,执行权限:1
chmod -R 775 /java第三步:创建组
groupadd dev第四步:把目录赋予组
chgrp -R dev /java第五步:创建用户
useradd xiaoming第六步:设置密码
passwd xiaoming第七步:给用户添加附加组
usermod -G dev xiaoming搜索查找类
find(查找文件)
从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端
| 命令 | 功能 |
|---|---|
| find /usr/local -name "catalina.out" | 在/usr/local目录下,根据名字查询文件catalina.out |
| find /usr/local -name “*.txt” | 在/usr/local目录下,根据名字查询以txt结尾的文件 |
| find /usr/local -user sharm | 在/usr/local目录下,根据文件所有者查询所有者为sharm的文件 |
| find /usr/local -size +10M | 在/usr/local目录下,查询大于10M的文件(+n大于-n小于 n等于) |
| find /usr/local -iname "*pattern*" | 在/usr/local目录下,忽略大小写,模糊查询文件包含pattern的文件 |
grep(在文件中查找匹配的字符串)
| 命令 | 功能 |
|---|---|
| grep 0 a.txt | 在a.txt中搜索0 |
| grep 'pattern' file | 从file中匹配pattern(字符串或模式) |
| grep 'pattern' file1 file2 | 从多个文件中匹配 |
| grep 'pattern' *.txt | 从.txt结尾的文件中匹配 |
| grep -r 'pattern' dir | (-r)从目录递归匹配 |
| grep -A 2 'pattern' file | (-A)显示匹配行后2行 |
| grep -B 2 'pattern' file | (-B)显示匹配行前2行 |
| grep -C 2 'pattern' file | (-C)显示匹配行前后各2行 |
| grep -n 'pattern' file | (-n)同时输出匹配结果的行号: |
| grep -i 'pattern' file | (-i)忽略大小写 |
| grep -v 'pattern' file | (-v)输出不匹配模式的行。 |
| grep -E 'pattern' file | (-E)表示使用正则表达式匹配。 |
|(管道符)
表示将前一个命令的处理结果输出传递给后面的命令处理
# 通过ls查询出内容,在使用grep从这些内容中匹配test
ls | grep -n testwhich(查找命令所在目录)
which cd
#输出 :cd: /usr/bin/cdwhereis(查找命令所在目录)
whereis cd
#输出 :cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz /usr/share/man/mann/cd.n.gz压缩和解压类
tar(压缩/解压缩)
- 压缩:-zcvf
- 解压:-zxvf
| 选项 | 功能 |
|---|---|
| -z | 使用 gzip 压缩(扩展名通常为:tar.gz。特点:速度最快) |
| -j | 使用 bzip2 压缩(扩展名通常为:tar.bz2。特点:体积最小) |
| -c | 压缩文件(c、x、t,这三个参数不能共存,只能出现一个。) |
| -t | 查看压缩文件 |
| -x | 解压缩 |
| -v | 是否在压缩的过程中显示文件 |
| -C | 指定解压到的具体目录。注意是大写C |
| -f | 指定压缩后的文件名,不能在f参数后面再加其他参数。 |
| 命令 | 功能 |
| tar -zcvf xiyou.tar.gz xiyou/ | 压缩目录xiyou为xiyou.tar.gz |
| tar -zcvf houma.tar.gz houge.txt bailongma.txt | 压缩多个文件为houma.tar.gz |
| tar -zxvf houma.tar.gz | 解压到当前目录下 |
| tar -zxvf xiyou.tar.gz -C /opt | 解压到指定opt目录下 |
| tar -tf mytxt.tar.gz | 查看mytxt.tar.gz压缩文件 |
| tar -xvJf node-v8.11.1-linux-x64.tar.xz | 解压tar.xz文件 |
磁盘分区类
df -h:(功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况,-h以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;)
fdisk -l:(功能描述:查看磁盘分区详情,-l显示所有硬盘的分区列表,该命令必须在root用户下才能使用)
Linux分区 Device:分区序列 Boot:引导 Start:从X磁柱开始 End:到Y磁柱结束 Blocks:容量 Id:分区类型ID System:分区类型挂载和卸载
mount [-t vfstype] [-o options] device dir:(功能描述:挂载设备)
umount 设备文件名或挂载点:(功能描述:卸载设备)
参数 功能 -t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有: 光盘或光盘镜像:iso9660 DOS fat16文件系统:msdos Windows 9x fat32文件系统:vfat Windows NT ntfs文件系统:ntfs Mount Windows文件网络共享:smbfs UNIX(LINUX) 文件网络共享:nfs -o options 主要用来描述设备或档案的挂接方式。常用的参数有: loop:用来把一个文件当成硬盘分区挂接上系统 ro:采用只读方式挂接设备 rw:采用读写方式挂接设备 iocharset:指定访问文件系统所用字符集 device 要挂接(mount)的设备 dir 设备在系统上的挂接点(mount point) 挂载设备:mount -t iso9660 /dev/cdrom /mnt/cdrom/ 卸载设备:umount /mnt/cdrom 设置开机自动挂载设备:vi /etc/fstab,打开文件后,按下方进行配置
系统相关类
ps(查看系统进程)
ps -ef

ps -aux
| 命令 | 功能 |
|---|---|
| ps -ef (-e :显示当前所有进程,-f :显示信息) | 查询出所有进程,可以查看子父进程之间的关系 |
| ps -ef | grep xxx | 通过grep过滤,查看指定的进程 |
| ps -aux(-a:选择所有进程,-u:显示所有用户的所有进程,-x:显示没有终端的进程) | 查看系统中所有进程 |
| ps -aux grep xxx | 通过grep过滤,查看指定进程 |
| ps -aux | sort -k 3 | tail -n 5 | 查询出所有进程,按照第三个参数进行排序,过滤出最后五条 |
sleep(进程沉睡)
# 暂停 3 秒
sleep 3
# 暂停 1 分钟
sleep 1m
# 暂停 2 小时
sleep 2h
# 暂停 1 天
sleep 1dkill(杀死进程)
| 命令 | 功能 |
|---|---|
| kill 进程号 | 通过进程号杀死进程 |
| kill -9 进程号 | 通过进程号强制杀死进程 |
| killall 进程名 | 通过进程名称杀死进程 |
top(查看系统占用)
它会实时动态地显示系统资源的使用情况(q退出top命令)
- 僵尸进程:一个已经执行结束的进程,但其进程描述符仍然留在进程列表中,它不再执行任何其他操作,但仍然占用一定内存空间。
- 交换分区(Swap):当系统内存不足时,操作系统会把暂时不需要的内存数据和程序信息通过交换机制存储到硬盘上的交换分区中,以节省内存的使用,从而保证共享内存的进程正常运行。

free(查看内存使用)
free命令可以用于查看物理内存和交换分区的使用情况。下面是一条可能的 free 命令的输出结果的示例:

uptime(查看过去时间状态)

df(查看磁盘占用)
主要关心圈住的内容,挂载点为/和/root

du(查看磁盘占用)
| 命令 | 功能 |
|---|---|
| df -Thl | 查看系统总体磁盘占用 |
| du -h | 查看当前目录磁盘占用 |
重启、关机
| 命令 | 功能 |
|---|---|
| reboot | 重启 |
| poweroff | 立即关闭系统电源,不会等待正在运行的进程结束 |
| shutdown -h now | 命令会向系统发送信号,通知所有正在运行的进程停止运行,并保存当前的状态,然后关闭系统。 |
| shutdown -h 1 | 一分钟后关机(h表示halt) |
| shotdown -r now | 立刻重启(r表示reboot) |
crontab(设置系统定时任务)
# 每隔1分钟,向/root/bailongma.txt文件中添加一个11的数字
*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt| 选项 | 功能 |
|---|---|
| -e | 编辑crontab定时任务 |
| -l | 查询crontab任务 |
| -r | 删除当前用户所有的crontab任务 |
| 项目 | 含义 | 范围 |
|---|---|---|
| 第一个“*” | 一小时当中的第几分钟 | 0-59 |
| 第二个“*” | 一天当中的第几小时 | 0-23 |
| 第三个“*” | 一个月当中的第几天 | 1-31 |
| 第四个“*” | 一年当中的第几月 | 1-12 |
| 第五个*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
| 特殊符号 | 含义 |
|---|---|
| * | 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。 |
| , | 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
| - | 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令 |
| */n | 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令 |
网络相关类
ifconfig(查看ip)
ip addr(查看网址信息)
ping(测试连接)
ping www.baidu.com
ping 192.168.6.100curl(发送http请求)
| 参数 | 功能 |
|---|---|
| -i | 显示响应头信息。 |
| -I | 只显示响应头信息,不显示响应体。 |
| -X | 设置请求方法,包括 GET、POST、PUT、DELETE 等。 |
| -d | 设置请求体数据(POST 请求)。 |
| -H | 设置请求头信息。 |
| -o/-O | 下载文件,并保存到本地。 |
| -u | 设置认证信息。 |
| -A | 设置 User-Agent |
| -s | 静默模式,不输出进度信息。 |
| 命令 | 功能 |
| curl -X POST -d "name=john&age=30" www.example.com/submit | 发送 POST 请求 |
| curl www.example.com | 请求一个 URL 并输出响应信息 |
| curl -O www.example.com/test.zip | 下载一个文件 |
| curl -H "User-Agent: Mozilla/5.0" www.example.com | 设置请求头信息 |
netstat(查看网络连接状态及端口)
- LISTENING 状态:表示该端口已占用,正在监听,等待客户端的连接。
- CONNECTED状态:表示网络连接已建立,但并没有开始数据传输。
- ESTABLISHED 状态:表示网络已连接,数据正在传输中。
- TIME_WAIT 状态:表示连接已经被终止,在双方都完成数据传输后,该连接会进入
TIME_WAIT状态,并等待一段时间后关闭。
netstat -auntlplsof(查看端口号占用)
lsof -i :端口号
软件包管理
RPM
RPM概述:软件包管理工具,类似windows里面的setup.exe,是Linux这系列操作系统里面的打包安装工具
RPM包的名称格式 Apache-1.3.23-11.i386.rpm “apache” 软件名称 “1.3.23-11”软件的版本号,主版本和此版本 “i386”是软件所运行的硬件平台,Intel 32位微处理器的统称 “rpm”文件扩展名,代表RPM包RPM查询命令:rpm -qa(功能描述:查询所安装的所有rpm软件包)
配合查询使用,简化操作结果 rpm -qa | grep rpmRPM卸载命令:rpm -e RPM软件包
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64选项 功能 -e 卸载软件包 --nodeps 卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了。 RPM安装命令 : rpm -ivh RPM包全名
选项 功能 -i -i=install,安装 -v -v=verbose,显示详细信息 -h -h=hash,进度条 --nodeps --nodeps,不检测依赖进度
YUM
YUM仓库配置:基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
YUM的常用命令:yum [选项] [参数]
安装火狐浏览器 yum -y install firefox.x86_64选项 功能 -y 对所有提问都回答“yes” 参数 功能 install 安装rpm软件包 update 更新rpm软件包 check-update 检查是否有可用的更新rpm软件包 remove 删除指定的rpm软件包 list 显示软件包信息 clean 清理yum过期的缓存 deplist 显示yum软件包的所有依赖关系
Why is it that after I changed the Redis password in the configuration file, I am unable to connect using the new password, but I can still connect with the original one?
However, when I manage to connect successfully and then run config get requirepass, the result shows the updated password.

The version I am using is Redis 7.0.15
redis.conf
#bind 127.0.0.1 -::1
port 6379
daemonize yes
logfile "./redis.log"
masterauth "testpasswd123"
requirepass "testpasswd123"Execute command record
redis-server /opt/redis-7.0.15/redis.conf
redis-cli -a passwdtest123
redis-cli -a fujianz123 config get requirepass
redis-cli -a fujianz123 config get requirepass