Linux复习笔记

Linux学习笔记

第一章

PPT

什么是Linux

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux 的特性(Properties of Linux)

Linux 的优点

Linux 是免费的。 
Linux 是自由的。Linux是开源的。
Linux 可以被移植到任何硬件平台。
Linux 是能长期运行的。 
Linux 是安全的和多功能的。
Linux 是可扩展的。 
Linux 操作系统和大部分的 Linux 程序有非常短的调试周期。

Linux 的缺点

有太多的发行版了。 
Linux 对初学者不是很友善,并且让他们感到困惑。 
开源产品值得信任吗?

补充

什么是Linux发行版

它是基于 Linux 内核的一个操作系统。它带有用户可以使用的软件集合。更多的,它还包含系统管理包。目前有许多 Linux 发行版。 Ubuntu、Fedora、Opensuse、Red hat Linux 和 Debian 等是几个非常受欢迎的 Linux 发行版。

Ubuntu, 一个非常受欢迎的 Linux 发行版和第三受欢迎的操作系统

Linux 发行版是一个已经准备好可以在个人电脑上安装的完整包。一旦用户在桌面或者服务器上安装了 Linux 发行版,就可以使用各种现成的软件和应用程序。现在,很多 Linux 发行版都具有很好的图形用户界面(GUI),这使得它们成为 Windows 系统或 Mac 系统的一个很好的替代品。

目前, Linux 发行版在性能、界面、可访问性以及最重要的 - 用户友好性等方面都有了很大的提高。一些发行版比如 Ubuntu 和 Linux mint 等,随着用户数量的一天天增加,赢得了很好的市场地位。 Ubuntu 是紧随 Windows 和 Mac 第三受欢迎的操作系统。

第二章

PPT

基础命令

部分解释

apropos命令在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。

来自: http://lnmp.ailinux.net/apropos

man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。

来自: http://lnmp.ailinux.net/man

info命令是Linux下info格式的帮助指令。

来自: http://lnmp.ailinux.net/info

快捷键

Ctrl+C 结束正在运行的程序并返回提示,请参阅第 4 章。

Ctrl+D 注销当前 shell 会话,等于键入退出或注销。

Ctrl+L 清空这个终端。

Ctrl+R 搜索命令历史记录。

Ctrl+Z 暂停程序。

向上箭头和向下箭头浏览历史记录。转到要重复的行,必要时编辑详细信息,然后按Enter键以节省时间。

Tab命令 或文件名完成;当可以选择多个选项时,系统将用音频或可视铃声发出信号,或者,如果选择太多,则询问您是否要全部查看。

Tab Tab :显示文件或命令完成的可能性。

获取帮助信息

man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。

# man man:读取man手册(获取man命令的帮助信息)

# man 5 passwd:查看关于man手册中关于Passwd的第五页

# man -a passwd:看到 man 的所有页面,一页接一页的

# info info:用 info 命令查阅该命令的信息页面

使用 whatis 命令来得到一个简短的命令解释

# whatis ls

如果你不知道从哪里开始入手并且不知道开始阅读哪个 man 页,apropos 可以让你获得更多的信息。

# apropos browser:比如说你不知道如何启动一个浏览器,可以获得很多与浏览器相关的东西

大部分的 GNU 支持—help 选项,该选项给出了如何使用这个命令的简短说明以及这个命令 的一系列选项

# cat --help

总结

apropos 搜索有关命令或主题的信息。

cat 显示一个或多个文件的内容。

cd 更改为另一个目录。

exit 离开 shell 会话。

file 获取有关文件内容的信息。

info 阅读有关命令的信息页面。

logout 离开 shell 会话。

ls 列表目录内容。

man 阅读命令的手册页。

passwd 更改密码。

pwd 显示当前工作目录。

补充

# ls 选项 路径

选项:-l 详细列表;-a 显示所有(含隐藏);-h可读性较高的形式显示

路径:当前路径、绝对路径、相对路径

# pwd 打印当前工作目录

# cd 路径 用于切换当前的工作目录的

路径:当前路径、绝对路径、相对路径

特殊符号“~”,表示当前用户的家目录

# file 用来探测给定文件的类型

第三章

PPT

文件

