Linux入门到进阶

写这篇文章的目的:1、记录或回顾已经学习过的linux知识点;2.同时想分享给大家作为学习的参考。如果你觉得还不错,可以点赞关注哦!

1. linux入门
1.1 多虚拟终端

可以使用ctrl + alt + f[1~7]命令切换终端。

1.2 目录结构

在这里插入图片描述
/home:普通用户家目录

/root:超级用户的家目

/etc:存放软件的配置文件。一般来说,通过yum(pip)自动安装的软件,配置文件一般都在/etc下。
mysql的配置文件在/etc/my.conf,redis的配置文件在/etc/redis.conf。

/sbin:存放可执行命令 文件

/bin:存放可执行命令 文件

/usr/local/bin:存放可执行命令 文件

/opt:存放额外安装的软件目录。比如我们要安装nginx和python3软件,正规的存放目录是/opt。

/tmp:存放临时文件,不重要的文件、文件夹

/var:存放系统日志文件居多,比如存放nginx,python,django等等日志

另外注意了,linux下绿色文件代表可执行文件,蓝色文件代表文件夹,白色文件代表普通文件。

1.3 文件系统(面试题)

用户在硬件存储设备中执行的文件建立,写入,读取,修改,转存与控制等操作都是依赖文件系统完成的。文件系统的作用是:合理规划硬盘,保证用户正常使用。

Linux系统支持数十种文件系统,常见文件系统如下:

  • Ext3: 是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能 自动修复数据的不一致与错误。
  • Ext4: Ext3 的改进版本,作为 RHEL 6 系统中的默认文件管理系统,它支持的存储容 量高达 1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4 文件系统能够批量分配 block 块,从而极大地提高了读写效率。
  • XFS:是一种高性能的日志文件系统,而且是 RHEL 7 中默认的文件管理系统。它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的 日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为 18EB, 这几乎满足了所有需求。XFS文件系统对云计算、容器虚拟化支持性特别好。

cat /etc/fstab:检查linux的文件系统。fstab是用来存放文件系统的静态信息的文件。

面试的时候很可能让你写下来

1.4 命令的组成格式
[root@instance-mtfsf05r ~]# 

在这里插入图片描述

1.5 目录的创建
  • 普通的目录创建:mkdir a,创建一个a文件夹。

  • 递归的创建:mkdir -p a/b c/d,在当前目录创建一个a文件夹和c文件夹,并且a文件中和c文件夹中分别有b和d文件夹。

  • 递归创建几个文件夹:mkdir -p ./test/{a,b,c,d},创建test文件夹,里面有 a,b,c,d四个文件夹。直接创建 a,b,c,d 四个文件夹,可以使用mkdir {a,b,c,d},当然这不是递归创建了,记得有这样的语法格式。

1.6 文件的创建
  • 创建文件:touch xxx.txt,如果xxx.txt文件存在,再次使用这个指令会更改文件的创建(或修改)时间。
  • 修改文件的更改时间戳:touch -t ‘09280920’ xxx.txt
1.7 查看文件的详细信息
  • 显示文件详细信息:stat xxx.txt,使用此命令可以看到文件的权限、最近访问时间、最近更改时间、最近改动时间等信息。如果touch一下这个命令,最近访问时间、最近更改时间和最近改动时间都会发生变化,且变成相同的时间。如果使用 touch -t 更改时间戳,最近访问时间和最近更改时间改成时间戳的时间,但是最近改动时间不能改成指定的时间戳。
  • 显示文件权限:stac -c %a xxx.xtstac -c %A xxx.txt
thanlon@plus-book:~$ stat -c %a 1.txt 
644
thanlon@plus-book:~$ stat -c %A 1.txt 
-rw-r--r--
1.8 vim编辑器

先看一下vi编辑器的用法,

  • 打开文件:vi test.py,使用此命令后,进入命令模式,等待用户输入命令。用户可以使用i o a进入编辑模式。向文件中写完内容后,回到底线命令模式(末行模式),可以输入命令保存和退出。

所有的类 Unix 的系统都会内建 vi 文本编辑器,其它的文本编辑器则不一定存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的功能,可以主动地以数字颜色辨别语法的正确性,方便程序设计。相对于vi,vim可以自定义快捷键,也提供语法检测。

1.9 查看文件内容

① cat命令

  • 查看文件显示行号:cat -n xxx.py
  • 查看文件:cat xxx.py
  • 在每一行的结尾加上$符号:cat -E xxx.py,可以扩展cat -En xxx.py
  • 追加内容到文件中:
thanlon@plus-book:~$ cat >> love.txt << EOF
> THANLON
> LOVE
> KIKU
> EOF
thanlon@plus-book:~$ cat -En love.txt 
     1	THANLON$
     2	LOVE$
     3	KIKU$

cat 只适合查看比较短的文本,cat命令执行后会在内从中读取内容,展示在终端上。如果是一个超大的文件,可能会占用很大内存。如果我们cat一下二进制命令,如cat /usr/bin/ls,就会占用很多内存(可执行命令是已经被编译成机器码的那种命令)。看长文本使用more命令。

② more命令
查看文本会以百分比形式告知已经看了多少内容,命令是more /etc/passwd,使用回车键向下读取内容。按空格是翻页,按b是上一页。

