linux 快速入门

154 阅读19分钟

写在前面

本文介绍了linux 以及常用命令(以ubuntu18.04为例),能够应付实际开发中的一般场景,重点在文件权限和用户组管理这两节,其涉及到了linux的核心问题——权限,其次关于crontab 系统定时任务,其涉及到了Shell脚本的知识,关于Shell可以参考这篇文章:Shell 脚本快速入门

linux 基础(以ubuntu18.04为例)

linux文件分类

  • 白色-----普通文件
  • 蓝色-----目录
  • 绿色-----可执行文件
  • 红色-----压缩文件
  • 青色-----链接文件
  • 黄色-----设备文件(例如管道文件FIFO)
  • 灰色-----其他文件

linux 目录

linux下的目录结构:树状

  • / 根目录,所有文件的起源 image.png
  • /bin-----此目录下存有所有命令对应的可执行程序 image.png
  • /etc-----存放所有配置文件的目录 image.png
  • /home-----存放当前linux有多少个用户(普通用户) image.png
  • /media-----linux 会自动将识别到的外部设备(例如U盘)挂载到该目录下 image.png
  • /opt-----给linux安装的额外软件所在的目录,也有软件装在/userimage.png
  • ~-----家目录下的用户目录(/home/登录的用户名/) image.png
  • /mnt-----用户可以将识别到的外部设备手动挂载到该目录下 image.png

登录后默认位置在/home/登录的用户名/~目录下

linux 文件权限

image.png

上图每一行就是该目录下对应的一个文件。

- rwxrwxr-x 2 sl-ubantu sl-ubantu 3882 2月 22 2023 thread_pool.cpp

  • 第一个参数:-,标识该文件的类型,其中-表示普通文件,d表示目录,p表示管道文件,s表示socket文件。
  • 后面九个参数:rwxrwxr-x,每相邻三个为一组,共三组,分别表示文件所有者,同组成员,其他人对该文件的权限,rwx表示读写与执行权限,某人没有某个权限,就在其对应的位置上用-来代替。
  • 第十一个参数:2,表示该文件的硬链接个数
  • 第十二个参数:sl-ubantu,表示该文件或目录的所属者
  • 第十三个参数:sl-ubantu,表示该文件或目录的所属主组
  • 第十四个参数:3883,表示该文件或目录占用的存储空间
  • 第十五个参数:2月 22 2023,表示该文件或目录最后的修改时间
  • 第十六个参数:thread_pool.cpp,表示文件名

linux用户和用户组管理

用户管理

注意:linux中安装有些软件时,系统会自动为其创建一个单独的用户(该用户作为该软件的安装目录的所有者和所属组),其对应的安装目录只有root用户可以进行操作,其他用户只有读权限-----如安装mysql服务时,系统会自动创建一个叫mysql的用户和组作为文件夹mysql的所有者和所属组。

sudo adduser 用户名 添加(创建)用户(默认是非root用户,其不能使用sudo)

image.png su 用户名1 由当前用户切换到用户1

image.png sudo useradd -s /bin/bash -g 用户所属组 -d /home/用户名 -m 创建用户并分配到指定组中

  • /bin/bash 叫命令解释器
  • /home/用户名 叫用户目录

sudo passwd 用户名 修改用户密码

  • 用户名 缺省则默认当前用户

image.png sudo deluser 用户名1 删除用户1(不会删除/home下的目录)

sudo userdel -r 用户名1 删除用户名1(会删除/home下的目录)

image.png

这里的邮件池是因为创建kk用户时信息没填写完整。

用户组管理

默认情况下,linux系统的每个用户都各自默认属于与自己同名的组(在创建用户时就已经创建了对应的组),但在实际开发中,可能会出现同一个组下有多名用户的情况,linux可以对同一组的所有用户进行集中管理。

  • 输入命令 sudo groupadd 组名 创建一个新的组 image.png
  • 输入命令 sudo groupdel 组名 删除对应的组
  • 输入命令 sudo cat /etc/group 查看当前用户所属组下的所有用户(如下图)

捕获21.PNG

红框内,参数1 xitian 表示该组组名以及该组的创建用户,1001 表示该组的id1001, 最后一个冒号后面表示该组的所有附加用户

