Linux常见命令简介

=========Linux运行级别===========

六种运行级别:

0、关机

1、单用户(可用来找回密码)

2、多用户无网络

3、多用户有网络(多用于工作环境)

4、预留

5、图形界面(多用于学习环境)

6、重启

相关命令:

a、切换当前运行级别:【init 3】(仅当前环境下生效,重启后失效)

b、得到当前运行级别:【systemctl get-default】

c、设置默认运行级别:【systemctl set-default graphical.target/multi-user.target】{永久生效}

【注】可以在/etc/inittab中查看相关信息

=========vim命令说明===========

vim三种模式

1.1 正常模式:按【ESC】键进入该模式,可以对文档进行复制、粘贴、删除等操作。

1.1.1 复制当前行:yy (y-yank)

1.1.2 复制当前n行:nyy (如5yy,从光标所在行开始数5行进行复制,包括当前行)

1.1.3 粘贴到指定行或具体位置:p (如果复制的是整行则粘贴到光标所在行的下一行,若复制的是某段内容则粘贴到光标所在位置的后面)

1.1.4 删除/剪切当前行:dd

1.1.5 删除/剪切当前n行:ndd

1.1.6 可视化块操作:v (移动左右方向键选中相应内容,按y复制选中内容,移动光标到指定位置按p粘贴)

1.1.7 取消上次动作:u (u-undo)

1.1.8 将光标移动到第一行:gg

1.1.9 将光标移动到最后一行:G

1.2 插入模式:按【i】键进入该模式。

1.3 命令模式:按【:】键进入该模式。可以对文档进行存盘、查找、退出、显示行号等操作。

1.3.1 保存并退出:【:wq】 (w-write,q-quit)

1.3.2 退出不保存:【:q!] (q-quit)

1.3.3 查找指定条件:【/要查找内容】 (n-查找下一个,N-查找上一个)

1.3.4 替换【:[替换范围]s/被替换内容/新内容/flags】

替换范围:无->当前行;m->第m行;m,n->第m到n行;%->整个文件

flags:g(global)->替换一行中出现的所有匹配,否则只替换一行中的第一次配置内容;c(confirm)->替换前需要确认;i->忽略大小写

s:s是substitute的缩写

1.3.5 显示行号:【:set nu】 (nu-number)

1.3.6 取消行号:【:set nonu】 (nu-number)

1.3.7 取消高亮显示:【:set noh】

1.3.8 将光标移动到指定行:【:行号】

1.4 个性化配置

配置文件:/etc/vimrc

内容:增加如下内容

set nu " 设置显示行号

set tabstop = 4 " 设置制表符的宽度为4个空格

set shiftwidth=4 " 设置缩进时使用4个空格

set autoindent " 启用自动缩进

set smartindent " 启用智能缩进

=========Linux命令说明===========

一、开关机

1.1 关机:

1.1.1 shutdown -h now 参数:h->halt,now->马上,now可以改为具体数字表示n分钟后关机。

1.1.2 halt 关机,但不关闭电源,尽量不用该命令

1.2 重启:

1.2.1 shutdown -r now 参数:r->reboot,now->马上,now可以改为具体数字表示n分钟后重启。

1.2.2 reboot

二、用户

2.1 切换用户:su - 用户名 (su-switch user,- 前后有空格的啊)

2.2 注销用户:logout/exit

2.3 新建用户:useradd 用户 (默认将该用户放入与该用户名相同的组中)

useradd -g 用户 (将该用户放入到指定组中)

2.4 设置密码:passwd 用户

2.5 删除用户:userdel 用户 (仅删除用户,不删除该用户的家目录及邮件目录等信息)

userdel -r 用户 (r-remove,将该用户的所有信息都删除)

2.6 修改用户所在组:usermod -g 组 用户

2.7 显示用户信息:id 用户

2.8 查看当前用户:whoami (该用户可能是后切换的)

2.9 查看首次登录用户:who am i

2.10 用户所在文件:/etc/passwd (每行含义->用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell)

2.11 密码所在文件:/etc/shadow

2.12 sudo命令:模拟root来执行某些系统命令(/sbin),比如关机、重启、添加用户等

root把某些系统命令赋给普通用户或组:visudo(实际上是修改/etc/sudoers)

格式如下:

root/#组 ALL=(ALL) ALL

用户名 IP地址【用户可在该IP的机器上执行命令】=(可使用身份) 具体命令

如:lag ALL= /sbin/shutdown -h now =>lag用户可以执行关闭linux命令

sudo -l 可以查看root都赋予它哪些权限

三、组

3.1 新建组:groupadd 组

3.2 删除组:groupdel 组

3.3 组所在文件:/etc/group (每行含义->组名:口令:组标识号:组内用户列表)

四、文件/目录

4.1 显示当前目录:pwd (pwd->print working directory)

4.2 显示目录内容:ls -al (a->all,l->list,可省略写ll)

4.3 切换目录:cd (cd ~ ->切换到当前用户的家目录,cd .. ->切换到上级目录)

4.4 新建目录:mkdir -p 目录 (p->parents,有参数p可以新建多级目录,无参数p则只能建1级目录)

4.5 删除空目录:rmdir 目录 (仅删除1级空目录,不实用)

