Skip to content

Linux

Linux文件目录结构

linux操作系统采用一个文档树来组织所有的资源,这棵树的根目录的名字叫做:/

  1. /bin目录:存放最经常使用的命令,以二进制可执行文件形式存在,如cat、ls、mkdir、rm等。w
  2. /etc目录:用于存放系统的配置文件,如网络配置、用户登录信息配置等。大多数应用程序在安装后都会在这个目录下创建自己的子目录,以便存储自己的配置文件。
  3. /home目录:存放普通用户数据的主目录,在Linux中每个用户都有一个自己的目录,一般以账号命名
  4. /lib目录:包含一些共享库文件,应用程序可以通过这些共享库文件调用系统的功能,如libc.so,是C语言函数库的共享库。
  5. /root目录:是系统管理者(超级用户)的主目录。
  6. /tmp目录:是系统中的一个临时目录,所有用户都可以在这里创建临时文件,文件系统会定期清空该目录,以防止文件滞留。
  7. /usr目录:包含系统启动后,所有用户能访问的应用程序和数据文件。
  8. /var 目录:存放着不断变化的数据,我们习惯将经常被修改的内容放在这个下面,如日志文件等。
  9. /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地址

  1. Vmvare中配置子网IP和网关,编辑——>虚拟机网络编辑器——>设置子网IP——>NAT设置,设置网关

  2. 查看当前虚拟机IP:ifconfig命名

  3. 修改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网卡
  4. ping +主机/其他网址:测试是否可以进行链接

设置与修改主机名

  1. hostname (功能描述:查看当前服务器的主机名称)
  2. vim /etc/hostname (使用vim打开主机名所在文件,修改该文件可以修改主机名)
  3. vim /etc/hosts(使用etc打开hosts文件,添加192.168.6.100 java100,可以使用过java100代替主机IP)

服务管理

基本语法(CentOS 6)

  1. service 服务名 start (功能描述:开启服务)
  2. service 服务名 stop (功能描述:关闭服务)
  3. service 服务名 restart (功能描述:重新启动服务)
  4. service 服务名 status (功能描述:查看服务状态)
  5. chkconfig (功能描述:查看所有服务器自启配置)
  6. chkconfig 服务名 off (功能描述:关掉指定服务的自动启动)
  7. chkconfig 服务名 on (功能描述:开启指定服务的自动启动)
  8. chkconfig 服务名 --list (功能描述:查看服务开机启动状态)

<strong style="color:red;">基本语法(CentOS 7)</strong>

  1. systemctl start 服务名 (功能描述:开启服务)

  2. systemctl stop 服务名 (功能描述:关闭服务)

  3. systemctl restart 服务名 (功能描述:重新启动服务)

  4. systemctl status 服务名 (功能描述:查看服务状态)

  5. systemctl --type service (功能描述:查看正在运行的服务)

  6. systemctl list-unit-files (功能描述:查看所有服务器自启配置)

  7. systemctl disable 服务名 (功能描述:关掉指定服务的自动启动)

  8. systemctl enable 服务名 (功能描述:开启指定服务的自动启动)

  9. systemctl is-enabled 服务名(功能描述:查看服务开机启动状态)

    (1)关闭防火墙的自动启动
    [root@hadoop100 桌面]#system disable firewalld.service
    (2)开启防火墙的自动启动
    [root@hadoop100 桌面]#system enable firewalld
    (3)查看防火墙状态
    [root@hadoop100桌面]#systemctl is-enabled firewalld

虚拟机关闭:

  1. sync:(功能描述:将缓冲区内的数据由内存同步到硬盘中)
  2. poweroff:(功能描述:关闭系统,等同于shutdown -h now)
  3. reboot:(功能描述:就是重启,等同于 shutdown -r now)
  4. shutdown:(指定时间关闭或重启)
选项功能
-h-h=halt关机
-r-r=reboot重启
参数功能
now立刻关机
时间等待多久后关机(时间单位是分钟)。