1.10 常用快捷键

tab:自动补全命令、文件夹和目录名
logout:退出当前会话
ctrl + l/clear/cls:清楚终端显示
ctrl + c:中止当前操作

1.11 输出内容到终端
  • 默认显示在终端上:echo ‘thanlon’
  • 将信息写入文件中:echo ‘kiku’ > /tmp/test.txtecho ‘kiku’ >> /tmp/test.txt,一个是覆盖写,一个是追加写。
1.12 特殊符号
  • 追加重定向,把内容追加到文件的结尾:>>,理解为with open的a模式
  • 重定向符号,清空原文件的所有内容:>,然后把内容覆盖到文件中,理解为with open的w模式。
  • 输入重定向,把命令信息写到前面的命令<
  • 将输入结果输入重定向<<
1.13 文件的复制
  • 将文件拷贝到某目录下:cp xxx.py tmp/
  • 拷贝文件:cp xxx.py tmp.py
  • 拷贝文件顺便改名:cp xxx.py tmp/test.py
  • 递归复制目录以及目录的子孙后代:cp -r xxx1 xxx2
  • 复制文件并且保持文件的属性不变:cp -p
  • 操作文件前,先备份:cp test.py test.py.back
1.14 文件的移动
  • 把文件移动到文件夹中:mv old.txt tmp/
  • 修改文件的名字,重命名:mv old.txt new.txt
1.15 文件的删除
  • 删除空的目录:rmdir tmp
  • 需要删除的确认:rm -i test.py,等价于rm test.py,这里使用了alias。这是一个安全机制,防止失误操作。
  • 强制删除:rm -f test.py
  • 递归删除目录和目录中的文件:rm -r tmp
  • 强制删除目录及子目录以及目录中的所有文件:rm -rf tmp
1.16 查找命令
  • 按照文件名查找文件:find / -name xxx.txt,还可以用*号匹配find / -name *.txt
  • 查找某一类型的文件:find / -type xxx.txt,默认类型是目录和文件。type的相关的参数有b:块设备文件;d:目录;c:字符设备文件;p:管道文件;l:符号链接文件;f:普通文件;s:socket文件
  • 找到/tmp下所有以.txt结尾的文件:find /tmp/ -type f -name *.txt
  • 找到/etc下所有名字以host开头的文件:find /etc/ -name host*
1.17 管道命令

linux提供的管道符号"|"将两条命令隔开,管道符左边命令的输出会作为管道复右边命令的输入:
在这里插入图片描述
常见的使用方法:

  • 检查python程序是否启动:ps -ef|grep python,ps -ef是查看进程,通过grep过滤与python有关的进程
  • 找到/tmp目录下所有txt文件:ls /tmp|grep ‘.txt’
  • 检查ngnix的端口是否存活:netstat -tunlp|grep nginx,netstat -tuple是查看端口,可以通过管道符号加grep过滤条件进行筛选
1.18 grep命令

grep是global search regular expression(RE) and print out the line(全面搜索正则表达式并把行打印出来)的英文简写。它是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

  • 语法:grep [参数] [–color=auto] [字符串] filename
  • 参数-i是忽略大小写,-n是输出行号,-v是反向选择,–color=auto是给关键词部分添加颜色(默认)
  • 在文件中找某些内容,grep ‘xxx’ test.txt,如:grep ‘allow_host’ settings.py。也可以输出行号,grep -n ‘allow_host’ settings.py。也可以反向选择,grep -nv ‘allow_host’ settings.py表示查找除了’allow_host’的那一行。
  • 找到以#开头的内容:grep ‘^#’ redis.conf
  • 过滤掉以#开头的内容:grep -v ‘^#’ redis.conf
  • 过滤掉空行:grep -v ‘^$’ redis.conf,^ $表示以什么开头以什么结尾
1.19 head和tail命令

head:显示文件前n行,默认前10行
tail: 显示文件后n行,默认后10行

  • 查看前两行:head -2 tmp.txthead -n 2 tmp.txt
  • 查看后两行:tail -2 tmp.txttail -n 2 tmp.txt
  • 持续刷新显示:tail -f tmp.txt,如tail -f /var/log/mysql.log常用于对日志文件进行监控,监测日志实时写入的信息。这个写入是一个追加。
  • 显示文件10~30行:tail -n 30 tmp.txt | tail -n 21
1.20 sed命令

sed命令和grep命令一样用于对文本进行过滤,还可以用于修改文本。sed命令的参数有,s表示替换指令,d表示删除指令,g表示全局替换。

  • 找到文件中的root字符串,全局替换为thanlon的命令:sed ‘s/root/thanlon/g’ tmp.txt但是不会写入到文件,只会返回替换结果。
  • 找到文件中的root字符串,全局替换为thanlon,写入到文件中的命令:sed ‘s/root/thanlon/g’ tmp.txt。-i参数:写入到文件,不会返回命令执行结果,直接生效。
  • 找到第2行删除:sed -i ‘2d’ tmp.txt
  • 删除文件中的空白行:sed -i ‘/^$/d’ tmp.txt,^ 和 $ 分别表示以什么开头和以什么结尾。