"在 UNIX 上,一切都是文件;如果哪个东西不是文件,那么它就是一个进程。"
这个描述是正确的,即使有一些特殊的文件可能不仅仅是普通文件(比如,指定的管道和套接字),但是为了简单起见,任务一切都是文件是可以接受的广泛含义。Linux 系统里,类似于UNIX 系统,文件和目录是没有区别的,因为目录只是包含了其他文件名的一种文件。程序,服务,文本,图像等等都是文件。输入和输出设备,以及其他的所有设备,根据系统定义都被认为是文件。
为了有序的管理这些文件,人们总是把它们想象成位于硬盘上的一种类似于树形结构,就像我们所知的 MS-DOS 一样。较大的分支包含了更多的分支,末端分支包含树形结构的叶子节点或普通文件。现在开始我们使用这种树形图像,但是我们在后面发现为什么这并不是完全正确的图像。

文件分类

大部分文件叫做规则文件; 它们包含普通数据,比如文本文件,可执行文件或是程序文件,输入到程序里或从程序里输出等。
当你在说 Linux 系统遇到的任何东西是文件时,注意有几个例外。
目录: 包含一系列其他文件的文件。
特殊文件: 用于输入和输出的一种机制。大部分特殊文件都位于 /dev 目录下,我们将在后面讨论它们。
链接 s: 它使得文件或目录在系统文件树的不同部分可见。我们将详细讨论链接。
(域)套接字: 一种特殊的文件,类似于 TCP/IP 套接字,提供了受文件系统访问控制保护的进程间网络保护。
指定管道: 类似于套接字,并形成一种进程间通信的方式,不需要使用网络套接字语义。

分区

不同分区的其中一个目标是在灾难中获得更高的数据安全性。通过将硬盘分区,数据能够聚集和分离。当事故发生的时候,只有事故分区的数据会丢失,而其他分区的数据则很可能会幸存下来。

Linux 系统有两类主要的分区:
数据分区:正常的 Linux 系统数据,包括根分区 ,它包含了启动和运行系统的所有数据。
交换分区: 计算机物理内存的扩展,位于磁盘的额外内存空间。
大部分的系统包含一个根分区,一个或多个数据分区,一个或多个交换分区。在混合环境中的系统可能还包含其他系统数据的分区,比如使用 FAT 或是 VFAT 文件系统来存储 MS Windows 数据的分区。

挂载点

所有的分区都是通过挂载点挂载到系统上的。挂载点指定了在文件系统上存放一个特定数据集的地方。通常,所有的分区都是通过根分区连接的。根分区,使用斜线表示(/),目录就创建在它上面。这些空目录将是挂载到它上面的分区的挂载点。

目录结构

Bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行的。
Dev: Device(设备)该目录中主要存放的是外接设备,例如盘、其他的光盘等。在其中的外接设备是不能直接被使用的,需要挂载(类似windows下的分配盘符)。
Etc:该目录主要存储一些配置文件。
Home:表示“家”,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目录。
Proc:process,表示进程,该目录中存储的是Linux运行时候的进程。
Root:该目录是root用户自己的家目录。
Sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须得有super权限的用户才能执行。
Tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。
Usr:存放的是用户自己安装的软件。类似于windows下的program files。
Var:存放的程序/系统的日志文件的目录。
Mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。

# which -a ls:查看ls命令所在的位置

# echo $PATH:显示PATH环境变量的内容

# su user1: su (变换用户)使用方法,它允许你使用另一个用户的 shell 环境变量,只要你知道该用户的登录密码。

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码

# export PATH=$PATH:/home/jumper/bin:变更用户的环境变量

变更没有永久生效! 注意当在 shell 里使用 export 命令设置变量时,这个变更是临时的并只对当前会话生效 (直到你退出会话)。

相对路径和绝对路径

路径,就是你在文件系统的树形结构里查到到一个给定文件的途径,能从树的主干(/或root 目录)起始。这种情况下,路径起始于斜线/,被称为绝对路径,因为那不会产生错误:系统上只有一个文件在那里。
在另一种情况,路径不是以斜线/开始并且可能会产生冲突,比如前面的例子~/bin/wc(在用户的 home 目录下)和 bin/wc 在/usr 目录下就有可能冲突。不以斜线/开头的路径经常叫做相对路径。在相对路径下,我们也用. 和.. 来表示当前目录和父目录。

内核

