linux 基本命令

  1. Linux
    1. 发行版
    2. 常用命令
    3. 权限命令
    4. 自动启动设置
    5. 用户组
    6. 其他常用命令
  2. 工具
    1. netstat
    2. 正则
    3. grep
    4. sed
    5. awk

Linux

Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。

Linux能运行主要的UNIX工具软件、应用程序和网络协议。

它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

内核与CPU

  1. 操作系统的内核(Kernel)属于操作系统层面,而 CPU 属于硬件。
  2. CPU 主要提供运算,处理各种指令的能力。内核(Kernel)主要负责系统管理比如内存管理,它屏蔽了对硬件的操作。
image-20211002201551841

用户态和内核态

根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别:

  1. 用户态(user mode) : 用户态运行的进程或可以直接读取用户数据的程序。
  2. 系统态(kernel mode): 可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。

系统调用

我们运行的程序基本都是运行在用户态,如果我们调用操作系统提供的系统态级别的子功能咋办呢?那就需要系统调用了!

也就是说在我们运行的用户程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成

这些系统调用按功能大致可分为如下几类:

  • 设备管理 :完成设备的请求或释放,以及设备启动等功能。
  • 文件管理 :完成文件的读、写、创建及删除等功能。
  • 进程控制 :完成进程的创建、撤销、阻塞及唤醒等功能。
  • 进程通信 :完成进程之间的消息传递或信号传递等功能。
  • 内存管理 :完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
image-20211002202005299

发行版

Linux的发行版说简单点就是将Linux内核与应用软件做一个打包。

按包管理器来划分

首先,什么是包管理器呢?

这么说吧,如果没有包管理器这个东西的存在,那估计仅仅是Linux系统上的软件安装,怕是就要劝退很多用户了,因为很多的软件依赖处理会让人抓狂。

因此简单起见,我们可以将包管理器理解为,用来为Linux系统上的软件安装卸载升级查询提供支持的组件,所以对于用户使用来说,一般是一组工具命令集。

image-20211002172843522

常用工具集: apt, apt-get, yum

image-20211002173932727

常用工具命令

升级

sudo apt-get upgrade

sudo yum update

安装

sudo apt-get install 包名

sudo yum install 包名

本地安装

sudo apt-get install 包名.deb

sudo yum install 包名.rpm

移除

sudo apt-get remove 包名

sudo yum remove 包名


常用命令

cd 目录切换 (测试环境为 Centos)

cd /usr : 切换到usr目录

[root@VM-12-17-centos ~]# cd /usr
[root@VM-12-17-centos usr]# pwd
/usr

cd .. : 上一级

[root@VM-12-17-centos usr]# cd ..
[root@VM-12-17-centos /]# pwd
/

cd / : 系统根目录

[root@VM-12-17-centos /]# cd /
[root@VM-12-17-centos /]# pwd
/

cd ~ : 用户主目录

[root@VM-12-17-centos /]# cd ~
[root@VM-12-17-centos ~]# pwd
/root

cd - : 上一个操作所在目录

[root@VM-12-17-centos ~]# cd -
/
[root@VM-12-17-centos /]# pwd
/

mkdir 新建目录

ls 查看目录信息

ll (ls-l) 查看该目录下所有目录和文件的详细信息

[root@VM-12-17-centos usr]# ls
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
[root@VM-12-17-centos usr]# ll
total 128
dr-xr-xr-x.  2 root root 36864 Sep 16 16:45 bin
drwxr-xr-x.  2 root root  4096 Apr 11  2018 etc
drwxr-xr-x.  2 root root  4096 Apr 11  2018 games
drwxr-xr-x. 59 root root  4096 Sep  2  2020 include
dr-xr-xr-x. 30 root root  4096 Sep  2  2020 lib
dr-xr-xr-x. 52 root root 32768 Mar 17  2021 lib64
drwxr-xr-x. 26 root root  4096 Mar 17  2021 libexec
drwxr-xr-x. 13 root root  4096 May 28 11:22 local
dr-xr-xr-x.  2 root root 20480 Sep 28 15:24 sbin
drwxr-xr-x. 97 root root  4096 Mar 17  2021 share
drwxr-xr-x.  7 root root  4096 Sep  2  2020 src
lrwxrwxrwx.  1 root root    10 Mar  7  2019 tmp -> ../var/tmp