4.6 删除目录/文件:rm -rf 目录/文件 (rm->remove,r->recursion递归,f->force直接删除不显示是否删除等提示信息,连目录带里面的文件一起删除,慎用啊)

4.7 创建空文件:touch 文件

4.8 拷贝目录/文件:cp -r 源目录/文件 目标目录 (r->recursion递归)

覆盖拷贝不提示:\cp -rf 源目录/文件 目标目录 (r->recursion递归,f-force强制覆盖不提示,因为cp默认使用的是别名【cp -i】,覆盖是要提示的,用\cp则不使用别名)

4.9 移动或重命名目录/文件:mv 源目录/文件 新目录/文件

4.10 查看文件内容:cat 文件 (参数n->带行号显示,|more 多屏显示,空格与ctrl+b翻屏)

4.11 查看文件内容:less 文件 (PgUp/PgDn翻页,/查找内容,q退出,适合显示较大文件)

4.12 查看文件内容:head -n 5 文件 (显示头5行文件内容,默认10行)

4.13 查看文件内容:tail -n 5 文件 (显示尾5行文件内容,默认10行,多用于查看日志)

tail -f 文件 (监控文件变化,ctrl+c退出)

4.14 输出内容到控制台:echo "内容" (echo $PATH/HOSTNAME)

4.15 输出重定向:> (用新内容替换旧内容)

>> (用新内容追加旧内容,如echo "hello" >> /root/111.txt)

4.16 软链接:ln -s 源目录/文件 链接名 (ln->link,类似windows中快捷键方式,存放链接文件的路径)

4.17 硬链接:ln 源文件 链接名 (类似C语言中指向某内存地址的2个指针,源文件与链接名的内容是一样的,任何一个修改另一个也跟着变化)

4.18 删除软链接:rm 链接名 (千万不要加参数-r来删除软链接,因为该参数会删除软链接对应的目录/文件内容而不是删除软链接)

4.19 删除硬链接:rm 链接名 (删除硬链接并不会影响另一个文件)

4.20 查看历史命令:history 10 (查看最近执行的10个命令)

4.21 执行历史命令:!10 (执行编号为10的历史命令)

4.22 字符相关命令:

4.22.1 cut [选项] 文件名 (d 分隔符->按指定分隔符来分割列delimiter;f 列号->提取第几列field。若2列之间用不固定的空格分隔的话该命令就不能用了)

如:cat /etc/passwd|grep /bin/bash|grep -v root|cut -d ':' -f 1 => lag zs 查询所有普通用户

4.22.2 printf '输出类型输出格式' 输出内容

输出类型:

%ns (输出字符串,n-输出几个字符)

%ni (输出正数,n-输出几个数字)

%m.nf (输出浮点数,如%8.2f,输出8位数,其中6位整数2位小数)

输出格式:

\n (换行)

\r (回车)

\t (TAB键)

4.22.3 awk '条件1{动作1} 条件2{动作2} ...' 文件名

如:df -h | awk '{printf $1 "\t" $5 "\t" $6 "\n"}'

df -h|grep sda2|awk '{printf $5}'|cut -d '%' -f 1

df -h|awk 'BEGIN{FS=" "}{printf $1 "\t" $2 "\n"}' (FS="分割符",前面的BEGIN是在读取内容时先做点什么)

五、日期

5.1 显示当前时间:date "+%Y-%m-%d %H:%M:%S"

5.2 设置当前时间:date -s "2024-03-20 20:23:18" (重启失效)

5.3 显示日历:cal 2024 (显示2024年的日历)

六、搜索查找

6.1 查找文件:find 搜索范围 -name 文件名 (从指定目录递归查找指定名称的文件,如:find /root -name hello*)

6.2 快速定位:locate 文件名 (该命令自己建立数据库并在其中查找而不是遍历目录查找,因此要先执行updatedb建立/更新数据库。文件不能匹配通配符)

如: updatedb

locate hello.c

6.3 过滤查找:grep [选项] 要查找内容 源文件 (n->显示行号,i->忽略大小写,v->反向匹配。在某文件或管道中查找内容)

如: grep -n "prin" /root/test/hello.c

cat /root/test/hello.c | grep -n "prin"

6.4 查找命令所在位置:which 命令

七、压缩解压

7.1 内部命令

7.1.1 压缩:gzip 文件 (该命令只能压缩文件,不能压缩目录,要想压缩目录必须与tar联合使用,该命令默认不保留源文件)

7.1.2 解压:gunzip 文件

7.1.3 打包:tar [选项] xxx.tar.gz 打包内容 (tar将某目录下所有内容归档成一个.tar文件,然后用gzip将该文件压缩成.tar.gz文件来实现压缩目录)

如:tar -zcvf home.tar.gz /home (z-用gzip压缩,c-建立新.tar文件,v-显示详细信息,f-指定压缩后文件名该参数一定要放到最后一个)

7.1.4 拆包:tar [选项] xxx.tar.gz -C 拆包后存放路径

如:tar -zxvf home.tar.gz -C /root (x-释放,C-指定释放路径,无则默认当前目录)

7.2 外部命令