1.21 alias命令

使用alias可以给命令添加别名,

  • 给rm添加提示:alias rm=“echo ‘你不可以使用rm命令’”
  • 取消rm的别名:unalias rm
1.22 which命令

which命令用于查找命令的绝对路径,环境变量$ PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的孩子令。相似还有whereis和whoami。

  • 查找cd的路径:which python,终端打印:/usr/bin/cd
  • 查找python的安装路径:whereis python
  • 查看linux上所有用户:who
  • 查看当前用户:whoami
1.23 scp命令

scp命令用于linux之间复制文件和目录的命令,scp是secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。参数-r:递归复制整个目录;-v:详细方式输出,比如传输过程中输出debug信息;-q:不显示传输进度条;-C:允许压缩。

  • 传输本地文件到远程主机:scp 本地文件 远程用户名@远程ip:远程文件夹/
  • 传输本地文件夹到远程主机:scp -r 本地目录 远程用户名@远程ip:远程文件夹/
  • 复制远程主机文件到本地:scp 远程用户名@远程ip:远程目录/远程文件 本地目录/
  • 复制远程主机目录到本地:scp -r 远程用户名@远程ip:远程目录/ 本地目录/
# 将本地Nginx目录上传到远程主机的/root/目录下,修改目录名为ssl (ssl目录没有会被创建)
scp -r Nginx/ root@106.12.115.136:/root/ssl
# 将本地Nginx目录上传到远程主机的/root/ssl/目录下,注意与上面的区别
scp -r Nginx/ root@106.12.115.136:/root/ssl/
1.24 du命令(面试题)

du命令是用来显示目录或文件的大小,会显示指定目录或文件所占用的 磁盘空间。参数有-s:显示统计,-h是以K,M,G为单位显示,可读性强。

  • 查看/var/log/目录的大小:du -sh /var/log/
  • 查看文件的大小:du -h tmp.txt
  • 请写出如何统计/var/log/django文件夹的大小:du -sh /var/log/django面试题注意了。
1.25 top命令(面试题)

命令用于动态地监视进程活动与系统负载等信息。
在这里插入图片描述

  • 第一行:uptime,系统时间、主机运行时间、用户连接数(who)、系统每1分钟,5分钟,15分钟的平均负载。
  • 第二行:描述进程信息。进程总数、正在运行的进程数、睡眠的进程数、停止的进程数、僵尸进程数。
  • 第三行:描述 cpu 信息。0.2us是用户空间所占CPU百分比、0.3sy是内核空间占用CPU百分比、0.0ni是用户进程空间内改变过优先级的进程占用CPU百分比、99.5 id是空闲CPU百分比。0.0 wa是等待输入输出的CPU时间百分比、0.0 hi是硬件CPU中断占用百分比、0.0 si是软中断占用百分比、0.0 st是虚拟机占用百分比。
  • 第四行:
  • 第五行:
1.26 chattr命令

给文件加锁,只能写入数据,无法删除文件。

  • 给文件加锁:chattr +a tmp.txt
  • 给文件减锁:chattr -a tmp.txt
1.27 lsattr命令

查看文件隐藏属性:lsattr tmp.txt

1.28 时间同步

linux的date可以显示当前系统时间或者设置系统时间。-d参数(–date=string)显示指定时间而不是当前时间。在linux下系统时间和硬件时间不会自动同步,在linux运行过程中,系统时间和硬件时间以异步方式运行,互不干扰。硬件时间的运行,是靠Bios电池来运行,而系统时间是用CPU tick来维持。在系统开机的时候,会从Bios中获取硬件时间,设置为系统时间。

  • 格式化输出:date +"%Y-%m-%d"表示以“年-月-日”的格式显示当前时间hwclock表示以“年-月-日 十分秒”的格式显示当前时间。
  • 硬件时钟的查看:hwclock
  • 同步系统时间和硬件时间:hwclock -w表示以系统时间为基准,修改硬件时间。hwclock -s表示以硬件时间为基准修改系统时间。
  • 将当前系统时间与时间服务器(NTP)同步:ntpdate -u ntp.aliyun.com,u表示更新。
1.29 wget命令
  • 从网络中下载资源:wget https://www.baidu.com/
  • 递归下载资源:wget -r -p https://www.baidu.com/
1.30 开关机命令
  • 重启机器:reboot
  • 关闭机器:poweroff
1.31 apt命令

apt是Advanced Packaging Tool, 是Ubuntu下的安装包理工具,ubuntu下大部分的软件安装/更新/卸载都是利用apt命令来 实现的。

  • 安装软件:sudo apt install 软件名
  • 卸载软件:sudo apt remove 软件名
  • 更新可用软件包列表:sudo apt update
  • 更新已安装的包:sudo apt upgrade
1.32 补充
  • 查看系统版本:cat /etc/os-release
  • 查看内存、交换空间等信息:free -m
  • zip打包命令:将/tmp/目录下的所有目录/文件以及子目录/文件打包成filename.zip文件zip -qr filename.zip /tmp/;从压缩文件中删除目录文件zip -dv filename.zip a.b
  • zip解压缩命令:解压到当前目录unzip filename.zip;解压到指定目录unzip filename.zip /tmp/;压缩到指定目录,不覆盖原先的文件unzip -n filename.zip -d /tmp/;覆盖原先的文件使用unzip -o filename.zip -d /tmp/;查看压缩文件的目录但是不解压:unzip -v filename.zip