find 目录 参数

find . 列出当前目录及子目录下所有文件和文件夹

find /home *.txt 在home目录下查找以.txt 结尾的文件名

mv 目录名称 新目录名称

mv 目录名称 目录的新位置

mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中

cp -r 目录名称 目录拷贝的目标位置

拷贝目录(改),-r 代表递归拷贝 。

注意:cp 命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r 递归。

rm -rf 目录

rm -rf 文件 删除文件(删)。

删除目录 或 文件

注意:rm 不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用rm -rf 目录/文件/压缩包。

touch 文件名称

新建文件

cat/more/less/tail 文件名称 :文件的查看(查)

命令 tail -f 文件 可以对某个文件进行动态监控,例如 tomcat 的日志文件, 会随着程序的运行,日志会变化,可以使用 tail -f catalina-2016-11-11.log 监控 文 件的变化 。

vim 文件

修改文件的内容(改)。

vim 编辑器是 Linux 中的强大组件,是 vi 编辑器的加强版,vim 编辑器的命令和快捷方式有很多,但此处不一一阐述,大家也无需研究的很透彻,使用 vim 编辑修改文件的方式基本会使用就可以了。

在实际开发中,使用 vim 编辑器主要作用就是修改配置文件,下面是一般步骤: vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入 wq 代表写入内容并退出,即保存;输入 q!代表强制退出不保存)。

打包并压缩文件

Linux 中的打包文件一般是以.tar 结尾的,压缩的命令一般是以.gz 结尾的。

而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。

命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件 ,其中:

  • z:调用 gzip 压缩命令进行压缩
  • c:打包文件
  • v:显示运行过程
  • f:指定文件名

比如:假如 目录下有三个文件分别是:a.txt b.txt c.txt,如果我们要打包 test 目录并指定压缩后的压缩包名称为 test.tar.gz 可以使用命令:**tar -zcvf test.tar.gz a.txt b.txt c.txt**

[root@VM-12-17-centos tmp]# tar -zcvf test.tar.gz a.txt b.txt c.txt 
a.txt
b.txt
c.txt
[root@VM-12-17-centos tmp]# ll
total 12
drwxr-xr-x 2 abrt abrt 4096 Mar  7  2019 abrt
-rw-r--r-- 1 root root    0 Oct  2 19:41 a.txt
-rw-r--r-- 1 root root    0 Oct  2 19:41 b.txt
-rw-r--r-- 1 root root    0 Oct  2 19:41 c.txt
-rw-r--r-- 1 root root    0 Oct  2 19:37 log.txt
drwx------ 3 root root 4096 May 28 11:22 systemd-private-d2cdf953d623458a9f4ebab74588d3cc-ntpd.service-FfC2dg
-rw-r--r-- 1 root root  126 Oct  2 19:42 test.tar.gz

解压压缩包

命令:tar [-xvf] 压缩文件

其中:x:代表解压

示例:

  • 将 当前目录 下的 test.tar.gz 解压到当前目录下可以使用命令:**tar -xvf test.tar.gz**
  • 将 当前目录 下的 test.tar.gz 解压到根目录/usr 下:**tar -xvf test.tar.gz -C /usr**(- C 代表指定解压的位置)
[root@VM-12-17-centos tmp]# tar -xvf test.tar.gz -C /usr
a.txt
b.txt
c.txt
[root@VM-12-17-centos tmp]# cd /usr
[root@VM-12-17-centos usr]# ll
total 128
-rw-r--r--   1 root root     0 Oct  2 19:41 a.txt
dr-xr-xr-x.  2 root root 36864 Sep 16 16:45 bin
-rw-r--r--   1 root root     0 Oct  2 19:41 b.txt
-rw-r--r--   1 root root     0 Oct  2 19:41 c.txt
drwxr-xr-x.  2 root root  4096 Apr 11  2018 etc
drwxr-xr-x.  2 root root  4096 Apr 11  2018 games
drwxr-xr-x. 59 root root  4096 Sep  2  2020 include
dr-xr-xr-x. 30 root root  4096 Sep  2  2020 lib
dr-xr-xr-x. 52 root root 32768 Mar 17  2021 lib64
drwxr-xr-x. 26 root root  4096 Mar 17  2021 libexec
drwxr-xr-x. 13 root root  4096 May 28 11:22 local
dr-xr-xr-x.  2 root root 20480 Sep 28 15:24 sbin
drwxr-xr-x. 97 root root  4096 Mar 17  2021 share
drwxr-xr-x.  7 root root  4096 Sep  2  2020 src
lrwxrwxrwx.  1 root root    10 Mar  7  2019 tmp -> ../var/tmp