7.2.1 压缩:zip [-r] xxx.zip file1 file2... (该压缩格式与windows通用,若要压缩目录则加参数r。但该命令不是linux内部命令,需要安装)

7.2.2 解压:unzip [-d] 解压后存放路径 xxx.zip (默认解压到当前目录,该命令需安装)

八、权限管理(重点)

8.1 修改文件所有者:chown 用户 文件1 文件2... (仅修改文件的所有者而不会修改文件的所在组,目录可以加参数-R来递归把目录下所有文件一起修改)

8.2 修改文件所在组:chgrp 组 文件1 文件2... (仅修改文件所在组)

8.3 权限符号:drwxr-xr-x (共10位)

第0位:文件类型(-文件,d目录,l软链接,c字符设备文件如鼠标键盘,b块设备如硬盘)

第1~3位:文件所有者的权限 (r可读,w可写,x可执行)

第4~6位:文件所在组的权限

第7~9位:文件其他组的权限

针对目录的权限符号含义:

r-可以读取查看目录内容,如ls

w-可以修改目录,如重命名目录,在目录内创建或删除文件

x-可以进入目录,如cd (这个非常重要,若无该权限则目录就进不去,进不去目录就无法对目录内的文件做任何操作)

针对文件的权限符号含义: (该文件所在目录必须拥有x权限,否则无意义。连目录都进不去又如何能操作文件呢)

r-可以读取查看文件,如cat less head tail

w-可以修改文件,但但但不代表可以删除文件,想删除文件的前提是对该文件所在目录有w权限

x-可以执行文件

修改权限:chmod

第一种方式:用[+][-][=]来变更文件/目录权限 (u-所有者,g-所在组,o-其他组,a-所有人{包括ugo})

1)chmod u=rwx,g=rx,o=r 文件/目录 (-rwxr-xr--)

2)chmod o+w 文件/目录 (其他组增加w权限)

3)chmod a-x 文件/目录 (所有人都取消执行权限)

第二种方式:用数字来变更文件/目录权限 (r=4,w=2,x=1;{数字1=x,2=w,3=wx,4=r,5=rx,6=rw,7=rwx}【记住:二进制000,2^2,2^1,2^0】)

chmod 751 文件/目录 (-rwxr-x--x)

8.4 文件系统属性权限:chattr (change file arrtibutes)

语法:chattr [+-=] [选项]

  • 增加权限; - 删除权限 = 等于某权限

i -> 文件:锁定该文件,只能看,其他什么也做不了。(针对root也生效)

目录:只能修改该目录下的文件数据,不能建立或删除文件。

举例:chattr +i /root/test/aaa.txt (锁定该文件,root也改不了)

lsattr /root/test/aaa.txt (查看该文件的系统属性)

chattr -i /root/test/aaa.txt (恢复正常)

a -> 文件:可增加文件内容,但不能删除或修改。

目录:可以在该目录下新建或修改文件,但不能删除。

九、任务调度(计划任务)

9.1 语法: crontab [选项] (e->编辑定时任务{edit},l-查询定时任务{list},r-删除定时任务{remove})