1.33 基础部分相关练习题

https://blog.csdn.net/Thanlon/article/details/101710508

2. linux进阶
2.1 vim

vim是从 vi 发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方,vim 则做到了。vim 可以说是程序开发者的一项很好用的工具。

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。vim 具有程序编辑功能,可以主动以字体颜色辨别语法的正确性,方便程序设计。

① vi/vim的三种工作模式
在这里插入图片描述
② 命令模式

w或者e:移动光标到下一个单词
b:移动光标到上一个单词
数字0:移动到本行的开头
$:移动到光标到本行结尾
H:移动光标到屏幕首行
M:移动光标到屏幕的中间行
L:移动光标到屏幕的尾行
gg:移动光标到文档的首行
G:移动光标到文档的尾行
ctrl+f:上一页
ctrl+b:下一页
/root:在整篇文章中搜索root字符串,向下查找,按n查找下一个
?root:在整篇文章中搜索root字符串,向上查找,安n查找下一个
%:找到括号的另一半
yy:拷贝光标所在行
dd:删除光标的所在行
D:删除当前光标到行尾的内容
dG:删除当前行到文档尾部的内容
p:粘贴yy操作所复制的内容
x:删除光标所在的字符
u:撤销上一步操作
3yy:拷贝光标所在的3行
5dd:删除光标所在的5行

③ 输入模式
在命令模式下按i o a即可进入输入模式。

④ 底线命令模式

:q:退出
:q!:强制退出
:w:生效写入的内容
:wq!:强制写入退出
:set num或set number:显示行号
:set nonu或set nonumbeer:取消行号
:数字:调到数字那行
:!command:暂时离开vim指令模式,执行command的结果,如:!ip a表示临时看一下ip信息,然后回到vim

随时按下ESC可以退出底线命令模式,进入命令模式。

2.2 网络相关的命令

如果你的电脑上没有ifconfig,只有ip addr,则需要通过yum -y install net-tools 来安装。

  • 查看网卡的ip地址:$ ifconfig,直接输入ifconfig会列出已经启动的网卡,也可以输入ifconfig单独显示eth0的信息。

在这里插入图片描述

who1:网卡的代号
lo:回环地址loopback
inet:IPv4的ip地址
netmask:子网掩码
broadcast:广播地址
RX/TX:流量发/收情况,RX是发送(transport),TX(receive)
packets:数据包数
errors:数据包错误数
dropped:数据包有问题被丢弃的数量
collisions:数据包碰撞情况,数值大表示网络状况差
  • 启动/关闭一块网卡:$ ifup eth0表示启动一块网卡,$ ifdown eth0表示关闭一块网卡。此命令其实是调用网络哦服务配置文件/etc/init.d/network$ /etc/init.d/network start是启动网卡,$ /etc/init.d/network stop是停止网卡,$ /etc/init.d/network restart是重启网卡。ifup和ifdown是直接连接到/etc/sysconfig/network-scripts目录下搜索对应的网卡文件,例如ifcfg-eth0然后加以设置。
  • ip命令:ip结合了ifconfig和route两个命令的功能,ip addr show表示查看ip信息。
  • netstat命令用来打印linux中网络系统的状态信息,可得知linux系统的网络状态。一般使用netstat -tunlpa ,netstat指令可以查看到系统开启的端口。可以过滤指定端口,如指定3306端口:netstat -tunlpa | grep 3306
- t或--tcp:显示TCP传输协议的连接状态
- u或--udp:显示UDP传输协议的连接状态
- n或--numeric:直接使用ip地址,而不通过域名服务器
- l或--listening:显示监控中的服务器Socket
- p或--programs:显示正在使用Socket的程序识别码和程序名称
- a或--all:显示所有连线中的Socket
  • 测试网速的命令:speedtest-cli,centos中需要安装speedtest-cli,可以执行pip install git+https://github.com/sivel/speedtest-cli.git,使用git从git仓库中下载speedtest-cli,要保证系统已经安装git和python的pip模块。
thanlon@thanlon-master:~$ speedtest-cli 
Retrieving speedtest.net configuration...
Testing from China Telecom Shanghai (101.92.63.73)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Chinamobile-5G (Shanghai) [19.64 km]: 12.642 ms
Testing download speed................................................................................
Download: 4.60 Mbit/s
Testing upload speed......................................................................................................
Upload: 2.01 Mbit/s
2.3 查看系统信息的命令
  • 查看系统版本信息:$ cat /etc/redhat-release
  • 查看内核版本号:$ uname -r
  • 查看系统位数:$ uname -m
  • 查看内核所有信息:$ uname -a
  • 查看主机名:$ hostname
  • 修改主机名:$ hostnamectl set-hostname master,设置主机名为:thanlon-linux
  • 查看系统处理器个数:cat /proc/cpuinfo,或者使用$ top,然后按1
2.4 用户管理