一个用户只能有一个主组和多个附加组,主组一般不改动,默认的主组就是用户所属的那个同名组。

  • 输入命令 sudo usermod -g 要切换到的目标主组名 用户名1 切换用户1所属的主组

附加组不会影响到用户创建的文件,只会影响到权限(通过命令修改同组其他用户的文件权限)

  • 输入命令 sudo usermod -aG 要添加到的目标附加组名 用户名1 添加用户1到对应的附加组当中

  • 输入命令 sudo deluser 用户名1 组名 将用户1踢出对应的组

sudo权限管理

sudo组,在该组的用户可以使用sudo命令(最高权限),默认linux系统创建的初始用户在此组当中(以附加用户的形式),若想要让某个用户拥有使用sudo的权限,则需要将对应用户添加进sudo组(以附加用户的形式)

linux 常用命令

pwd 查看当前工作目录所在的绝对路径

ls 列出当前目录所有文件(不包括隐含文件)

ls -a 列出当前目录文件(包括隐含文件)

ls -l 列出当前目录下文件的详细信息

image.png

ls - lhd 指定目录 (-l表示详细信息,h显示属性,d显示大小) 查看指定目录下所有文件的信息

cd /路径1 切换到对应路径1下(注意对应路径前要加上/)

cd .. 回当前目录的上一级目录

cd - 回上一次所在的目录

cd ~cd 回当前用户的宿主目录(/home/用户名下),每次登录都默认在此路径下

image.png mkdir 目录名 创建一个目录(只能创建一层目录)

mkdir 目录名1/目录名2 -p 创建多层嵌套目录

rmdir 空目录名 删除一个空目录

rmdir 空目录名1/空目录名2 删除多层嵌套空目录

rm 文件名删除文件

rm -r 目录名 删除一个目录下的一切,递归删除,无论是不是空

rm -rfi 目录名 (-r表示递归删除操作,-i表示询问用户是否进行删除操作,f表示删除不存在的文件时不会出现警告) 删除一个目录下的一切

cp 要拷贝的文件2 文件1 将文件2拷贝到文件1中

cp 目录1/ 目录2 -r 将目录1中的内容递归拷贝到目录2中

mv 路径1/文件名 路径2/ 移动文件位置到指定路径2下

mv 文件名 文件新名称 在当前目录下将文件改名

touch 文件名 创建文件

cat 文件名 查看文件

tail -c 字符数n 文件名 查看文件末尾最后n个字符的内容

tail -c +字符数n 文件名 查看文件中从第n个字符开始到最后的所有内容

tail -n +行数n 文件名 查看文件中从第n行开始到最后的所有内容

tail -n 行数n 文件名 查看文件中最后n行的内容

tail -f 文件名实时监控该文件,文件一旦有更新,就立马把内容输出到终端

tail -n 行数n -f 文件名 查看文件中最新更新的n行内容

ln -s 文件所在路径(必须使用绝对路径) 快捷方式名 为文件创建软链接(快捷方式)

ln 文件名 硬链接名 为文件创建硬链接(类似C++中的引用)

which 命令 找到该命令对应的命令解释器

chmod who [+/-/=] [mode] 文件名 修改对应文件的权限

  • 参数who 表示修改谁的权限,可以填写:文件所有者u,文件所属组组员g,其他人o,所有人a(a可省略)
  • 参数[+/-/=] 表示对权限的操作,可以填写:+:添加权限,-:删除权限,=:覆盖权限
  • 参数[mode] 要进行操作的权限(r,w,x),与上一个参数结合起来看。

chmod u + x 文件名 修改对应文件的权限

chmod 777 文件名 修改对应文件的权限(数字法)

  • r:用4表示,w用2表示,x用1来表示,共三组,每组三位,均用二进制来表示,没有的权限对应的位置上用0来表示。

chown 所有者名1 文件名或目录名 将文件或目录给予所有者1,即更改文件或目录的所属者

chown -R 所有者名1 文件名或目录名 将多级目录递归地给予所有者1,即更改该多级目录的所属者

chgrp 组名 文件名或目录名 改变文件或目录的所属组