9.2 说明:*/1 * * * * date "+\%F \%T" >> /tmp/mydate.txt (五星上将,由于命令中有%,因此要用\转义,用#注释)

第1颗星:分钟 取值范围0-59

第2颗星:小时 取值范围0-23

第3颗星:天数 取值范围1-31

第4颗星:月份 取值范围1-12

第5颗星:星期 取值范围0-7 (0与7都代表周日)

符号解析:* 任何时间。

, 不连续时间。如[10 8,12,16 * * * 命令]代表每天的8点10分,12点10分,16点10分都执行一次命令

  • 连续时间。如[0 5 * * 1-5 命令]代表每周一到周五早上5点0分执行一次命令

*/n 每隔多久执行一次。如[*/10 * * * * 命令]代表每隔10分钟执行一次命令

符号举例:45 22 * * * (每天22点45分执行)

0 17 * * 1 (每周一的17点0分执行)

0 5 1,15 * * (每月1号与15号的5点0分执行)

40 4 * * 1-5 (每周1到周五的4点40分执行)

*/10 4 * * * (每天4点,每隔10分钟执行一次,即4:10,4:20,4:30,4:40,4:50,5点以后就不算了)

0 0 1,15 * 1 (每月的1号与15号还必须得是周一才在0点0分执行)

十、磁盘管理

10.1 常识:主引导记录MBR{master boot record},位于硬盘的0柱面0磁头1扇区位置(主引导扇区),共512字节。

分三部分。主引导程序、硬盘分区表DPT(disk partition table)与分区有效标识(55AA)。

主引导程序占446字节,分区表占64字节(每个分区占16字节,因此最多可以分4区),分区有效标识占2字节(固定是55AA)。

由上述得知分区表的划分,一块硬盘最多可以分为4个分区,就像windows中的C、D、E、F盘,我们称之为主分区。那如果我们想多划分几个分区怎么办呢?

只要把某个主分区改为扩展分区就行了。即我们可以建立n个主分区(n<=3)+1个扩展分区。

扩展分区是不能直接使用的,也无法格式化,我们将该扩展分区再划分为多个逻辑分区就绕过MBR的限制了。

10.2 硬盘起名:在linux中一切皆文件。硬盘起名也是固定的。

IDE硬盘:默认文件名为hdx(hd->hard disk,x是用字母来代表硬盘数。如第一块硬盘hda,第二块为hdb...)。

硬盘划分的分区文件名hdxn(n-分区号,如第一块硬盘第1分区为hda1,第一块硬盘第2分区为hda2)。

SCSI硬盘:默认文件名为sdx(sd->scsi disk,x是用字母来代表硬盘数。如第一块硬盘sda,第二块为sdb...)。

硬盘划分的分区文件名sdxn(n-分区号,如第一块硬盘第1分区为sda1,第一块硬盘第2分区为sda2)。

10.3 增加硬盘:新增加一个10G硬盘,则该文件名为sdb,将该硬盘划分为1个主分区2G和1个扩展分区8G,再将扩展分区划分为2个逻辑分区,各4G。

10.3.1 显示块设备信息:lsblk [选项] (lsblk->list block devices,参数f->显示文件系统相关信息,如类型、标签、UUID等)。

通过该命令【lsblk】我们可以看到新增加的硬盘名称为sdb,但还没有分区,暂时不能使用。

10.3.2 分区:fdisk 设备名 (fdisk /dev/sdb)

10.3.2.1 输入n,创建新分区。再输入p创建主分区,分区号为1,起始扇区2048,默认回车,截止扇区要改为【+2G】,这第一个分区大小就固定了。

分区大小=(截止扇区-起始扇区)* 512 / 1024 / 1024 / 1024 = 2G。可以输入p来查看该分区的详细信息。

10.3.2.2 输入n,再输入e,创建扩展分区,分区号为2,一路默认回车,把硬盘剩余的8G空间都给它。

10.3.2.3 输入n,再输入l,将扩展分区再划分为逻辑分区,默认分区号5,因为前4个号是给主分区与扩展分区预留的,逻辑分区必须从5开始。截止扇区改为【+4G】

10.3.2.4 输入n,再输入l,创建逻辑分区,默认分区号为6,一路默认回车,将剩余空间都给它。

10.3.2.5 输入w,将以上修改写入到硬盘中。

[注]如果输入错误时按退格键是不好用的,得按ctrl+Backspace才行。

这时我们用lsblk -f查看就可以看到新增加的硬盘已经分好区了。但还没有UUID与挂载。

UUID是某分区的唯一识别码,只有格式化后才有。

10.3.3 格式化:mkfs -t 文件系统类型 分区块 (mkfs->make file system。文件系统类型用ext4)

10.3.3.1 mkfs -t ext4 /dev/sdb1 (该命令执行完后用lsblk -f就可以查看到UUID了)

10.3.3.2 mkfs -t ext4 /dev/sdb2 (出错了,因为sdb2是扩展分区,不能格式化)

10.3.3.3 mkfs -t ext4 /dev/sdb5 (格式化逻辑分区)

10.3.3.4 mkfs -t ext4 /dev/sdb6 (格式化逻辑分区)

格式化完毕,只要与目录挂载就可以使用了。

10.3.4 挂载:mount 设备文件 挂载目录

10.3.4.1 mount /dev/sdb1 /newdisk1 (先建立目录/newdisk1,再挂载)

10.3.4.2 mount /dev/sdb5 /newdisk5

10.3.4.3 在挂载sdb6前先做个小实验。在目录/newdisk6中新建1个文件old.txt,由于此时该目录还未被挂载,所以该文件被存放在与/挂载的sda2中,

回退到根目录下开始挂载。 mount /dev/sdb6 /newdisk6,此时再进入到newedisk6中查看,刚才新建的old.txt已经不存在了。

我们再新建一个文件new.txt。

10.3.5 卸载:umount 设备文件/挂载目录

10.3.5.1 卸载sdb6:umount /dev/sdb6,卸载后我们进入newdisk6中发现new.txt文件不存在了,而old.txt文件回来了。哈哈

10.3.6 永久挂载:用命令行挂载的方式在linux重启后会失效,只有修改配置文件才会永久生效。

10.3.6.1 修改配置文件/etc/fstab (fstab->file system table)

vim /etc/fstab (如UUID=477771fc-7c21-4fce-a137-37ec34c1c0f5 /boot ext4 defaults 1 2)

该配置文件挂载行分6部分。

10.3.6.1.1 分区设备文件或UUID,建议使用UUID(可以用lsblk -f查看)而不是设备文件,因为设备文件的顺序可以人为修改,比如把sdb1改为sdb3,

而配置表却没有同步修改则可能会导致系统崩溃。

10.3.6.1.2 硬盘挂载点

10.3.6.1.3 文件系统名称类型

10.3.6.1.4 挂载参数

10.3.6.1.5 分区是否被dump备份(0-不备份,1-每天备份,2-不定期备份)

10.3.6.1.6 分区是否被fsck检测(0-不检测,其他数字代表检测优先级,1最高)

如:/dev/sdb5 newdisk5 ext4 defaults 0 0

10.3.6.2 自动生效:mount -a (根据/etc/fstab内容自动挂载,永久生效,不用重启)

该命令非常重要,必须执行,可以查看挂载是否正确,有错误可以马上修改,否则有错误重启后会导致系统崩溃。

10.3.6.3 挂载配置文件出错导致系统崩溃:

输入root密码进入系统,修改/etc/fstab配置文件即可。若该文件只读无法修改则执行命令【mount -o remount,rw /】重新把/对应分区挂载,有rw权限啊。

10.4 磁盘情况查询:df -h (df->disk free,h-human)

10.5 目录情况查询:du [选项] 目录 (du-disk usage,h-human,a-包含目录内文件,c-显示汇总信息)

如du -hac /root

10.6 统计文件行数、字数、字节数:wc [选项] 文件名 (wc-word count,l-行数,w-字数,c-字节数)

如 wc aaa.txt (92 228 5744 aaa.txt,即92行,228个单词,5744字节大小)

利用该命令也可以查看某目录有多少个文件或有多少个子目录。

10.6.1 统计/opt下文件数:【ls -l /opt | grep "^-" | wc -l】 (其中"^-"正则表达式,表示过滤以-开头的内容)

10.6.2 统计/opt下目录数:【ls -l /opt | grep "^d" | wc -l】

10.6.3 统计/opt下文件数(包括子目录):【ls -lR /opt | grep "^-" | wc -l】 (参数R-递归查询子目录)

10.6.4 统计/opt下目录数(包括子目录):【ls -lR /opt | grep "^d" | wc -l】

10.6.5 以树状来显示目录结构:tree 目录 (tree是外部命令,得用yum install tree来安装才行)

十一、网络配置

11.1 linux网络连接方式与虚拟网卡对应关系:VMnet1对应linux的仅主机模式,VMnet8对应linux的NAT模式。

11.2 查看并配置网络接口:ifconfig [选项] (可用来查看linux的IP)

11.3 测试网络是否畅通:ping 网址 (如果从linux虚拟机 ping windows主机不通有可能是因为windows的防火墙开着呢)

11.4 固定IP (先用ifconfig查看IP,假设为192.168.126.130,现要改为固定IP为192.168.126.188)

11.4.1 编辑网络配置文件/etc/sysconfig/network-scripts/ifcfg-ens33

11.4.1.1 取消DHCP自动分配IP服务,改为静态分配 (BOOTPROTO="dhcp" => BOOTPROTO="static")

11.4.1.2 增加固定IP (IPADDR=192.168.126.188)

11.4.1.3 增加掩码 (NETMASK=255.255.255.0)

11.4.1.4 增加网关 (GATEWAY=192.168.126.2,与VMnet8中的配置一样)

11.4.1.5 增加DNS域名解析(首选为1) (DNS1=192.168.126.2)

11.4.1.6 生效

11.4.1.6.1 即时生效 service network restart (不用重启)

11.4.1.6.2 重启生效 reboot

11.5 查看主机名:hostname (linux的主机名为lhw)

11.6 修改主机名:/etc/hostname (重启生效)

11.7 关联主机名与IP

11.7.1 windows中关联文件:c:\Windows\System32\drivers\etc\hosts (增加linux的主机名与IP对应关系:192.168.126.188 lhw)

这时在windows的dos窗口中ping linux的命令为:ping lhw,实际上是ping 192.168.126.188

11.7.2 linux中关联文件:/etc/hosts (增加windows主机名与IP对应关系:192.168.126.1 lag,lag是windows主机名,ip是VMnet8IP)

这时在linux终端中ping windows命令为:ping lag,实际上是ping 192.168.126.1

十二、进程管理

12.1 进程含义:程序运行后会加载到内存中,这就是进程。进程名以d结尾表示这是守护进程,即后台进程(daemon)。

12.2 查看进程:

12.2.1 ps -ef (e-显示所有进程,f-全格式,ps-process status)

12.2.2 ps -aux (a-显示所有进程,u-以用户格式显示,x-显示后台进程运行参数)

12.2.3 进程显示内容

USER - 用户名称

UID - 用户ID

PID - 进程ID

PPID - 进程的父进程ID

C - CPU用来计算执行优先级的因子

%CPU - 占CPU百分比

%MEM - 占内存百分比

VSZ - 占虚拟内存大小(单位字节)

RSS - 占物理内存大小(单位字节)

TTY - 终端名称

STAT - 进程状态(S-睡眠,R-运行中,Z-僵尸进程)

START - 进程启动时间

STIME - 进程启动时间

TIME - 进程占用CPU时间

COMMAND - 进程启动所需的命令与参数

12.3 目录树显示进程:pstree [选项] (p-显示进程的PID,u-显示进程所属用户)

12.4 杀死进程

12.4.1 kill [-9] 进程ID (-9强制杀死进程,该命令不会杀死该进程的子进程)

12.4.2 killall 进程名 (杀死该进程及其所有子进程)

十三、服务管理

13.1 服务含义:服务本质就是进程,运行在后台,通常监听某个端口,等待客户端请求(如mysqld、sshd、防火墙),因此又称为守护进程。

13.2 服务命令:systemctl [选项] 服务名 (start-启动,stop-停止,restart-重启,status-状态)

如:systemctl restart network.service (重新启动linux的网络服务)

systemctl能管理的服务在/usr/lib/systemd/system目录下

13.3 自启动服务:

13.3.1 查看所有服务自启动状态:systemctl list-unit-files

如:systemctl list_unit-files | grep firewalld.service (查看防火墙是否自启动)

13.3.2 设置服务自启动:systemctl enable 服务名

13.3.3 关闭服务自启动:systemctl disable 服务名

13.3.4 查看某服务是否自启动:systemctl is-enabled 服务名

[注]以上自启动都是针对3与5这2个级别的,其他级别也没啥用。

13.4 举例:

查看当前防火墙状态,关闭防火墙,再重启防火墙。

13.4.1 systemctl status firewalld

13.4.2 systemctl stop firewalld

13.4.3 systemctl start firewalld

13.5 打开或关闭端口

13.5.1 打开端口:firewall-cmd --permanent --add-port=端口号/协议

13.5.2 关闭端口:firewall-cmd --permanent --remove-port=端口号/协议

13.5.3 重新载入:firewall-cmd --reload

13.5.4 查询端口:firewall-cmd --query-port=端口号/协议

十四、动态监控进程

14.1 top [选项] (d-刷新秒数默认3秒,i-不显示闲置或僵尸进程,p-指定某进程ID并对其进行监控)

14.1.1 交互操作

14.1.1.1 P (根据CPU使用率排序)

14.1.1.2 M (根据内存使用率排序)

14.1.1.3 N (根据PID排序)

14.1.1.4 u (仅显示某用户进程,输入u,然后再输入用户名。取消则输入u,再输入空格)

14.1.1.5 k (杀死进程,输入PID,然后输入参数9,强制杀死进程)

14.1.1.6 q (退出)

十五、监控网络情况

15.1 netstat [-anp] (an-按一定顺序排列,p-显示PID。anp-一个苹果)

十六、软件包管理

16.1 RPM:RedHat Package Manager的缩写,类似Windows中的setup.exe。

16.1.1 查询指定包:rpm -q 软件包名 (rpm -qa | grep 软件包)

如:rpm -q firefox (firefox-60.2.2-1.el7.centos.x86_64)

名称:firefox

版本:60.2.2

系统:1.el7.centos.x86_64 (1-发布次数,e17.centos-linux平台[这里指RHel7与centOS],x86_64硬件平台64位系统[i686、i386表示32位,noarch表示通用])

16.1.2 查询包详细信息:rpm -qi 软件包名

16.1.3 查询包中文件:rpm -ql 软件包名

16.1.4 查询某文件归属于哪个包:rpm -qf 文件

16.1.5 安装包:rpm -ivh 带路径的软件包全名 (i-install,v-verbose提示,h-hash进度条,记不住就记hiv-艾滋病,U-升级)

16.1.5 依赖性:有些包需要先安装依赖的包或某些依赖的文件,如安装httpd时需要/etc/mime.types,我们不知道该文件在哪个包里,可以到www.rpmfind.net网站查。

16.1.6 卸载包:rpm -e [--nodeps] 软件包 (e-erase,nodeps-强制删除,不考虑是否有依赖关系,就是卸啊)

16.1.7 包名与包全名的区别:未安装前要使用带路径的全包名,安装后可以使用简略的包名了。

16.2 YUM:Yellow dog Updater,Modified的缩写,yum是在网上的yum应用商店里下载软件。

16.2.1 网络地址配置文件:/etc/yum.repos.d/目录下 (repository-仓库)

内容:以CentOS-Base.repo为例

[base] (容器名称)

name=CentOS-$releasever - Base (容器说明)

mirrorlist=http://mirrorlist.centos.org/?release=$releasever\&arch=$basearch\&repo=os\&infra=$infra (镜像站点)

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ (yum服务器源地址,与镜像网站二选一即可)

gpgcheck=1 (1-RPM数字证书生效,0-RPM数字证书不生效)

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 (数字证书公钥文件保存地址,不用动)

enabled=1 (0-该容器不生效,其他-生效)

光盘yum源:

将/etc/yum.repos.d/下的所有文件的扩展名都改名或将他们移动到备份目录下,只保留CentOS-Media.repo。修改其内容

将baseurl改为本地光盘挂载目录,其他2个地址注释掉,同时将enabled=0改为1。

16.2.1 查询包:yum list/search 软件包

16.2.2 安装包:yum [-y] install 软件包

16.2.3 卸载包:yum [-y] remove 软件包 (yum卸载时会将相关依赖包都卸载,而这些依赖包可能有别的程序要使用,这有可能导致系统崩溃出问题)

十七、shell

17.1 shell定义:命令行解释器。

17.2 编写shell:

17.2.1 以#!/bin/bash开头

举例:vim hello.sh,内容如下

#!/bin/bash

echo "hello,world!"

17.2.2 执行方式

17.2.2.1 sh ./hello.sh

17.2.2.2 ./hello.sh (该文件有可执行权限,一定要带路径)

17.2.3 变量

17.2.3.1 系统变量:$HOME $PWD $SHELL $USER等,可用set来显示shell中的所有变量。

17.2.3.2 自定义变量:

17.2.3.2.1 定义变量:变量名=值 (不能有空格)

17.2.3.2.2 撤销变量:unset 变量名

17.2.3.2.3 静态变量:readonly 变量名(不能unset)

17.2.4 将命令的返回值赋给变量

如:a=`date` 等价于 a=$(date) (反引号表示先运行里面的命令,并把结果返回给变量)

17.2.5 环境变量

17.2.5.1 export 变量名=变量值 (将shell变量输出为环境变量即全局变量)

17.2.5.2 source 配置文件 (让修改后的配置文件马上生效)

17.2.5.3 echo $变量名 (查询环境变量值)

17.2.5.4 举例:

17.2.5.4.1 在配置文件/etc/profile中增加环境变量,内容:export LAG_HOME=/home/lag

17.2.5.4.2 source /etc/profils (让刚才新增加的变量马上生效)

17.2.5.4.3 echo $LAG_HOME

17.2.6 位置参数变量 (./my.sh 100 200 这里的100与200就是位置参数变量)

17.2.6.1 基本语法:

17.2.6.1.1 $n (n为数字,$0命令本身,$1-9为前9个参数,10以上用{10},${11}...)

17.2.6.1.2 \* (代表所有参数,*把所有参数当做一个整体,类似字符串)

17.2.6.1.3 @ (代表所有参数,@把每个参数分别对待,类似数组)

17.2.6.1.4 $# (代表所有参数的个数)

17.2.7 预定义变量

17.2.7.1 $$ (当前进程的进程号(PID))

17.2.7.2 $! (后台运行的最后一个进程的进程号(PID))

17.2.7.3 $? (最后一次执行命令的返回状态,0-正确执行)

17.2.8 运算符

17.2.8.1 语法:$((运算式)) 或 $[运算式] 或 expr m + n (用(())它里面的内容的语法类似C语言,如> >= == <= !=,但有些特殊表达式用不了)

17.2.8.2 使用expr表达式的符号:+ - \* / % (加、减、乘、除、取余)

17.2.8.3 举例:计算(2+3)*4的值:echo "(2+3)*4=$[(2+3)*4]" (这种方式空格无所谓)

17.2.9 条件判断

17.2.9.1 语法:[ 条件 ] (注:条件的前后必须有空格),返回:非空-true,也可使用$?验证0-true,>1-false

17.2.9.2 判断:

17.2.9.2.1 两个字符串比较:= ([ "ok" = "ok" ]注意一定要有空格啊)

17.2.9.2.2 两个整数比较:

17.2.9.2.2.1 小于 -lt (lt-less than,[ 23 -lt 33 ])

17.2.9.2.2.2 小于等于 -le (le-less equal])