/etc/passwd存放用户组信息,/etc/shadow存放用户密码,/etc/group存放用户组。注意:超级用户 root 切换到普通用户不需要密码;普通用户切换到 root 需要输入密码;普通用户较小,只能查看信息;$ 符号是普通用户的命令提示符,# 是超级用户的命令提示符。

  • 通过 id 命令查看用户信息:$ id root$ id thanlon
  • 普通用户的创建:$ useradd kiku表示创建用户kiku,可以通过tail -1 /etc/passwd查看kiku的信息
  • 普通用户的删除:$ userdel -rf thanlon,删除thanlon这个普通用户。-f 表示强制删除用户,-r 表示删除用户以及用户家目录。
  • 更改用户密码:$ passwd root根改root用户密码,$ passwd thanlon更改thanlon用户的密码。thanlon是普通用户,是管理员或具备管理权限的用户创建的,只能读,不能增删改。
  • 切换用户:$ su - root切换到root用户,$ su - thanlon切换到thanlon用户。su命令中间的 - 号很重要,意味着完全切换到新的用户,即环境变量信息也变更为新用户的信息。
  • 查看当前用户:$ whoami
  • 退出用户登录:$ logout
  • 创建用户组:$ groupadd it_dep表示添加用户组 it_dep。groupadd用于创建用户组,为了高效地指派系统中各个用户的权限,在工作中常常添加几个用户到一个组里面,这样可以针对一类用户安排权限。
  • sudo,sudo命令用来以其它身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经过的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入秘密。
sudo 【选项】【参数】
-b:在后台执行指令
-h:显示帮助
-H:将HOME环境变量设置为新身份的HEMO环境变量
-K:结束密码的有效期限,也就是下次执行sudo时便需要输入密码
-l:列出目前用户可执行与无法执行的指令
-p:改变询问密码的提示符
-s<shell>:执行指定的shell
-u<用户>:以指定的用户作为新的身份,若不加此参数,则预设以root作为新的身份
-v:延长密码有效期5分钟
-V:显示版本信息

sudo命令应用在什么时候应用?当用户权限小而想要执行更多权限的时候,可以以root身份去运行。这里由于配置sudo必须编辑/etc/sudoers文件,并且只有root才能修改。我们可以通过《
$ visudo命令直接编辑sudoers文件,使用这个命令还可以检查语法,比直接使用vim编辑更加安全。找到root ALL=(ALL:ALL) ALL,可以在其下面为普通用户thanlon添加在任何地方执行任何命令

# User privilege specification
root    ALL=(ALL:ALL) ALL
thalon ALL=(ALL:ALL) ALL # 允许thanlon在任何地方执行任何命令
2.5 文件与目录权限

在linux中,每个文件都有所有者和所属组,并且规定了文件的所有者,所属组以及其他人对文件的可读、可写、可执行权限。对于目录的权限来说,可读是读取目录的列表,可写是在目录内新增、修改和删除文件,可执行表示可以进入目录。

① 查看文件的权限

thanlon@plus-book:~$ ls -l tmp.txt 
-rwxrwxrwx 1 thanlon thanlon 30 919 19:38 tmp.txt

② 文件类型

- :一般文件
d:文件夹
l:软链接(快捷方式)
b:块设备,存储媒体文件为主
c:代表键盘、鼠标等设备

③ 文件权限

r:read是可读,可以用cat等命令查看
w:write是可写,可以编辑或者删除这个文件
x:executable可执行

④ 目录权限

r:可以对此目录执行ls列出所有文件
w:可以在这个目录创建文件
x:可以cd进入这个目录或者查看详细信息

⑤ 数字权限
在这里插入图片描述
⑥ 查看文件权限相关的命令

  • 查看root用户的权限:$ id root

⑦ 修改文件权限

  • 修改用户数主:$ chown thanlon xxx.txt,修改xxx.txt文件的所属主为thanlon。
  • 修改用户属组:$ chgrp 组名 file
  • 给属组加上可读可执行权限:$ chmod g+w test.txt$ chmod g+x test.txt
  • 给属主加上可读可执行权限:$ chmod u+w test.txt$ chmod u+x test.txt
  • 减去其他用户的可读权限:$ chmod o-r test.txt
  • 给文件添加可读可写可执行的权限:$ chmod 777 test.txt

⑧ 软链接
软链接也叫做符号链接,类似于windows的快捷方式,常用于安装软件的快捷方式配置python、nginx等。

  • 软链接格式:$ ln -s 目标文件 软链接名,可以通过软链接查看文件$ cat 软链接名。可以通过$ rm -rf 软链接地址来删除快捷方式,如果删除了目标文件,那么软链接也就没了意义。
2.6 PS1变量

PS1用于控制命令提示符,可修改:

  • 打印PS1:$ echo $PS1,打印结果是[\u@\h \W]$
PS1='[\u@\h \W \t]\$' # 可以添加一个时间
PS1='[\u@\h \w]\$' # 可以展示绝对路径

这个操作后,重启后变量配置会丢失,所以写入到系统的配置文件中,每次登录都加载。将“PS1=’[\u@\h \W \t]$’”写入到/etc/profile这个用户配置文件最下面一行中。systemctl stop firewalld这条命令可以停止防火墙。

2.7 tar解压命令