快照:保存虚拟机状态

克隆虚拟机

  1. 关闭要被克隆的虚拟机
  2. 进行克隆

常用基本命令

帮助命令

man

对于查看的信息,可以通过空格翻页,输入q退出

shell
# 参数
# -f:显示给定关键字的简短描述信息
# -a:在所有的man帮助手册中搜索
# ……………………

# 数字
# 1:用户在shell环境可操作的命令或执行文件;
# 2:系统内核可调用的函数与工具等


# 可以添加参数限定查询,也可以通过数字指定要查询的man手册,但没必要深入了解,不如百度
man -f ls

help

shell
#没必要深入了解,不如百度

#内部命令获取帮助
help cd

#外部命令获取帮助
ls --help

clear(清屏)

常用快捷键:

常用快捷键功能
ctrl + c停止进程
ctrl+l清屏;等价命令:clear 彻底清屏:reset
ctrl + q退出
善于用tab键提示(更重要的是可以防止敲错)
上下键查找执行过的命令
ctrl +altlinux和Windows之间切换

文件目录类

pwd(显示路径)

shell
pwd

ls (输出目录)

选项功能
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(删除空目录)

如果目录非空,则不能删除

shell
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 的字母]
实时监控文件动态变化

只有机器自动写入或通过输出重定向写入的才可以被监控。

shell
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文件,该文件内容如下:

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语言程序。

shell
gcc -o /usr/bin/tailf tailf.c

nl(显示行号)

命令功能
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(比较文件)

shell
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按照第五个字段进行排序

&(后台执行)

shell
command1 &

时间日期类

date(查看时间)

shell
date

cal(查看日历)

命令功能
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(修改密码)

shell
# 两次输入密码确认即可
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权限运行)

properties
# 修改 /etc/sudoers 文件,91行,在root下面添加需要使用root权限的账号,如下所示:
root      ALL=(ALL)     ALL
atguigu   ALL=(ALL)     ALL

# 或者配置成采用sudo命令时,不需要输入密码
atguigu   ALL=(ALL)     NOPASSWD:ALL

文件权限类

权限类型:

shell
#文件类型
- 代表文件
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

为用户主目录之外的目录授权

第一步:创建目录

shell
mkdir /java

第二步:给目录授权

shell
# -R表示递归设置权限,该目录下所有的子目录以及子文件
# 第一个数字:文件拥有者权限,第二个数字:同组用户权限,第三个数组:其他用户权限
# 每一个数字由下面三部分组成:读权限:4,写权限:2,执行权限:1
chmod -R 775 /java

第三步:创建组

shell
groupadd dev

第四步:把目录赋予组

shell
chgrp -R dev /java

第五步:创建用户

shell
useradd xiaoming

第六步:设置密码

shell
passwd xiaoming

第七步:给用户添加附加组

shell
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)表示使用正则表达式匹配。

|(管道符)

表示将前一个命令的处理结果输出传递给后面的命令处理

shell
# 通过ls查询出内容,在使用grep从这些内容中匹配test
ls | grep -n test

which(查找命令所在目录)

shell
which cd
#输出 :cd: /usr/bin/cd

whereis(查找命令所在目录)

shell
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(进程沉睡)

shell
# 暂停 3 秒
sleep 3

# 暂停 1 分钟
sleep 1m

# 暂停 2 小时
sleep 2h

# 暂停 1 天
sleep 1d

kill(杀死进程)

命令功能
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(设置系统定时任务)

shell
# 每隔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(测试连接)

shell
ping www.baidu.com
ping 192.168.6.100

curl(发送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状态,并等待一段时间后关闭。
shell
netstat -auntlp

lsof(查看端口号占用)

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 rpm
  • RPM卸载命令: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

shell
#bind 127.0.0.1 -::1
port 6379
daemonize yes
logfile "./redis.log"
masterauth "testpasswd123"
requirepass "testpasswd123"

Execute command record

shell
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