17.2.9.2.2.3 等于 -eq (eq-equal,[ 34 -eq 34 ])

17.2.9.2.2.4 大于 -gt (gt-great than)

17.2.9.2.2.5 大于等于 -ge (ge-great equal)

17.2.9.2.2.1 不等于 -ne (ne-not equal)

17.2.9.2.3 文件权限判断:

17.2.9.2.3.1 -r 有读的权限

17.2.9.2.3.2 -w 有写的权限

17.2.9.2.3.3 -x 有执行的权限

17.2.9.2.4 文件类型判断:

17.2.9.2.4.1 -f 文件存在,且是常规文件 (if [ -f /root/test.txt ])

17.2.9.2.4.2 -e 文件存在

17.2.9.2.4.3 -d 文件存在,且是目录

17.2.10 if语句:

if [ 条件判断式 ] 或 if ((条件判断式))

then

代码

elif [ 条件判断式 ]

then

代码

else

代码

fi

17.2.11 case语句:

case $变量名 in

"值1")

代码

;;

"值2")

代码

;;

*)

其他代码

;;

esac

17.2.12 for语句:

17.2.12.1 语法1:

for 变量 in 值1 值2 值3 ...

do

代码

done

17.2.12.2 语法2:

for((初始值;循环条件;变量变化)) 【空格不重要,因为用了(()),因此里面语法类似C语言】