目录必须要有执行权限(方便cd进入),且目录的创建和目录内容更改只有目录所属者才有权限(一般目录默认所有者为可以使用sudo初始root用户————这里是因为创建目录的命令要用到sudo权限才能执行)。

文件的查找

locate /目录1/名字1 搜索目录1下的所有文件名或目录名以名字1开头的文件或目录, 如果搜索到的是目录的话,会将目录下的所有文件的存放路径依次返回,搜索到文件的话,就返回该文件的存放路径

find 要查找的目录 -name "文件名" 按文件名查找

find 要查找的目录 -user 用户名 按查找所有者为指定用户的所有文件和目录

find 要查找的目录 -size +10k 大于10k的文件(按文件大小找)

find 要查找的目录 -size -10k 小于10k的文件(按文件大小找)

find 要查找的目录 -type d|f|p 按文件类型查找(d目录,f普通文件,p管道文件)

find 要查找的目录 -ctime +n 在指定目录下查找n天前创建的文件

find 要查找的目录 -ctime -n 在指定目录下查找n天内创建的文件

find 要查找的目录 -mtime +n 在指定目录下查找n天前修改的文件

find 要查找的目录 -mtime -n 在指定目录下查找n天内修改的文件

find 要查找的目录 -atime +n 在指定目录下查找n天前访问的文件

find 要查找的目录 -atime -n 在指定目录下查找n天内访问的文件

find 要查找的目录 -perm 460 在指定目录下查找权限为r--rw---- 的文件

文件内容的查找

命令 | grep -r "查找的内容" 根据命令执行结果,按照内容查找,将其他内容展示出来

命令 | grep -v "要过滤的内容" 根据命令执行结果,按照内容进行过滤

grep -r "查找的内容" 查找路径 按照内容进行查找,查找指定路径下所有文件的 所有内容当中,指定的内容

grep -v "过滤的内容" 查找路径 按照内容进行过滤,将其他内容展示出来

grep "www" /var/log/test.log 查找test.log文件当中所有的 "www"字符串内容

grep "^指定内容" 文件名 查找文件当中 以指定内容开头的 文件内容

grep "指定内容$" 文件名 查找文件当中 以指定内容结尾的 文件内容

grep "^指定内容1 .* 指定内容2$" 文件名 查找文件当中 以指定内容1开头,指定内容2结尾 的文件内容(.* 表示匹配任意字符)

指令1 | 指令2 当中 | 表示管道符,其能够将前面指令运行的结果传递给后面的指令(作为后面指令的输入)

浏览文件内容