内核是系统的核心。它与底层的硬件和外围设备通信。内核还保证进程和后台进程(系统进 程)在正确的时间启动和停止。内核还有很多其他重要的任务,因为众多以致在这一领域有一个 特殊的内核开发邮件列表,在这个邮件列表里会共享大量的信息。详细讨论内核可能会使我们偏离主题。从现在开始,我们应该知道内核文件是 Linux 系统最重要的文件。

Shell

能比做与计算机通信的一种方式,一种语言。很多用户知道其他语言,如桌面系统 的点击类型的语言。但是这种语言计算机主导着会话,而用户被动的接受任务。让编程者在 GUI 格式下包含命令的所有选项和可能的使用方式很困难。因此,GUIs 比命令或后端指令的功 能来的弱。 另一方面,shell 是与计算机交流的一种高级方式,因为它允许双向通信并启动发起会 话。会话双方的地位是平等的,因此新想法可以被方便的测试。Shell 允许用户以一种灵活的 方式管理系统。一个额外有用的性质是 shell 允许任务自动运行。

# echo $SHELL:查看计算机使用的是哪一种SHELL

# echo $HOME:查看home路径

echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。

操作文件

# ls -latr

选项:-l 详细列表;-a 显示所有(含隐藏);-h可读性较高的形式显示

-t:用文件和目录的更改时间排序;-r:以文件名反序排列并输出目录内容列表;

# file 选项 参数

-z:尝试去解读压缩文件的内容。

mkdir (make directory,创建目录)

#mkdir 路径 [路径,可以是文件夹名称也可以是包含名称的一个完整路径]

#mkdir -p 路径:当一次性创建多层不存在的目录的时候,添加-p参数,否则会报错

#mkdir 路径1 路径2 路径3 …. 【表示一次性创建多个目录】

mv(move,移动,剪切)移动文档到新的位置

#mv 需要移动的文档路径 需要保存的位置路径

cp(copy,复制)复制文件/文件夹到指定的位置

#cp 被复制的文档路径 文档被复制到的路径

rm (remove,移除、删除)移除/删除文档

#rm 选项 需要移除的文档路径

选项:-f:force,强制删除,不提示是否删除;-r:表示递归

touch 创建文件

#touch 文件路径 【路径可以是直接的文件名也可以是路径】

which:用于查找并显示给定命令的绝对路径。which指令会在环境变量$PATH设置的目录里查找符合条件的文件

find:用来在指定目录下查找文件。来自: http://lnmp.ailinux.net/find

#find . -size +5000k:找出当前 目录或其子目录下的所有大小超过 5M 的文件

# find. -name “*.tmp” -exec rm {} \:从.目录下找到以.tmp结尾的文件,并删除

.目录:当前目录及子目录下所有文件和文件夹

-name:用名字进行匹配

*.tmp:所有以tmp结尾的文件

-exec选项:与其他命令结合使用