do

代码

done

举例:1加到100

SUM=0

for((i=1;i<=100;i++))

do

SUM=$((SUM+i))

SUM=\[SUM+$i]

done

echo "1加到100等于$SUM"

17.2.13 while语句:

while((条件))

do

代码

done

17.2.14 控制台输入:

read 选项 变量 (p-读取时的提示,t-等待时间)

举例:

read -p "请输入年龄:" AGE

echo $AGE

17.2.15 函数:

17.2.15.1 系统函数:

17.2.15.1.1 basename [路径名] [后缀] (返回完整路径最后/部分,常用于获取文件名。若带有后缀参数则返回不带后缀的文件名)

如:basename /root/test/aaa.txt => aaa.txt

17.2.15.1.2 dirname [路径名] (返回完整路径最后/的前面部分,常用于获取路径部分。)

如:dirname /root/test/aaa.txt => /root/test

17.2.15.2 自定义函数:

17.2.15.2.1 语法:

函数定义时没有形参与实参的概念,默认用 $* $@ $1 $2 ...来得到参数

返回值取值范围0~255,0-成功。可以用个$?得到该值,因此一般情况下都不需要有返回值。

可以用一个变量来接收想要返回的值,在调用该函数后将其显示出来即可实现返回值的功能。

调用该函数时也没有括号,有参数则用空格隔开