浏览文件内容 的命令: less

  • 浏览test.log文件内容:less /var/log/test.log退出less命令:回车enter键--->输入:wq

  • 同时浏览test.log与test1.log文件内容:less /var/log/test.log /var/log/test1.log(输入【:n】切换下一个文件,输入【:p】切换上一个文件)

  • 浏览test.log文件内容:less /var/log/test.log(按j键表示下一行,按k键表示上一行,按G键表示移动到最后一行,按g键移动到第一行,按ctrl + F键表示向前移动一屏,按ctrl + B键表示向后移动一屏,按ctrl + D键表示向前移动半屏ctrl + U键表示向后移动半屏

U盘挂载

/media/ 默认U盘挂载到此目录下

sudo mount 设备名字 要将U盘挂载的目录位置 自定义挂载U盘

  • 设备名字通过sudo fdisk -l命令来查看
  • 要将U盘挂载的目录位置 通常是/mnt

sudo umount 要卸载的目录 卸载U盘

压缩包管理

gzip与bzip2

gzip-----.gz格式的压缩包

bzip2-----.bz2格式的压缩包

gzip 文件所在目录/*.txt 压缩当前目录下所有的txt文件,每个txt文件单独压缩,不保留原文件

gzip -dv 压缩文件所在目录 解压文件,不保留原压缩文件

bzip2 -k 压缩文件所在目录 解压文件,保留原压缩文件

bzip2 压缩文件用法与gzip相似,两者都只能压缩文件,不能压缩目录

tar压缩(常用)

参数: c 压缩, x 释放, v 显示提示信息, f 指定压缩文件名字, z 使用gzip方式压缩, j 使用bzip2压缩

必须使用zj参数,否则该命令只对文件或目录进行打包而不压缩

压缩文件: tar zcvf 生成压缩包的名字 要压缩的文件所在路径

  • 生成压缩包的名字 : xxx.zip.gzxxx.zip.bz2

解压文件到目标目录:tar zxvf 压缩包的名字 -c 目标目录

zip压缩

压缩文件: zip 压缩包名 要压缩的文件或目录所在路径

解压文件到目标目录: unzip 压缩包名 -d 目标目录

  • -d 目标目录 :不加,默认当前目录

管理Ubantu上的各项服务

开启和关闭各项服务

当你在ubantu上下载了一个服务,如redismysql,你可以通过以下命令来管理这些服务 sudo systemctl start|stop|restart|status 服务名

其中 start|stop|restart|status 表示任选其一即可,如命令:sudo systemctl status 服务名 表示查看对应服务的状态

服务自启动
  • 通过命令systemctl list-unit-files查看服务(这里指那些系统设置的自启动服务)开机启动的状态
  • 通过命令systemctl disable 服务名 来关闭指定服务的自启动
  • 通过命令systemctl enable 服务名 来指定服务自启动
定时关机
  • 通过命令sudo shutdown -h 时间可以使系统在指定时间过后,自动关机,时间单位为分钟
修改主机名

捕获18.PNG 如上图,若想修改主机名,可以采用以下命令:sudo hostnamectl --static set-hostname 修改后的主机名,执行完此命令后,需要重启系统一下才能生效

host映射

当我们需要输入主机名,一般是输入该主机对应的ip地址,如下图,每次都这样做会非常麻烦,因此我们需要一个host映射(主机映射) 捕获12.PNGwindows操作系统的此路径下C:\Windows\System32\drivers\etc,用写字本打开文件hosts,进行如下更改

捕获19.PNG 更改过后,只需要输入该主机名,windows系统会自动将其自动映射为对应的ip地址

linux 终端

linux 共有七个终端, tty7 为图形界面终端(默认终端),tty1---tty6为文字界面终端

通过键盘上按键ctrl + alt + f1---f7来切换不同终端

tty4: image.png

tty7(默认):

image.png

进程管理

ps a 查看当前操作系统下的所有终端的应用程序

image.png ps au 查看所有终端应用程序的更详细信息

image.png ps aux 查看没有终端的应用程序(守护进程)

image.png ps aux|grep bash 按照内容"bash"查找进程

image.png kill -l 查看所有信号 image.png kill -SIGKILL 进程号 杀死对应进程

env 查看当前进程的环境变量

image.png env|grep PATH 按照内容"PATH"查找当前进程的环境变量

image.png

linux下环境变量的格式 key:value:value ----- 一个键可以对应多个值

网络相关命令

ifconfig 显示网络信息,可以查看该设备的ip地址,广播地址

image.png

ping ip地址 测试本设备能否与对应ip地址的设备正常通信

image.png

vim编辑器的使用

vim编辑器是由vi发展而来的一个更加强大的linux通用的文本编辑器,该文本编辑器是在终端窗口使用的

安装命令 sudo apt install vim

用vim 打开文件 vim 文件名

一般模式

vim打开一个文件,就进入一般模式(默认模式)了,该模式下,文件内容不可更改,可以使用键盘上的【上下左右】按键来移动光标,此模式下常用快捷键如下:

yy 复制光标所在的当前行内容

y +数字+ y 复制从光标所在行到后n行的内容

p 将内容粘贴到光标所在的位置

u 撤销上一步

dd 删除光标所在的当前行内容

d +数字+ d 删除从光标所在行到后n行的内容

编辑模式

在一般模式当中,按下按键i即可进入编辑模式,在编辑模式下,可以任意修改该文件的内容,按下按键esc就可以退出该模式

指令模式

在以上两种模式当中,按下按键: 即可进入指令模式,按下按键esc就可以退出该模式,该模式下常用快捷键如下:

image.png

linux时间设置

  • 输入命令 date 会显示当前的系统时间
  • 输入命令 date +%Y%m%d 显示当前时间(年月日,纯数字)
  • 输入命令 date "+%Y-%m-%d %H:%M:%S" 显示当前时间(年-月-日 时:分:秒,纯数字)
  • 输入命令 date -d +1day 在当前系统时间下加一天,并输出出来

其他命令

man 命令或函数名 查看该命令或函数对应的官方手册

  • man man 手册首页 image.png
  • man cat cat命令对应的手册位置

image.png

history 查看该系统本地的所有执行过的历史命令

echo 字符串 将该字符串显示(输出)在终端上

image.png $ 这个符号用于从变量中取值

  • $aa 将变量aa中的值取出来

常用快捷键

ctrl + C 强制结束进程

ctrl + L 清屏

ctrl + Q 退出

ctrl + U 清除当前已敲的命令

Tab键 查看提示(可以防止敲错)

SSH远程连接

当你的linux服务器不在身边时,可以通过ssh服务来进行远程连接,以方便你的使用

Ubantu对应服务的安装

要想使用ssh远程服务,ubantu需要提前安装部署,打开终端,输入命令:

sudo apt update

sudo apt install -y ssh

Xshell 下载与安装

  1. 下载官网:家庭/学校免费xshell

  2. 点击安装,一路next即可 image.png

  3. 安装完成后,打开xshell软件,新建会话

捕获11.PNG

  1. 进行对应的配置,并记住用户名和密码

捕获12.PNG

捕获13.PNG

捕获14.PNG

5.点击确定,连接成功如下图

image.png

至此,你就可以通过Xshell来远程操作你的linux 服务器

Xftp文件传输工具

通过 Xftp文件传输工具,我们可以很方便的让虚拟机当中的ubantu(linux)与本地的windows操作系统进行文件互传

Xftp下载与安装

  1. 下载官网:家庭/学校免费xshell
  2. 点击安装,一路next即可 

捕获16.PNG

  1. 安装完成后,打开xftp软件,新建会话(方式和上面xshell类似)
  2. 新建完成后,如下图

捕获17.PNG

linux硬件监控

通过命令去查看管理linux系统的硬件资源,这就叫硬件监控

磁盘空间

  • 输入命令 df -h 查看硬盘空间使用情况,重点关注根目录下的情况

捕获22.PNG

  • 输入命令 du -h 文件名或目录名 查看该文件或目录所占用的磁盘空间
  • 输入命令 du -ah 目录名 查看该目录以及其内部的所有文件各自所占用的磁盘空间

服务器内存

输入命令 free -m 查看linux服务器的总体内存(主存)情况

捕获29.PNG

进程

  • 输入命令ps -aux查看所有进程,一般配合grep来使用,即 ps -aux | grep xxx

image.png 结果如下:

捕获26.PNG image.png image.png

  • 输入命令ps -ef查看所有进程以及其各自对应的子进程,一般配合grep来使用,即 ps -ef | grep xxx 结果如下:

捕获28.PNG

image.png

关于这两种命令,若你重点关注进程对CPU磁盘的占用情况,则你可采用第一种命令,若你重点关注父子进程的关系,则你可采用第二种命令。

  • 输入命令 kill 进程号 强制关闭对应的进程

网络端口占用

  • 输入命令 sudo netstat -nlp | grep 要查找的内容 根据指定内容查看对应端口号是否被占用

捕获30.PNG

crontab 系统定时任务

通过设置crontab任务让命令(脚本)在到达指定时间时自动执行。

定时任务的查询与删除

  • 输入命令crontab -l 查询当前用户设置的所有定时任务
  • 输入命令crontab -r 删除当前用户所有的crontab任务 image.png

编辑定时任务

  1. 重新启动crond服务:sudo systemctl restart cron
  2. 通过EDITOR环境变量,在执行crontab时选择编辑器,输入命令:EDITOR=vim crontab -e,命令执行后,进入crontab系统定时任务的编辑阶段,如下图:

捕获32.PNG 3.开始编辑,通过输入五个*号来定时

image.png 其中 */n 表示每隔n个时间执行一次,例如 */20 4,8 * * * 表示每天4点,8点时,每隔10分钟执行一次命令

  1. 确定好定时后,在定时后面编写脚本,然后退出保存该crontab文件即可,系统到了指定的时间就会自动执行脚本