权限命令

操作系统中每个文件都拥有特定的权限、所属用户和所属组。

权限是操作系统用来限制资源访问的机制,在 Linux 中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。

分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。

通过 ls -l 命令我们可以 查看某个目录下的文件或目录的权限

[root@VM-12-17-centos usr]# ls -l
total 128
-rw-r--r--   1 root root     0 Oct  2 19:41 a.txt
dr-xr-xr-x.  2 root root 36864 Sep 16 16:45 bin
-rw-r--r--   1 root root     0 Oct  2 19:41 b.txt
-rw-r--r--   1 root root     0 Oct  2 19:41 c.txt
drwxr-xr-x.  2 root root  4096 Apr 11  2018 etc
drwxr-xr-x.  2 root root  4096 Apr 11  2018 games
drwxr-xr-x. 59 root root  4096 Sep  2  2020 include
dr-xr-xr-x. 30 root root  4096 Sep  2  2020 lib
dr-xr-xr-x. 52 root root 32768 Mar 17  2021 lib64
drwxr-xr-x. 26 root root  4096 Mar 17  2021 libexec
drwxr-xr-x. 13 root root  4096 May 28 11:22 local
dr-xr-xr-x.  2 root root 20480 Sep 28 15:24 sbin
drwxr-xr-x. 97 root root  4096 Mar 17  2021 share
drwxr-xr-x.  7 root root  4096 Sep  2  2020 src
lrwxrwxrwx.  1 root root    10 Mar  7  2019 tmp -> ../var/tmp

-rw-r–r– 1 root root 0 Oct 2 19:41 a.txt

第一行 解释如下:

  • - : 代表文件

  • rw- : 属主(owner) 可以读和写

  • r– : 属组(group) 只能读

  • r– : 其他用户(other) 只能读

  • root : 所有者是root

  • root : 所属root组

  • 0 : 其他组

image-20211002195322962

文件的类型:

  • d: 代表目录
  • -: 代表文件
  • l: 代表软链接(可以认为是 window 中的快捷方式)

Linux 中权限分为以下几种:

  • r:代表权限是可读,r 也可以用数字 4 表示
  • w:代表权限是可写,w 也可以用数字 2 表示
  • x:代表权限是可执行,x 也可以用数字 1 表示

在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。

  • 所有者(u) :一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者,用 ls ‐ahl 命令可以看到文件的所有者 也可以使用 chown 用户名 文件名来修改文件的所有者 。
  • 文件所在组(g) :当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组用 ls ‐ahl命令可以看到文件的所有组也可以使用 chgrp 组名 文件名来修改文件所在的组。
  • 其它组(o) :除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

chmod

修改文件/目录的权限的命令:chmod

示例:修改 目录 下的 a.txt 的权限为文件所有者有全部权限,文件所有者所在的组有读写权限,其他用户只有读的权限。

chmod u=rwx,g=rw,o=r a.txt 或者 chmod 764 a.txt

[root@VM-12-17-centos usr]# chmod 764 a.txt
[root@VM-12-17-centos usr]# ls -l
total 128
-rwxrw-r--   1 root root     0 Oct  2 19:41 a.txt
dr-xr-xr-x.  2 root root 36864 Sep 16 16:45 bin
-rw-r--r--   1 root root     0 Oct  2 19:41 b.txt
-rw-r--r--   1 root root     0 Oct  2 19:41 c.txt
drwxr-xr-x.  2 root root  4096 Apr 11  2018 etc
drwxr-xr-x.  2 root root  4096 Apr 11  2018 games
drwxr-xr-x. 59 root root  4096 Sep  2  2020 include
dr-xr-xr-x. 30 root root  4096 Sep  2  2020 lib
dr-xr-xr-x. 52 root root 32768 Mar 17  2021 lib64
drwxr-xr-x. 26 root root  4096 Mar 17  2021 libexec
drwxr-xr-x. 13 root root  4096 May 28 11:22 local
dr-xr-xr-x.  2 root root 20480 Sep 28 15:24 sbin
drwxr-xr-x. 97 root root  4096 Mar 17  2021 share
drwxr-xr-x.  7 root root  4096 Sep  2  2020 src
lrwxrwxrwx.  1 root root    10 Mar  7  2019 tmp -> ../var/tmp