tar命令是用来压缩和解压文件,tar本身不具有压缩功能,它是调用压缩功能实现的。
常用的参数:

-c或--create:建立新的备份文件,压缩文件使用这个参数
-x或--extract或--get:从备份文件中还原文件,解压缩使用这个参数
-z或--gzip或--ungzip:通过gzip指令处理备份文件
-f<备份文件>--file=<备份文件>:指定备份文件
-v:显示操作过程
-j:支持bzip2解压文件
  • 压缩当前目录所有jpg结尾的文件:tar -zcvf all_pic.tgz *.jpg
  • 压缩文件:tar -zcvf xxx.tar.gz xxx.txt等价于tar -cvf xxx.tar xxx.txtgzip xxx.tar
  • 解压文件:tar -xvf all_pic.tgz,一般使用的解压:tar -zxvf tmp.tgz
  • 解压到指定目录:tar zxvf Python-3.8.0.targz -C /home/thanlon/
  • 解压xz结尾的文件:xz -d Python-3.8.0.tar.xz 然后使用tar -xf Python-3.8.0.tar
  • 解压缩bz2结尾的文件:tar -xjf xx.tar.bz2
2.8 gzip解压命令

gzip用来压缩文件,是一个使用广泛的压缩程序,被压缩的以“.gz”扩展名。gzip可以压缩较大的文件,以60%~70%压缩率来节省空间,更多的使用的是tar

-d或--decompress或----uncompress:加开压缩文件
-f或--force:强行压缩文件
-h或help:在线帮助
-l或--list:列出压缩文件的相关信息
-L--license:显示版本与权限信息
-r或--recursive:递归处理,将指定目录下的所有文件以及子文件目录一并处理
-v或--verbose:显示指令执行过程
  • 压缩当前目录每一个文件为.gz文件:gzip *
  • 解压缩文件并列出详细的信息:gzip -dv *
  • 显示压缩文件的信息,并不解压:gzip -l *
  • 压缩一个tar备份文件,扩展名是tar.gz:tar -cf my.tar my.pygzip -r my.tar
2.9 查看进程的状态

查看8000端口有没有正常启动,使用netstat -tunlp|grep 8000,那么查看进程有没有运行,可以使用ps相关命令。

格式:ps 参数
-a:显示所有进程
-u:用户以及其他详细信息
-x:显示没有控制终端的进程
  • 查看那更多可以使用man命令:man ps
  • 查看python进程可以使用:ps -ef | grep python,查看redis、mysql、nginx进程可以使用相同的命令:ps -ef | grep redisps -ef | grep mysqlps -ef | grep nginx
2.10 kill命令

kill命令用来删除执行中的程序,kill可以将指定的信息送至程序。
kill命令相关的参数:

-a:当处理当前进程时,不限制命令和进程号的对应关系
-l <信号编号>:若不加<信号编号>选项,则-l参数会列出全部的信息名称
-p:指kill命令只打印相关进程的进程号,而不发送任何信号
-s <信号名称或编号>:指定要送出的信息
-u:指定用户

只有9中信号可以无条件终止进程,其它信号进程都有权力忽略,下面是常用的信号:

HUP    1:终端断线
INT      2:中断(同Ctrl + C)
QUIT  3:退出(同Ctrl + \)
TERM  15:终止
KILL    9:强制终止
CONT  18:继续(与STOP相反,fg/bg命令)
STOP   19:暂停(同Ctrl + Z)

kill进程前可以通过ps -ef查看进程id等信息:

用户名   pid                                           进程执行命令
root      1041     1  0 21:44 ?        00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers

比如上面的进程id是1041,可以执行kill 1041,如果遇到杀不死的进程,可以执行kill -9 1041,-9是发给kill命令的一个信号,强制杀死信号。

2.11 killall命令

通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务下横徐带来的全部进程。简单来讲,killall命令一次性可以杀死多个有依赖的进程。

例如,nginx启动后有两个进程,可以直接执行killall nginx

2.12 selinux防火墙

防火墙可以防止服务器被恶意攻击,保护系统资源。比如,恶意攻击你的端口进程等。简而言之,防火墙就是定义一些规则,控制那些ip可以访问哪些ip不可以访问。定义一些当前服务器允许那些端口可以被访问呢,哪些端口不可以被访问。selinux是linux内置防火墙、iptables和firewalld是linux的软件防火墙,可能还会有一些硬件防火墙。

大多数ssh连接不上服务器,都是因为服务器防火墙阻挡了,这里介绍linux内置的防火墙selinux。其配置文件在/etc/selinux/config

  • 查看selinux状态:getenforce
  • 永久关闭selinux:通过修改配置文件,然后重启机器可以永久关闭selinux防火墙:sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config,在使用sed命令之前,可以通过cat 和 grep 命令查看配置文件中的配置状态:grep -i selinux /etc/selinux/config
  • 临时关闭selinux(不需要重启机器,重启后失效),首先获取selinux状态getenforce,然后临时关闭setenforce
2.13 iptables防火墙
  • 查看iptables规则:iptables -L
  • 清空iptables规则:iptables -F
  • 关闭iptables服务:systemctl stop firwalld