{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。

locate:其实是find -name的另一种写法,来自: http://lnmp.ailinux.net/locate_slocate

#grep -a find .bash_history:使用 grep 来查看它使用 find 做了什 么

#cat 文件的路径:cat有直接打开一个文件的功能。

cat:还可以对文件进行合并

#cat 待合并的文件路径1 待合并的文件路径2 …. 文件路径n >合并之后的文件路径

less指令:查看文件,以较少的内容进行输出,按下辅助功能键(数字+回车、空格键+上下方向键)查看更多

#tail -n 文件的路径 :n表示数字,查看一个文件的未n行,如果n不指定默认显示后10行

#tail -f 文件路径:通过tail指令来查看一个文件的动态变化内容,该命令一般用于查看系统的日志比较多。

#head -n 文件路径:查看一个文件的前n行,如果不指定n,则默认显示前10行。

转义字符:\* , \\

链接文件

链接只是一种两个或更多个文件名匹配到相同数据的一种方式。有两种方式来实现这种目标:
• 硬链接:用相同的 inode 关联两个或多个文件名。硬链接共享磁盘上的相同数据库,尽管在形式上它们表示为一个独立的文件。
这里就有一个不利因素了:硬链接不能跨分区,因为 inode 号在一个给定分区里是唯一的。
• 软链接或符号链接:一个指向其他文件的小文件。符号链接包含了目标文件的路径而不是磁盘的物理位置。由于这种方式方式没有使用 inode,所有软链接可以跨分区使用。

创建链接的命令用 ln,为了创建符号链接,需要使用–s 选项

在他home 目录下的一个子目录里面创建了一个链接指向系统其他部分的一个目录:

ln -s /opt/mp3/Queen/ Queen

ls -l lrwxrwxrwx 1 freddy freddy 17 Jan 22 11:07 Queen -> /opt/mp3/Queen

**重点:**chmod 和 chown

chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

来自: http://lnmp.ailinux.net/chmod

chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组ID。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。 只有文件主和超级用户才可以便用该命令。

来自: http://lnmp.ailinux.net/chown

补充:【Linux】目录文件权限的查看和修改

参考:https://www.cnblogs.com/sxdcgaq8080/p/7498906.htm

一共有十位数,其中:最前面那个 - 代表的是类型
中间那三个 rw- 代表的是所有者(user)拥有的权限
然后那三个 r-- 代表的是组群(group)拥有的权限
最后那三个 r-- 代表的是其他人(other)拥有的权限

然后
r 读权限read  4
w 写权限write 2
x 操作权限execute  1
- 表示相应的权限还没有被授予 0

在chmod中
- 表示删除权限

**补充:**字符设备和块设备

参考:https://www.linuxprobe.com/block-string-device.html

系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的设备被称作块设备,这些数据片就称作块。最常见的块设备是硬盘,除此以外,还有软盘驱动器、CD-ROM驱动器和闪存等等许多其他块设备。注意,它们都是以安装文件系统的方式使用的——这也是块设备的一般访问方式。

另一种基本的设备类型是字符设备。字符设备按照字符流的方式被有序访问,像串口和键盘就都属于字符设备。如果一个硬件设备是以字符流的方式被访问的话,那就应该将它归于字符设备;反过来,如果一个设备是随机(无序的)访问的,那么它就属于块设备。

这两种类型的设备的根本区别在于它们是否可以被随机访问

bash 中判断文件字符型:
-b filename // 块设备
-c filename // 字符设备

总结:

Shell有很多内置在其源代码中的命令。这些命令是内置的,所以Shell不必到磁盘上搜索它们,执行速度因此加快。不同的Shell内置命令有所不同。 内置命令包含在 bash shell 本身里面。我该如何在 Linux / Apple OS X / *BSD / Unix 类操作系统列出所有的内置 bash 命令,而不用去读大篇的 bash 操作说明页? shell 内置命令就是一个命令或一个函数,从 shell 中调用,它直接在 shell 中执行。 bash shell 直接执行该命令而无需调用其他程序。你可以使用 help 命令查看 Bash 内置命令的信息。

chgrp命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。

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

export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。

locate命令和slocate命令都用来查找文件或目录。 locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

newgrp 命令 切换用户所在用户组命令 登入另一个群组。

quota命令用于显示用户或者工作组的磁盘配额信息。输出信息包括磁盘使用和配额限制。

rmdir命令用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。

umask命令用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。

wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

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

第四章

指令:ps 作用:主要是查看服务器的进程信息

选项含义:-e:等价于“-A”,表示列出全部的进程 ;-f:显示全部的列(显示全字段)

列的含义:
UID:该进程执行的用户id;
PID:进程id;
PPID:该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程称之为僵尸进程(parent process ID);
C:Cpu的占用率,其形式是百分数;
STIME:进行的启动时间;
TTY:终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起;
TIME:进程的执行时间;
CMD:该进程的名称或者对应的路径;

#ps -ef|grep “进程名称”:在ps的结果中过滤出想要查看的进程状态

#ps auxw | grep bash:查看bash进程的状态

-a 显示现行终端机下的所有程序,包括其他用户的程序;-u 以用户为主的格式来显示程序状况;-x显示所有程序,不以终端机来区分;-w或w:采用宽阔的格式来显示程序状况。

image-20201218102152606

top指令 作用:查看服务器的进程占的资源(100%使用)

语法:进入命令:#top (动态显示);退出命令:按下q键

表头含义:
PID:进程id;
USER:该进程对应的用户;
PR:优先级;
VIRT:虚拟内存;
RES:常驻内存;
SHR:共享内存;
计算一个进程实际使用的内存 = 常驻内存(RES)- 共享内存(SHR)
S:表示进程的状态status(sleeping,其中S表示睡眠,R表示运行);
%CPU:表示CPU的占用百分比;
%MEM:表示内存的占用百分比;
TIME+:执行的时间;
COMMAND:进程的名称或者路径;

在运行top的时候,可以按下方便的快捷键:
M:表示将结果按照内存(MEM)从高到低进行降序排列;
P:表示将结果按照CPU使用率从高到低进行降序排列;
1:当服务器拥有多个cpu的时候可以使用“1”快捷键来切换是否展示显示各个cpu的详细信息;

uptime:输出计算机的持续在线时间(计算机从开机到现在运行的时间)

pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观。

image-20201218102818853

kill -l:列出所有信号名称

使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程

killall命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。killall把这kill的两个过程合二为一

init命令很简单。直接输入init + 你想要的模式 回车就行。

init 0 就是关机
init 3 就是切换到多用户-命令行模式
init 5 就是切换到图形化界面
init 6 就是重启

开机默认模式设置方式
当我们已界面模式退出后,再次开机进入时,还是界面模式,我们想不管我们以什么模式退出,在每次开机进入时默认是命令行模式,该如何设置呢?在CentOS系统下有个跟文件目录:/etc/inittab,这里可以设置默认启动模式,如果设置为 id:3:initdefault: 这代表默认启动为命令行模式。如果设置为 id:5:initdefault: 这代表默认戚东卫图形化界面模式。注意:万万不能把默认设为0或者6。因为0代表关机,6代表重启。

**参考:**https://blog.csdn.net/wd2011063437/article/details/78959365

nice命令用于以指定的进程调度优先级启动其他的程序。

语法 nice(选项)(参数) 选项 -n:指定进程的优先级(整数)。 参数 指令及选项:需要运行的指令及其他选项。

来自: http://lnmp.ailinux.net/nice

at命令用于在指定时间执行命令。

来自: http://lnmp.ailinux.net/at

三天后的下午 5 点锺执行/bin/ls: 
[root@localhost ~]# at 5pm+3 days 
at> /bin/ls 
at> 
job 7 at 2013-01-08 17:00 

明天17点钟,输出时间到指定文件内: 
[root@localhost ~]# at 17:20 tomorrow 
at> date >/root/2013.log 
at> 
job 8 at 2013-01-06 17:20 

计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务: 
[root@localhost ~]# atq 
8 2013-01-06 17:20 a root 
7 2013-01-08 17:00 a root 

删除已经设置的任务: 
[root@localhost ~]# atq 
8 2013-01-06 17:20 a root 
7 2013-01-08 17:00 a root 
[root@localhost ~]# atrm 7 
[root@localhost ~]# atq 
8 2013-01-06 17:20 a root 

显示已经设置的任务内容: 
[root@localhost ~]# at -c 8 
#!/bin/sh 
# atrun uid=0 gid=0 
# mail root 0 
umask 22此处省略n个字符 
date >/root/2013.log

来自: http://lnmp.ailinux.net/at

cron 可以帮助你制定一些定时执行的计划任务。

crontab命令被用来提交和管理用户的需要周期性执行的任务,

来自: http://lnmp.ailinux.net/crontab

sleep命令暂停指定的时间。

总结

at命令用于在指定时间执行命令。

atq命令显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。

atrm命令用于删除待执行任务队列中的指定任务。

batch命令用于在指定时间,当系统不繁忙时执行任务,用法与at相似。

crontab命令被用来提交和管理用户的需要周期性执行的任务,

halt命令用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。

mesg命令用于设置当前终端的写权限,即是否让其他用户向本终端发信息。将mesg设置y时,其他用户可利用write命令将信息直接显示在您的屏幕上。

netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。

nice命令用于以指定的进程调度优先级启动其他的程序。

pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程ID。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。

renice命令可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。

time命令用于统计给定命令所花费的总时间。

vmstat命令的含义为显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。

w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

wall命令用于向系统当前所有打开的终端上输出信息。通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。

write命令用于向指定登录用户终端上发送信息。通过write命令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write命令就会将信息传给对方。如果接收信息的用户不只登入本地主机一次,你可以指定接收信息的终端机编号。

来自: http://lnmp.ailinux.net

容易理解的

shutdown命令用来系统关机命令。shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。
sleep命令暂停指定的时间。
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
uptime命令能够打印系统总共运行了多长时间和系统的平均负载。
init命令是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。
jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。
kill命令用来删除执行中的程序或工作。
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。
pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观。
reboot命令用来重新启动正在运行的Linux操作系统。

网络编程

link01.py

#!/usr/bin/env python3.6

# 脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单
# !/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;
# !/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
# !/usr/bin/python相当于写死了python路径;
# !/usr/bin/env python会去环境设置寻找python目录,推荐这种写法

# coding: utf-8
# 说明你的Python源程序文件用使用的编码。

import uuid
# UUID(Universally Unique Identifier)是通用唯一识别码
node = uuid.uuid1()
# python有一个模块叫做uuid,导入它就可以使用它的四个方法了。注意这四个方法依次是uuid1(),uuid3(),uuid4(),uuid5(),
# 然而并没有uuid2()。参考:https://blog.csdn.net/yl416306434/article/details/80569688
print('type(node)=',type(node))
print('node=',node)
hex = node.hex
# .hex 将生成的uuid字符串中的 - 删除
print('hex=',hex)
mac_addr = hex[-12:]
# 取后12位
print('mac_addr=',mac_addr)

# 运行结果
# type(node)= 
# node= 0b0937ff-411d-11eb-8df0-38baf82d473f
# hex= 0b0937ff411d11eb8df038baf82d473f
# mac_addr= 38baf82d473f

link02.py

#!/usr/bin/env python3.6
# coding: utf-8
import psutil
# 提供了便利的函数用来获取系统的信息,比如CPU,内存,磁盘,网络等。
# 此外,psutil还可以用来进行进程管理,包括判断进程是否存在、获取进程列表、获取进程详细信息等。
# 而且psutil还提供了许多命令行工具提供的功能,包括:ps,top等

info = psutil.net_if_addrs()
# 以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。
print('info=',info)
print('type(info)=',type(info))

# net1=info['ens33'] #原来是ens33,在win下改为 以太网
net1=info['以太网']
# 获取网卡ens33的信息,(ens33 linux下的网卡名称)

print('net1=',net1)
print('type(net1)=',type(net1))
packet=net1[2]
# 第三个 snicaddr snicaddr:指后面所描述地址的具体内容
print('packet=',packet)
print('type(packet)=',type(packet))
print('mac_addr=',packet.address)
# 获取网卡ens33的IP地址

# info= {'以太网': [snicaddr(family=, 太长省略
# net1= [snicaddr(family=, address='54-BF-64-38-40-CF', netmask=None, broadcast=None, ptp=None),  太长省略
# type(net1)= 
# packet= snicaddr(family=, address='fe80::e4d9:c313:5e2d:9f36', netmask=None, broadcast=None, ptp=None)
# type(packet)= 
# mac_addr= fe80::e4d9:c313:5e2d:9f36

network01.py

#!/usr/bin/env python3.6
# coding: utf-8
import psutil
info = psutil.net_if_addrs()
print('info=',info)
# 原版
# net1=info['ens33']
# net2=info['lo']
# 改版
net1=info['WLAN']
net2=info['vEthernet (Default Switch)']
print('net1=',net1)
print('net2=',net2)
print('net1[0]=',net1[0])
print('net1[1]=',net1[1])
print('IPv4_addr=',net1[0].address)
print('IPv6_addr=',net1[1].address)

# 输出结果
# info= {'以太网': [snicaddr(family=, address='54-BF-64-38-40-CF', netmask=None,
# net1= [snicaddr(family=, address='38-BA-F8-2D-47-3B', netmask=None, broadcast=None, ptp=None),
# net2= [snicaddr(family=, address='00-15-5D-AF-36-36', netmask=None, broadcast=None, ptp=None),
# net1[0]= snicaddr(family=, address='38-BA-F8-2D-47-3B', netmask=None, broadcast=None, ptp=None)
# net1[1]= snicaddr(family=, address='10.194.66.28', netmask='255.255.224.0', broadcast=None, ptp=None)
# IPv4_addr= 38-BA-F8-2D-47-3B
# IPv6_addr= 10.194.66.28

network02.py

参考:https://pypi.org/project/netifaces/

#!/usr/bin/env python3.6
# coding: utf-8
import netifaces
# 使用netifaces模块获取本机IP网关等信息
info=netifaces.gateways()
# 获取计算机上的网关列表,返回字典形式,key=地址,value=网关列表,(地址、接口、is_default)元组。
print('info=',info)
print('type(info)=',type(info))
gateway_addr=info['default'][2][0]
# ‘default’可以引用缺省网关配置
# 将字典与特殊值"默认"进行索引,在每种情况下,该字典将地址系列映射到默认网关。?
print('gateway_addr=',gateway_addr)

application01.py

#!/usr/bin/env python3.6
# coding: utf-8
from urllib import request
url="http://jitong.lut.edu.cn"
header={'Accept':'text/html','Connection':'keep-alive'}
# 构造请求头
# 请求头域 Accept:*/* 
# Connection 允许客户端和服务器指定与请求/响应连接有关的选项
req=request.Request(url,headers=header)
# 用Request类构建了一个完整的请求,增加了headers等一些信息
response=request.urlopen(req)
# urlopen是urllib.request模块提供的最基本的构造HTTP请求的方法,可以模拟浏览器的一个请求发起过程,
# 参数可以是一个字符串url或者是一个Request对象,返回的是http.client.HTTPResponse对象
# urlopen返回的response对象是http.client.HTTPResponse类型

print('Status code=',response.getcode())
print('url=',response.geturl())
print('info=',response.info())

# 运行结果
# Status code= 200
# url= http://jitong.lut.edu.cn
# info= Date: Fri, 18 Dec 2020 11:43:33 GMT
# Server: VWebServer
# X-Frame-Options: SAMEORIGIN
# Last-Modified: Fri, 18 Dec 2020 02:23:23 GMT
# Accept-Ranges: bytes
# Content-Length: 71491
# Cache-Control: max-age=600
# Expires: Fri, 18 Dec 2020 11:53:33 GMT
# Vary: Accept-Encoding
# ETag: "11743-5b6b3caef2df8-gzip"
# Connection: close
# Content-Type: text/html
# Content-Language: zh-CN

transport01.py

#!/usr/bin/env python3.6
# coding: utf-8
import psutil
# 提供了便利的函数用来获取系统的信息,比如CPU,内存,磁盘,网络等。
# 此外,psutil还可以用来进行进程管理,包括判断进程是否存在、获取进程列表、获取进程详细信息等。
# 而且psutil还提供了许多命令行工具提供的功能,包括:ps,top等
info = psutil.net_io_counters()
# 获取网络总IO信息
# 使用 psutil.net_io_counters(pernic=True)获取网卡的IO信息
print('info=',info)
print('type(info)=',type(info))
print('bytes_sent=',info.bytes_sent)
print('bytes_recv=',info.bytes_recv)
print('packets_sent=',info.packets_sent)
print('packets_recv=',info.packets_recv)
print('errin=',info.errin)
print('errout=',info.errout)
print('dropin=',info.dropin)
print('dropout=',info.dropout)

# 部分解释
# bytes_sent: number of bytes sent
# bytes_recv: number of bytes received
# packets_sent: number of packets sent
# packets_recv: number of packets received
# errin: total number of errors while receiving
# errout: total number of errors while sending
# dropin: total number of incoming packets which were dropped 丢弃的传入的数据包的总数
# dropout: total number of outgoing packets which were dropped (always 0 on OSX and BSD)丢弃的传出的数据包的总数

# 运行结果
# info= snetio(bytes_sent=12828018, bytes_recv=79729767, packets_sent=51654, packets_recv=502459, errin=0, errout=0, dropin=0, dropout=0)
# type(info)= 
# bytes_sent= 12828018
# bytes_recv= 79729767
# packets_sent= 51654
# packets_recv= 502459
# errin= 0
# errout= 0
# dropin= 0
# dropout= 0

补充

输出重定向

一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术。

>:覆盖输出,会覆盖掉原先的文件内容

>>:追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加

语法:#正常执行的指令 > / >>文件的路径

注意:文件可以不存在,不存在则新建

案例:使用覆盖重定向,保存ls -la 的执行结果,保存到当前目录下的ls.txt

img

案例:使用追加重定向,保存ls -la的执行结果到ls.txt中

img

df指令

作用:查看磁盘的空间

语法:#df -h -h表示以可读性较高的形式展示大小

date指令

作用:表示操作时间日期(读取、设置)

语法1:#date 输出的形式:2018年 3月 24日 星期六 15:54:28

语法2:#date +%F (等价于#date “+%Y-%m-%d” 输出形式:2018-03-24

语法3:#date “+%F %T” 引号表示让“年月日与时分秒”成为一个不可分割的整体

等价操作#date “+%Y-%m-%d %H:%M:%S”

输出的形式:2018-03-24 16:01:00

语法4:获取之前或者之后的某个时间(备份)

#date -d “**-**1 day” “+%Y-%m-%d %H:%M:%S”

符号的可选值:+(之后) 或者 - (之前)

单位的可选值:day(天)、month(月份)、year(年)

%F:表示完整的年月日

%T:表示完整的时分秒

%Y:表示四位年份

%m:表示两位月份(带前导0)

%d:表示日期(带前导0)

%H:表示小时(带前导0)

%M:表示分钟(带前导0)

%S:表示秒数(带前导0)

cal指令

作用:用来操作日历的

语法1:#cal 等价于 #cal -1 直接输出当前月份的日历

语法2:#cal -3 表示输出上一个月+本月+下个月的日历

语法3:#cal -y 年份 表示输出某一个年份的日历

管道(重要)

管道符:|

作用:管道一般可以用于“过滤”,“特殊”,“扩展处理”。

语法:管道不能单独使用,必须需要配合前面所讲的一些指令来一起使用,其作用主要是辅助作用

①过滤案例:需要通过管道查询出根目录下包含“y”字母的文档名称。

#ls / | grep y

针对上面这个命令说明:

①以管道作为分界线,前面的命令有个输出,后面需要先输入,然后再过滤,最后再输出,通俗的讲就是管道前面的输出就是后面指令的输入;

②grep指令:主要用于过滤

②特殊用法案例:通过管道的操作方法来实现less的等价效果(了解)

之前通过less查看一个文件,可以#less 路径

现在通过管道还可以这么:#cat 路径|less

③扩展处理:请使用学过的命令,来统计某个目录下的文档的总个数?

答:#ls / | wc -l

hostname指令

作用:操作服务器的主机名读取、设置)