即: -rwxrw-r– 1 root root 0 Oct 2 19:41 a.txt


自动启动设置

补充一个比较常用的东西:

假如我们装了一个 zookeeper,我们每次开机到要求其自动启动该怎么办?

  1. 新建一个脚本 zookeeper
  2. 为新建的脚本 zookeeper 添加可执行权限,命令是:chmod +x zookeeper
  3. 把 zookeeper 这个脚本添加到开机启动项里面,命令是:chkconfig --add zookeeper
  4. 如果想看看是否添加成功,命令是:chkconfig --list

用户组

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

Linux 系统用户组的管理相关命令:

  • groupadd 选项 用户组 :增加一个新的用户组
  • groupdel 用户组:要删除一个已有的用户组
  • groupmod 选项 用户组 : 修改用户组的属性

其他常用命令

  • pwd 显示当前所在位置

  • sudo + 其他命令:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

  • grep 要搜索的字符串 要搜索的文件 --color 搜索命令,–color 代表高亮显示

  • ps -ef/ps -aux 这两个命令都是查看当前系统正在运行进程,两者的区别是展示格式不同

    • 如果想要查看特定的进程可以使用这样的格式:**ps aux|grep redis** (查看包括 redis 字符串的进程),
    • 也可使用 pgrep redis -a

    注意:如果直接用 ps((Process Status))命令,会显示所有进程的状态,通常结合 grep 命令查看某进程的状态。

  • kill -9 进程的pid 杀死进程(-9 表示强制终止。)

    先用 ps 查找进程,然后用 kill 杀掉

  • 网络通信命令:

    • 查看当前系统的网卡信息:ifconfig
    • 查看与某台机器的连接情况:ping
    • 查看当前系统的端口使用:netstat -an
  • shutdown shutdown -h now: 指定现在立即关机;shutdown +5 "System will shutdown after 5 minutes":指定 5 分钟后关机,同时送出警告信息给登入用户。

  • reboot reboot 重开机。**reboot -w:** 做个重开机的模拟(只有纪录并不会真的重开机)。


工具

netstat

  • -t 列出所有tcp
  • -u 列出所有udp
  • -l 列出所有监听端口
  • -n 以数字形式显示地址和端口号
  • -p 显示进程的pid 和 名字

netstat -ntlp

以数字形式显示地址和端口号, 进程号和名字, 列出所有监听端口, 列出所有tcp