[function] 函数名[()]

{

代码

[return 0]

}

【注】[]内是可以省略不写的,但不建议省略。

17.2.15.2.2 举例:

函数定义

function getSum()

{

SUM=$(($1+$2))

}

调用函数

read -p "请输入第一个数值:" VAL1

read -p "请输入第二个数值:" VAL2

getSum $VAL1 $VAL2

echo "相加结果等于:%SUM"

十八、日志管理

18.1:日志文件位置:/var/log/目录下

18.2:重要的日志:

18.2.1 boot.log: 系统启动日志

18.2.3 cron: 定时任务日志

18.2.4 lastlog: 记录所有用户最后一次登录时间(该文件内容为二进制,得用命令lastlog查看内容)

18.2.5 maillog: 邮件信息日志

18.2.6 message: 系统重要信息日志,如果系统出现问题首先就要检查该日志。

18.2.7 secure: 验证与授权信息日志,只要涉及到账号与密码都记录到此日志中。

18.3:日志服务:

18.3.1 服务名:rsyslogd

18.3.2 服务配置文件:/etc/rsyslog.conf (该文件配置了哪些动作记录到哪个日志文件中)

18.3.2.1 配置文件格式 *.* 存放日志文件(mail.* -/var/log/maillog)

18.3.2.1.1 第一个*含义:日志类型