centos7默认使用firwalld作为防火墙,关闭firwalld的过程如下:

systemctl status firewalld # 查看防火墙状体
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 关闭防火墙开机启动
systemctl is-enabled firewalld.service # 检查防火墙是否启动
2.14 linux中文显示设置

设置linux中文显示,可以防止linux中中文乱码。linux下常用的字符集有GBK和UTF-8,GBK实际上企业使用得比较少,广泛使用UTF-8。

# 查看系统当前字符集
echo $LANG
# 修改字符集
export LANG=en_US.utf8
# 或者这样修改字符集
1、修改配置文件vim /etc/locale.conf
LANG="zh_CN.UTF-8"
2、使生效
source /etc/locale.conf
3、更改后查看系统语言变量
locale

如果出现乱码,则:

1、系统字符集utf8
2、xshell字符集utf8
3、文件字符集一致zh_CN.UTF-8
2.15 df命令

df命令用于显示磁盘分区上可使用的磁盘空间,默认显示单位为KB。可以使用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
常见的参数:

-h或--human-readable:以可读向较高的方式来显示信息
-k或--kilobytes:指定区块大小为1024字节
-T或--print-type:显示文件系统的类型
--help:显示帮助
--version:显示版本信息
  • 查看系统磁盘设备,默认是KB单位:$ df
  • 使用-h参数以KB以上的单位来显示可读性高:$ df -h,查看磁盘使用容量
2.16 tree命令

以树状图显示文档目录结构,tree命令的参数:

-a:显示所有文件和目录;
-A:使用ASNI绘图字符显示树状图而非以ASCII字符组合;
-C:在文件和目录清单加上色彩,便于区分各种类型;
-d:先是目录名称而非内容;
-D:列出文件或目录的更改时间;
-f:在每个文件或目录之前,显示完整的相对路径名称;
-F:在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","@","|"号;
-g:列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码;
-i:不以阶梯状列出文件和目录名称;
-l:<范本样式> 不显示符号范本样式的文件或目录名称;
-l:如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录;
-n:不在文件和目录清单加上色彩;
-N:直接列出文件和目录名称,包括控制字符;
-p:列出权限标示;
-P:<范本样式> 只显示符合范本样式的文件和目录名称;
-q:用“?”号取代控制字符,列出文件和目录名称;
-s:列出文件和目录大小;
-t:用文件和目录的更改时间排序;
-u:列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码;
-x:将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该目录予以排除在寻找范围外。
  • 显示当前目录的结构:$ tree,等价于$ tree .
  • 显示/home目录的结构:$ tree /home
2.17 DNS相关

DNS(Domain Name System)是域名解析系统,万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。linux系统上dns配置文件是/etc/resolv.conf

  • 查看dns配置文件:$ cat /etc/resolv.conf
[root@instance-mtfsf05r ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.16.0.3
nameserver 172.16.0.2
options rotate timeout:1

可以通过nslookup解析域名:nslookup www.blueflags.cn,nslookup是一个常用的域名查询工具。

2.18 本地强制dns解析

本地解析配置文件在/etc/hosts,windows系统在C:\Windows\System32\drivers\etc\host,可通过修改该配置文件来配置主机对应的域名。强制dns解析常用于开发测试,自定义域名。

[root@instance-mtfsf05r ~]# cat /etc/hosts
 ip                    主机名
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.4 instance-mtfsf05r instance-mtfsf05r.novalocal
106.12.115.131  www.thanlon.cn
2.19 计划任务crond服务

① 计划任务
后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好,这就用到了crond服务。

② crond服务相关的软件包

[root@instance-mtfsf05r ~]#  rpm -qa | grep cron
cronie-1.4.11-23.el7.x86_64
cronie-anacron-1.4.11-23.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch

这些包在最小化安装系统时就已经安装了,并且会开机自启动crond服务,并为我们提供好编写计划任务的crontab命令。

③ crontab命令
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似。
crontab命令的语法:

crontab (选项)(参数)
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。

注意:写计划任务时,命令必须加上绝对路径,否则会出现这种情况:从日志中看,确实触发了计划任务的执行,但是命令却没有执行成功,比如* * * * * reboot就会出现这种情况,需要将reboot写成/usr/sbin/reboot

  • 查看计划任务的执行:$ tail -f /var/log/cron,/var/spool/cron是存放定时任务的文件。
  • 确保crontab服务运行:$ systemctl status crond$ ps -ef|grep crond
  • 检测crontab是否开机启动:$ systemctl is-enabled crond
  • 查看crontab配置文件:$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

crontab任务配置基本格式:

*  *  *  *  *  command
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令

第1列表示分钟059 每分钟用*或者 */1表示
第2列表示小时0230表示0点)
第3列表示日期1314列表示月份1125列标识号星期060表示星期天)
第6列要运行的命令

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
30 08 * * *  每天8.30去上班  
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
*/3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com  每隔三分钟执行下时间同步

注意:command部分一定要用绝对路径来写
下面是一些示例:

