一、前言

作为一名后端开发必须掌握的Linux基础。分为


  • Linux概述
  • 基本的Linux命令
  • 文件查看
  • vim介绍
  • 账号管理
  • 用户组管理
  • 磁盘管理
  • 进程管理
  • 软件的安装

二、Linux简介

2.1 概述

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

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

Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

2.2 发行版

目前,市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。

后端开发需要掌握的Linux技能树(LinuxC/C++)_命令模式

2.3 Linux应用领域

今天各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合。

目前 Linux 不仅在家庭与企业中使用,并且在政府中也很受欢迎。

2.4 进入Linux

后端开发需要掌握的Linux技能树(LinuxC/C++)_linux_02

在Linux的理念里面,一切皆文件。Linux文件系统从根目录开始,分为很多子目录:


  • /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
  • /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
  • /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。(不要动)
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
  • /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /srv:该目录存放一些服务启动之后需要提取的数据。
  • /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
  • /tmp:这个目录是用来存放一些临时文件的。(安装包)
  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

  • /usr/bin: 系统用户使用的应用程序。
  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src: 内核源代码默认的放置目录。

  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
  • /www :存放服务器相关的资源​(自建)

​LinuxC/C++服务器开发/架构师 系统性学习公开课​​ 面试题、学习资料、教学视频和学习路线图(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享有需要的可以自行添加学习交流群​​960994558​

后端开发需要掌握的Linux技能树(LinuxC/C++)_命令模式_03

三、Linux基本命令

3.1 命令格式


cmd [options] [arguments]

命令 选项 参数


3.2 通配符

Linux的通配符如下:


  • *:代表匹配任何字符和任何数目的字符
  • ?:代表匹配单一数目的任何字符
  • [] : 匹配 [ ] 之内的任意一个字符
  • [! ] : 表示非,匹配除了括号之内的任意一个字符

3.3 目录常用命令

3.3.1 ls 列出目录(颜色区分文件和文件夹)

  • -a :查看全部的文件,包含隐藏文件
  • -l : 列出所有的文件,包括文件的属性和权限, 不包含隐藏文件
  • 所有的linux可以组合使用:

ls -al
3.3.2 cd 切换目录

绝对路径都是以/ 开头,相对路径,对于当前目录该如何寻找 …/ 或./

3.3.3 pwd 显示当前所在目录
3.3.4 mkdir 创建文件夹
  • mkdir -p : 递归创建文件夹
    ​mkdir -p test1/test2 ​
3.3.5 rmdir 删除目录
  • rmdir -p :删除层级目录
    ​rmdir -p test1/test2/test3 ​
3.3.6 cp 复制文件或目录
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
3.3.7 rm 文件或目录

  • -f 就是force的意思,忽略不存在的文件,不会出现警告信息
  • -i:互动模式,在删除前会询问使用者是否
  • -r:递归删除,最常用的目录删除,很危险

3.3.8 移动文件或目录
[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
  • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

移动过程可以重命名:

[root@kuangshen home]# mv test mvtest
[root@kuangshen home]# ls
mvtest
3.3.9 touch创建文件

3.4 查看文件内容

  • cat 由第一行开始显示文件内容 cat也可以用清空文件内荣
cat /dev/null >nohup.out 
# cat nohup.out

  • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着​写!
  • nl 显示的时候,顺道输出行号!
  • more 一页一页的显示文件内容(退出q)
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行 -n倒数第几行

3.5 基本属性

3.5.1 看懂文件属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。我们可以通过ls -l 的命令来查看后端开发需要掌握的Linux技能树(LinuxC/C++)_c++_04

a、在Linux中的第一个字符代表这个文件是目录、文件或链接文件等等。


  • 当为[ d ]则是目录
  • 当为[ - ]则是文件;
  • 若是[ l ]则表示为链接文档 ( link file );
  • 若是[ b ]则表示为装置文件里面的可供储存的接口设备 ( 可随机存取装置 );
  • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标 ( 一次性读取装置 )。

b、在接下来的字符中,三个为一组,且均为【rwx】的三个参数的组合。这三个的位置不会改变,如果没有权限,就会出现减号【-】


  • 【r】代表可读(read)
  • 【w】代表可写(write)
  • 【x】代表可以执行(execute)
    后端开发需要掌握的Linux技能树(LinuxC/C++)_c++_05
    三个一组,分为属主权限 , 属组权限,其他用户权限的含义是怎样的呢?

对于Linux来说,用户是按组分类的,一个用户属于一个或多个组。


  • 属主权限:就是文件所有者的权限
  • 属组权限:就是文件所有者同组的用户权限
  • 其他用户权限:就是其他用户

3.5.2 修改文件属性

  • chgrp:更改文件属组

  • chgrp 【-R】 属组名 文件名
  • 如果加上-R的参数,那么该目录下的所有文件的属组都会更改

  • chown:更改文件属主,也可以同时更改文件属组。常用!
  • 语法:
    ​chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名 ​
  • chmod: 更改文件的9个属性。常用!

  • 文件属性的设置方法分两种:一种是符号,一种是数字。
  • 权限符号参照表:

  • r:4
  • w:2
  • x:1

  • 上面的每三种权限是可以对分数累加的,例如rwx=4+2+1 ;— = 0,因此,可以赋予权限chmod -R 770
  • 对应字符:Linux用user,group,others代表三组权限,a代表所有。缩写表示u、g、o、a。分别修改权限:
    ​[root@lei ~]# chmod u=rwx,g=rx,o=r test [root@lei ~]# ls -al test -rwxr-xr--. 1 root root 0 6月 12 14:08 test ​


3.6 Linux 链接的概念

Linux的链接分为两种:硬链接、软链接。


  • 硬链接:A->B,假设B是A的硬链接,那么他们两个指向了同一个文件,允许一个文件拥有多个路径,用户可以通过这种机制建立硬链接到一些重要文件上,防止误删。
  • 软连接:类似windows下的快捷方式,删除了源文件,快捷方式也访问不了
    后端开发需要掌握的Linux技能树(LinuxC/C++)_命令模式_06

四、Vim介绍

vim是操作Linux的必备技能,是从vi发展出来的一个文本编辑器。具备代码补完、编译及错误跳等方便编程的功能,被广泛应用。

分为三种模式:


  • 命令模式
  • 输入模式
  • 底线命令模式

4.1 命令模式

vim 进入编辑文件,


  • 通过输入 i 进入输入模式
  • 通过输入 : 进入底线命令模式

. 命令模式下,输入:/字符串

比如搜索user, 输入/user:


  • 1、按下回车之后,可以看到vim已经把光标移动到该字符处和高亮了匹配的字符串
  • \2. 查看下一个匹配,按下n(小写n)
  • \3. 跳转到上一个匹配,按下N(大写N)

4.2 输入模式

输入模式就是我们开始编辑文件的模式,一些快捷键如下:


  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

4.3 底线命令模式

进入底线命令模式,基本命令有:


  • q 退出程序
  • w 保存程序
  • 按esc 键可随时退出底线命令模式

五、账号管理

Linux 系统是一个多用户任务的分时操作系统,任何一个要使用系统资源的用户,就必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号可以分配不同的权限,保证系统的安全。

5.1 用户账户的管理

用户账号的管理工作主要涉及到用户的添加、修改与删除

添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户名,用户组,主目录和登录Shell等资源

5.1.1 useradd :添加用户
useradd  选项  用户名

  • -c comment 指定一段注释性描述。
  • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
  • -g 用户组 指定用户所属的用户组。
  • -G 用户组,用户组 指定用户所属的附加组。
  • -m 使用者目录如不存在则自动建立。
  • -s Shell文件 指定用户的登录Shell。
  • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

5.1.2 userdel 删除用户
userdel 选项  用户名

删除用户就是从/etc/passwd 等系统文件中的该用户记录删除,必要时还删除用户的主目录

常用的命令就是-r。它的作用就是把用户的主目录一起删除​。

5.1.3 usermod 修改用户,修改完看配置文件

修改用户,更改用户属性,如用户名、主目录、用户组、登录shell等

usermod  选项  用户名

  • -a|–append ##把用户追加到某些组中,仅与-G选项一起使用
  • -c|–comment ##修改/etc/passwd文件第五段comment
  • -d|–home ##修改用户的家目录通常和-m选项一起使用
  • -e|–expiredate ##指定用户帐号禁用的日期,格式YY-MM-DD
  • -f|–inactive ##用户密码过期多少天后采用就禁用该帐号,0表示密码已过期就禁用帐号,-1表示禁用此功能,默认值是-1
  • -g|–gid ##修改用户的gid,改组一定存在
  • -G|–groups ##把用户追加到某些组中,仅与-a选项一起使用
  • -l|–login ##修改用户的登录名称
  • -L|–lock ##锁定用户的密码
  • -m|–move-home ##修改用户的家目录通常和-d选项一起使用
  • -s|–shell ##修改用户的shell
  • -u|–uid ##修改用户的uid,该uid必须唯一
  • -U|–unlock ##解锁用户的密码

5.1.4 切换用户

  • 1.切换用户的命令为:su username 【username是你的用户名哦】
  • 2.从普通用户切换到root用户,还可以使用命令:sudo su
  • 3.在终端输入exit或logout或使用快捷方式ctrl+d,可以退回到原来用户,其实ctrl+d也是执行的exit命令
  • 4.在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加-,例如:【su - root】
  • $表示普通用户
  • #表示超级用户,也就是root用户

5.1.5 修改用户密码
passwd 用户名

六、用户组管理

每个用户都有一个用户组,系统可以对一个用户的所有用户进行集中管理(开发、运维、测试、root)。不同Linux系统对用户组的规定有所不同,如linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

组的增加、删除和修改实际上就是对/etc/group文件的更新

6.1 创建用户组 groupadd

通过groupadd 组名 完成组的创建,创建完用户组就可以得到一个id。

cat /etc/group

groupadd -g 数字:若不指定就是自增1

6.2 删除用户组groupdel 用户组

6.3 修改用户组的权限信息和名字 groupmod

groupmod 选项 用户组

  • -g GID 为用户组指定新的组标识号。
  • -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • -n新用户组 将用户组的名字改为新名字

七、磁盘管理


df(列出文件系统整体的磁盘使用量)

du(检查磁盘空间使用量)


后端开发需要掌握的Linux技能树(LinuxC/C++)_命令模式_07

后端开发需要掌握的Linux技能树(LinuxC/C++)_后端_08

八、进程管理

文件,权限。系统

对于我们开发人员来说,其实Linux更多偏向于使用而已。

在Linux中,每个程序都是有自己的进程,每个进程都有一个id号。

每一个进程,都会有一个父进程。

一般的服务都是后台进行的,基本的程序都是前台运行的。

ps 查看系统中正在执行的各种进程信息

ps -xx:


  • - a:显示当前终端运行的所有的进程信息(当前进程)
  • -u :以用户的信息显示进程
  • -x:显示后台运行进程的参数

ps -aux  查看所有的进程
ps -aux |grep mysql
ps -aux |grep redis
ps -aux |grep java

# 在linux中这个叫做管道符 A|B
grep:查找文件中符合条件的字符串
复制代码
ps -ef |grep mysql #看父进程一般通过目录树查看

pstree
-p:显示id
-u:显示用户组

结束进程: kill -9 进程的id (死循环才会杀进程)

九、centos软件安装

1、​​jdk​

2、​​node.js​

3、​​Nginx​

4、​​redis6​

5、​​mysql8方式一​

6、​​mysql8方式二​

十、补充

1、将文件的部分内容复制到另一个文件

head -n 100000 data.txt > sample.txt

2、清空文件

方法1、在非编辑状态下使用快捷键gg跳至首行头部,再使用dG即可。

方法2、cat /dev/null > /var/log/yum.log(替换为需要清空内容文件名)

方法3、> /var/log/yum.log(替换为需要清空内容文件名)

3、查看文件大小

du -h --max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,子目录大小等等,这个比较实用。