18.3.2.1.1.1 auth pam产生的日志

18.3.2.1.1.2 authpriv ssh、ftp登录信息的验证信息产生的日志

18.3.2.1.1.3 cron 定时任务产生的日志

18.3.2.1.1.4 kern 内核产生的日志

18.3.2.1.1.5 lpr 打印产生的日志

18.3.2.1.1.6 mail 邮件产生的日志

18.3.2.1.1.7 user 用户程序产生的日志

18.3.2.1.1.8 local 1-7 自定义的日志设备

18.3.2.1.2 第二个*含义:日志级别

18.3.2.1.2.1 debug 调试

18.3.2.1.2.2 info 信息

18.3.2.1.2.3 notice 最具有重要性的普通条件信息

18.3.2.1.2.4 warning 警告

18.3.2.1.2.5 err 错误

18.3.2.1.2.6 crit 严重

18.3.2.1.2.7 alert 需要立刻修改

18.3.2.1.2.8 emerg 内核崩溃

18.3.2.1.2.9 none 什么都不记录

18.3.3 日志文件格式:

事件产生时间 产生事件服务器主机名 产生事件的服务名或程序名 事件具体信息

18.3.4 举例:将ssh登录信息记录到日志/var/log/myssh.log中

18.3.4.1:编辑/etc/rsyslog.conf,增加一下内容

authpriv.* /var/log/myssh.log

18.3.4.2:重启linux,登录,查看/var/log/myssh.log

18.4 日志轮替:

18.4.1 日志轮替文件命名:

18.4.1.1 日志轮替配置文件(/etc/logrotate.conf)中参数为dateext,则以日期作为日志文件扩展名。

18.4.1.2 若无dateext参数则以xxx.n(n>0)的方式来轮替日志。

18.4.2 日志轮替配置文件:

18.4.2.1 配置文件内容(/etc/logrotate.conf)

18.4.2.1.1 daily 每天对日志进行一次轮替

18.4.2.1.2 weekly 每周对日志进行一次轮替

18.4.2.1.3 monthly 每月对日志进行一次轮替

18.4.2.1.4 rotate n 保存n份日志文件,超过n时删除旧的

18.4.2.1.5 create 日志轮替后创建新的空日志文件

18.4.2.1.6 dateext 以日期作为日志轮替文件扩展名

18.4.2.1.7 size 4M 日志大于4M才轮替

18.4.2.1.8 compress 日志文件是否压缩

18.4.2.1.9 单独为某个日志配置

18.4.2.1.9.1 直接写入到配置文件/etc/logrotate.conf

/var/log/myssh.log{

monthly

minsize 10M

rotat 2

}

18.4.2.1.9.2 将某个单独的日志配置文件放到/etc/logrotate.d目录中

18.5 日志轮替机制:

在/etc/cron.daily/目录下有个logrotate的shell,cron定时任务会每天都执行一次这个shell来完成日志轮替工作。

18.6 查看内存日志:journalctl

相关推荐
枫叶丹437 分钟前
【在Linux世界中追寻伟大的One Piece】进程信号
linux·运维·服务器
刻词梨木39 分钟前
ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
linux·运维·ubuntu
灯火不休ᝰ2 小时前
[win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
linux·运维·服务器
数云界4 小时前
如何在 DAX 中计算多个周期的移动平均线
java·服务器·前端
powerfulzyh5 小时前
Ubuntu24.04远程开机
linux·ubuntu·远程工作
ulimpid5 小时前
Command | Ubuntu 个别实用命令记录(新建用户、查看网速等)
linux·ubuntu·command
HHoao5 小时前
Ubuntu启动后第一次需要很久才能启动GTK应用问题
linux·运维·ubuntu
小灰兔的小白兔5 小时前
【Ubuntu】Ubuntu常用命令
linux·运维·ubuntu
GFCGUO5 小时前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
winds~5 小时前
ubuntu中软件的进程管理-结束软件运行
linux·运维·ubuntu