# 每分钟执行一次命令
* * * * * command
# 每小时的3,15分组执行命令
3,15 * * * * command
# 在上午8-11点的第3和第15分钟执行
3,15 8-11 * * * command
# 每晚21:30执行命令
30 21 * * * command
# 每周六、日的1:30执行命令
30 1 * * 6,0 command
# 每周一到周五的凌晨1点,清空/tmp目录的所有文件(通过which命令查看rm的绝对路径)
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
# 每晚的21:30重启nginx
30 21 * * * /opt/nginx/sbin/nginx -s reload 
# 每月的1,10,22日的4:45重启nginx
45 4 1,10,22 * * /opt/nginx/sbin/nginx -s reload 
# 每个星期一的上午8点到11点的第3和15分钟执行命令
3,15 8-11 * * 1 command

执行多条命令使用 “&&” 来连接不同命令,连续执行多条命令使用 “;” 号。

将crontab规则写入到crontab文件中:

通过命令crontab -e打开文件,实际使用的是vi打开,然后写入:

* * * * * /usr/bin/echo 'thanlon' >> /tmp/thanlon.txt

查看计划任务:crontab -l

thanlon@plus-book:~$ tail -f /tmp/thanlon.txt 
thanlon
thanlon
thanlon

通过tail -f /tmp/thanlon.txt可以看到每分钟向thanlon.txt文件追加“thanlon”

2.20 软件包管理

① 使用rpm命令管理,需要手动处理关系依赖。rpm相关的命令:

  • 安装软件:rpm -ivh filename.rpm,i表示安装,v表示显示过程,h表示以进度条显示
  • 升级软件:rpm -Uvh filename.rpm
  • 卸载软件:rpm -e filename.rpm
  • 查询软件描述信息:rpm -qpi filename.rpm
  • 列出软件描述信息:rpm -qpl filename.rpm
  • 查询文件属于哪个rpm:rpm -qf filename

较小软件的安装可以选择使用rpm安装,比如安装lrzsz:

# 下载lrzsz的rpm包
wget https://rpmfind.net/linux/centos/7.5.1804/os/x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm
# 安装rpm包
rpm  -ivh lrzsz-0.12.20-36.el7.x86_64.rpm

② yum命令
yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

通过yum自动安装软件,自动处理依赖关系。yum安装软件,其实就是在线搜索一个rpm包,然后自动rpm -ivh 包.rpm,比如安装redis:yum install redis。yum提供了查找、安装、删除某一个或者一组甚至全部软件包的命令,而且命令简洁而又好记。

yum(选项)(参数)
-h:显示帮助信息;
-y:对所有的提问都回答“yes”;
-c:指定配置文件;
-q:安静模式;
-v:详细模式;
-d:设置调试等级(0-10);
-e:设置错误等级(0-10);
-R:设置yum处理一个命令的最大等待时间;
-C:完全从缓存中运行,而不去下载或者更新任何头文件。

部分常用的命令包括:

  • 自动搜索最快镜像插件:yum install yum-fastestmirror
  • 查看当前yum仓库有没有mariadb:yum search mariadb
  • 卸载软件:yum remove mariadb-server

③ yum源的配置
使用cd /etc/yum.repos.d/进入yum.repos.d目录,目录下的*.repo结尾的文件是yum源文件。如果我们需要修改yum源为aliyun的yum源仓库,可以到阿里巴巴开源镜像站找到centos标签点击"帮助":
在这里插入图片描述
在linux上执行上面的命令:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

下载阿里巴巴的yum源文件。接下来要清空yum的缓存:$ yum clean all。一般还需要安装linux的额外仓库源,也就是epel源,继续在阿里云源上找,找到epel标签。在帮助里面找到:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

将这一条命令放在linux中执行,安装epel源。最后,为了便于加速下载,需要生成yum缓存:yum makecache

2.21 系统服务管理命令

系统服务管理命令 systemctl,只有在 centos7 下才有,centos6 中的是 service 命令。centos6 中的service的使用:$ service network start$ service network stop$ service network restart

下面是使用systemctl命令来管理redis服务,,注意使用只有通过yum安装的软件,才可以使用systemctl命令去管理:

  • 安装redis:yum install redis -y
  • 启动redis服务:systemctl start redis
  • 重启redis服务:systemctl restart redis
  • 停止redis服务:systemctl stop redis
  • 查看redis状态:systemctl status redis
2.22 xz命令

有时候我们会遇到xxx.tar.xz命令,xz压缩包的格式其实比7z要小的多,但是压缩的时间要长一些。其实这种文件采用了两层的压缩,第一层采用tar的压缩方式,第二层采用的是xz的压缩方式。解压这类文件需要先使用xz命令解压所,再使用tar命令解压所文件。前面已经介绍过tar命令,在这里补充说以下xz命令。下面是xz相关的命令:

# 压缩文件到指定路径,不删除原文件,可以指定文件名
xz -c -z tmp.txt > ./tmp.txt.xz
# 例子
thanlon@thanlon-master:~/下载$ xz -c -z eclipse-inst-linux64.tar>./eclipse-inst-linux64.tar.xz
# 解压缩文件,不删除原文件,且可自定义解压后的文件名和文件格式
xz -c -d tmp.txt.xz > tmp.txt
# 直接解压缩filename.tar.xz
tar xvfJ filename.tar.xz
发布了54 篇原创文章 · 获赞 138 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Thanlon/article/details/101121398