语法1:#hostname 含义:表示输出完整的主机名

语法2:#hostname -f 含义:表示输出当前主机名中的FQDN**(全限定**域名)

du -sh指令

作用:查看目录的真实大小

语法:#du -sh 目录路径

选项含义:

​ -s:summaries,只显示汇总的大小

​ -h:表示以高可读性的形式进行显示

service指令(重点)

作用:用于控制一些软件的服务启动/停止/重启

语法:#service 服务名 start/stop/restart

uname指令

作用:获取计算机操作系统相关信息

语法1:#uname 获取操作系统的类型

语法2:#uname -a all,表示获取全部的系统信息(类型、全部主机名、内核版本、发布时间、开源计划)

img

netstat -tnlp指令

作用:查看网络连接状态

语法:#netstat -tnlp

ifconfig指令(重点)

作用:用于操作网卡相关的指令。

简单语法:#ifconfig (获取网卡信息)

Linux复习笔记_第1张图片

练习题

来源:黑马Linux

1、如何通过命令行重启linux操作系统? #reboot

2、如何在命令行中快速删除光标前/后的内容?前:ctrl + u 后:ctrl + k

3、如何删除/tmp下所有A开头的文件? #rm -f /tmp/A*

4、系统重要文件需要备份,如何把/etc/passwd备份到/tmp目录下?

#cp /etc/passwd /tmp/

5、如何查看系统最后创建的3个用户?

#tail -3 /etc/passwd

6、什么命令可以统计当前系统中一共有多少账户?

#wc -l /etc/passwd #cat /etc/passwd|wc -l

7、如何创建/tmp/test.conf文件?

#touch /tmp/test.conf

8、如何通过vim编辑打开/tmp/test.conf?

#vim /tmp/test.conf

9、如何查看/etc/passwd的头3行和尾3行?

#head -3 /etc/passwd

#tail -3 /etc/passwd

10、如何一次性创建目录/text/1/2/3/4?

#mkdir -p /text/1/2/3/4

11、如何最快的返回到当前账户的家目录?

#cd ~ #cd

12、如何查看/etc所占的磁盘空间?

#du -sh /etc

13、如何删除/tmp下所有的文件?

#rm -rf /tmp/*

14、尝试启动Apache的服务,并且检查是否启动成功。

#service httpd start

#ps -ef|grep httpd

15、使用已学命令杀死Apache的进程。

#killall httpd

你可能感兴趣的:(杂七杂八,python,linux,mooc,java,大数据)