[root@VM-12-17-centos ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      1044/vsftpd         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1147/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1295/master         
tcp6       0      0 ::1:25                  :::*                    LISTEN      1295/master         

top 持续监视系统性能

image-20211002203533990

ps -aux 显示所有进程, 包括用户及分组情况

[root@VM-12-17-centos ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  43588  3880 ?        Ss   May28   9:11 /usr/lib/systemd/systemd 
root         2  0.0  0.0      0     0 ?        S    May28   0:03 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<   May28   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    May28   4:28 [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S    May28   0:00 [migration/0]
...

ps -ef

[root@VM-12-17-centos ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May28 ?        00:09:11 /usr/lib/systemd/systemd --switched-root -
root         2     0  0 May28 ?        00:00:03 [kthreadd]
root         4     2  0 May28 ?        00:00:00 [kworker/0:0H]
root         6     2  0 May28 ?        00:04:28 [ksoftirqd/0]
root         7     2  0 May28 ?        00:00:00 [migration/0]
...

正则

就是记录文本规则的代码

单词: \b…\b

. 任意字符 (除了换行符)

\w 字母, 数字, 下划线, 汉字

\s 任意空白符

\d 数字

\b 匹配单词的开始或结束

^ 开始

$ 结束

* : {0, } 即 >= 0 次

+ : {1, } 即 >= 1 次

? : 0 次 或 1次

{n, m} : >= n 且 m <= 即 n 到 m次

{n} : n 次

{n, } : >= n次

grep

grep [OPTIONS] PATTERN [FILE]

-v 显示不配 patter 匹配到的行

-i 忽略字符大小写

-n 显示匹配到的行号

-c 统计匹配的行数

-o 仅显示匹配到的字符串

-E 使用ERE, 相当于 egrep

[root@VM-12-17-centos usr]# grep -E ^s+ a.txt 
sss

# a.txt
sss
aaa
xxx
vvv

sed

sed 是流编辑器, 一次处理一行内容

sed [-hn] [-e <script>] [-f <script FILE>] [FILE]

-h : 显示帮助

-n : 仅显示script处理后的结果

-e <script> : 以选项中的指定的script来处理输入的文本文件

-f <script FILE> : 以选项中指定的script文件来处理输入的文本文件

常用动作:

<script>

  • a 新增 : sed -e '2 a newline' 在第2行后面新增一行 newline
  • c 取代 : sed -e '2,5c No2-5 number' 用 c 后的内容 (No2-5 number) 取代 2到5行的内容
  • d 删除 : sed -e '2,5d' 删除2到5行
  • i 插入 : sed -e '2i newline' 在第2行前面插入一行 newline
  • p 打印 : sed -n '/root/p' 打印sed处理后, 满足正则/root/匹配到的内容 (/.../ 表示正则)
  • s 取代: sed -e 's/old/new/g' 用new取代old (/.../.../ 表示正则)

直接修改文件内容: -i

sed -i ‘s/root/hello/g’ test.txt

  • 加 g 表示使用 “hello” 修改所有匹配到的 “root”
  • 不加 g 表示修改第一个匹配到的内容
  • g 表示全局

awk

把文件逐行的读入, 以空格为默认分隔符将每行切片, 切开的部分再进行后续操作

$0 内置变量, 表示整行

$1 从行切段, 从$1开始, 即第一列

awk ‘pattern + action’ [FILE]

FILENAME : 文件名

BEGIN : 处理文本之前要执行的操作

END: 处理文本之后要执行的操作

FS: 设置输入域分隔符, 等价于 -F 选项

NF: 浏览记录的域的个数 (列数)

NR: 已读的记录数 (行数)

OFS: 输出域分隔符

ORS: 输出记录分隔符

RS: 控制记录分割符

[root@VM-12-17-centos usr]# cat a.txt 
sss
hello
xxx
vvv

# 打印 以空格为分隔符 的 有hello关键字 的 所有行的 第1列
[root@VM-12-17-centos usr]# awk '/hello/{print $1}' a.txt 
hello

# 打印 以l为分隔符 的 有hello关键字 的 所有行的 第1列
[root@VM-12-17-centos usr]# awk -F l '/hello/{print $1}' a.txt 
he
# 打印 以l为分隔符 的 有hello关键字 的 所有行的 第2列 --> 2个ll中为空串
[root@VM-12-17-centos usr]# awk -F l '/hello/{print $2}' a.txt 
# 打印 以l为分隔符 的 有hello关键字 的 所有行的 第3列 --> 2个ll中为空串
[root@VM-12-17-centos usr]# awk -F l '/hello/{print $3}' a.txt 
o

# 打印 以ll为分隔符 的 有hello关键字 的 所有行的 第2列
[root@VM-12-17-centos usr]# awk -F ll '/hello/{print $2}' a.txt 
o

# 打印 a.txt 的 第二行信息 的第1列
[root@VM-12-17-centos usr]# awk -F ll 'NR==2{print $1}' a.txt 
he
# 打印 a.txt 的 第二行信息 的第2列
[root@VM-12-17-centos usr]# awk -F ll 'NR==2{print $2}' a.txt 
o

# 输出前后加入标题 输出第一列和第二列 (第二列为空)
[root@VM-12-17-centos usr]# awk 'BEGIN{print "begin"}{print $1,$2}END{print "end"}' a.txt 
begin
sss 
hello 
xxx 
vvv 
 
end

# RS="|" 设置控制记录分割符    以|为分隔符, 将一行查分再输出每一行
[root@VM-12-17-centos usr]# echo "111 222|333 444|555 666|" | awk 'BEGIN{RS="|"}{print $0}'
111 222
333 444
555 666


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jungle8884@163.com

×

喜欢就点赞,疼爱就打赏