【linux教程(一)】Linux shell入门

1. linux shell简介

2. bash shell基础命令

3. linux shell的一些基本知识

4. shell变量和传递参数

5. linux中的文件权限

6. linux中的root用户和普通用户

7. python脚本控制cpu利用率

8. 定时执行任务命令crontab

1. linux shell简介

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。Bash 也是大多数Linux 系统默认的 Shell。

Linux shell是Linux操作系统中为用户提供的一种解释器,它是用户与操作系统交互的主要接口。下面从特点、功能、发展脉络、开发语言、初学者需要掌握的技能等方面进行介绍:

1.特点:

  • 将用户输入的命令转换为操作系统理解的指令进行处理。
  • 提供了很多内置命令,可以让用户快速地进行磁盘管理和文件操作。
  • 可以调用和执行程序、脚本和其他类型的文件。
  • 具有脚本能力,可以通过编写shell脚本来实现自动化或批处理操作。
  • 支持用户自定义环境变量、函数和别名。

2. 功能:

  • 执行系统命令、管理文件与文件夹。
  • 进行系统调用与管理进程。
  • 实现管道命令来处理数据流。
  • 使用环境变量设置系统的行为。
  • 编写shell脚本实现更高级的自动化脚本以及任务调度。

3. 发展脉络:

Linux shell 的发展历史如下:

  1. Bourne shell (sh):是 Unix 操作系统中最早的 shell,由 Stephen Bourne 于 1977 年开发。它提供了一些基本的命令和控制结构,如 if、for、while 等。Bourne shell 是所有 shell 的基础。

  2. C shell (csh):是由 Bill Joy 于 1978 年开发的 shell,它支持更高级的命令和控制结构,如命令行编辑和作业控制。C shell 的语法与 C 语言类似。

  3. Korn shell (ksh):是由 AT&T Bell 实验室的 David Korn 于 1983 年开发的 shell。它继承了 Bourne shell 的所有特性,并增加了一些新的功能,如命令行编辑和作业控制。

  4. Bourne-Again shell (bash):是由 Brian Fox 开发的一个免费的 Bourne shell 的替代品。它在 Bourne shell 的基础上增加了许多新的功能,如命令行编辑、命令别名、命令历史、自动补全等。

除了上述常见的 shell,还有一些其他的 shell,如 tcsh、zsh 等。随着 Linux 操作系统的发展,各种 shell 不断地改进和演变,为用户提供更加强大和灵活的命令行工具。

4. 开发语言:

Shell脚本是使用shell语言编写的,常用的是Bash shell和Zsh Shell,也可以使用其他Shell支持的语言,例如Python、Perl、Ruby等。

5. 初学者需要掌握的技能:

  • 熟练掌握shell的基本操作命令,如cd、ls、cp、mv、rm等。
  • 理解Linux文件系统、文件权限以及文件类型等的概念。
  • 能够使用管道命令和重定向命令来处理数据流。
  • 学会编写基本的shell脚本,例如自动化任务脚本和环境变量设置脚本等。
  • 掌握shell的进程管理能力,包括进程查看、进程切换和进程关闭等。
  • 熟悉shell的Shell变量、环境变量和变量替换等功能,灵活运用能力。

总之,熟练掌握Linux shell是Linux系统操作的基础,通过学习和实践,可以使我们更加高效的使用Linux操作系统。

2. bash shell基础命令

列出文件和目录 

列出文件和目录
ls -F          # 区分文件和目录
ls -a		   # 显示隐藏文件
ls -F -R 	   # 列出包含子目录的文件
ls -FR         # 同上
ls -l          # 显示各文件详细信息
touch file1 file2 ...  # 创建多个文件
ls -l my_script        # 过滤器
ls -l my_scr?pt        # 问号代表任意单个字符
ls -l my_scr*pt        # 星号代表零个或多个字符
ls f[a-i]ll            # 字母范围[a-i]
ls -l f[!a]ll          # 惊叹号将不需要的内容排除在外

当你在Linux系统中输入命令ls -l后,你会看到当前目录下文件和目录的列表。每一行都代表一个文件或目录,每行包含以下信息:

  1. 文件权限:行的前十个字符显示文件的权限。第一个字符表示文件类型,剩下的九个字符表示文件所有者、组和其他人的权限。

  2. 链接数:第二个字段显示文件或目录的链接数。

  3. 所有者:第三个字段显示文件或目录的所有者。

  4. 组:第四个字段显示拥有文件或目录的组。

  5. 文件大小:第五个字段显示文件或目录的大小(以字节为单位)。

  6. 上次修改的日期和时间:第六个字段显示文件或目录上次修改的日期和时间。

  7. 文件或目录名称:最后一个字段显示文件或目录的名称。

 ls -l 命令结果如下:

-rw-r--r--  1 username  staff   256 Jan 22 15:47 example.txt
drwxr-xr-x  2 username  staff    64 Jan 22 16:01 example_directory

在Linux系统中,如果你输入ls -l命令,你会得到一个长格式的列表,显示当前目录下的文件和目录的信息。输出结果的第一个字符表示文件的类型。可能的文件类型有以下几种:
-:表示这是一个普通文件。
d:表示这是一个目录。
l:表示这是一个符号链接。
b:表示这是一个块设备文件。
c:表示这是一个字符设备文件。
n:表示这是一个网络文件。
p:表示这是一个管道文件。
s:表示这是一个套接字文件。
你也可以使用ls -F命令来显示文件的类型,它会在不同类型的文件后面加上不同的特殊字符。比如,/表示目录,*表示可执行文件,@表示符号链接等。你可以使用man ls或info ls来查看更多关于ls命令的信息。 

处理文件 

处理文件
cp source destination  # 复制文件
cp -i test_one test_two    # 复制前询问
cp -i test_two Documents/  # 将文件复制到目录中
cp -R Documents/ NewDocuments/  # 复制目录
ln -s test_file slink_test_file # 创建软链接(符号链接)文件
ls -i *test_file                # 查看文件或目录的inode编号
ln test_one hlink_test_one      # 创建硬链接
ls -li *test_one                # 显示inode编号以及长列表
mv fall fzll                    # 重命名文件
mv /home/christine/fzll /home/christine/NewDocuments/   # 移动文件
mv NewDocuments OldDocuments    # 移动整个目录及其内容
rm -i fall            # 删除文件
ls -ld New_Dir        # 查看目录
mkdir -p New_Dir/SubDir/UnderDir  # 批量创建目录和子目录
rmdir Blank_Dir/      # 删除空目录
rm -ir TestDir        # 删除目录及文件
rm -rf TestDir        # 删除目录树

查看文件

file my_file  	# 查看文件类型
cat -n  test1  	# -n给所有行加上行数
cat -b test1  	# -b给有文本的行加上行号
cat -T  test1	# 不让制表符出现
more file 		# 空格或Enter 逐行向前
less file  		# 是less命令能够识别上下键以及上下翻页键,q退出,pageup 和pagedown可用于翻页
tail file		# 命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末尾10行
tail -n 2 file 	# 可以向tail命令中加入-n参数来修改所显示的行数,如最后2行
head file		# head命令,顾名思义,会显示文件开头那些行的内容
head -n file	# 头n行

监测程序 ps

ps命令是Linux中用来列出运行中的进程信息的命令。在Linux shell中,可以在ps命令后面使用多种参数来定制输出和过滤结果。根据,这里是一些最常见和有用的参数:

-a:这个参数显示除了会话领导和没有关联终端的进程之外的所有进程。
-u:这个参数显示每个进程的详细信息,比如用户名,CPU使用率,内存使用率,启动时间等。
-x:这个参数显示所有进程,包括没有控制终端的进程,比如守护进程和后台作业。
-e:这个参数显示每个进程的环境变量。
-f:这个参数显示完整格式的列表,包括父进程ID,进程组ID,会话ID等。
-p:这个参数根据进程ID(PID)选择进程。你可以用逗号或空格分隔一个或多个PID。
-C:这个参数根据命令名选择进程。你可以用逗号或空格分隔一个或多个命令名。
-o:这个参数允许你指定输出格式,通过选择你想要显示的列。你可以使用预定义的关键字或每列的代码名。
这些只是Linux shell中可以在ps命令后面使用的一些参数。你还可以组合它们来得到更具体的结果。比如,ps -aux显示所有进程的详细信息,ps -ef显示所有进程的完整格式列表,ps -p 1 -o pid,cmd显示PID为1的进程的PID和命令名等。如果你想了解更多关于ps的信息,你可以在终端中输入man ps。

3. linux shell的一些基本知识

linux常见目录基用途

Linux是一种功能强大的操作系统,提供了一个目录结构来组织和管理文件和目录。以下是Linux中一些常见目录及其功能:

  1. /:这是文件系统的根目录。所有其他目录和文件都包含在此目录中。

  2. /bin:该目录包含系统运行所需的可执行程序,例如基本系统实用程序,如ls、cp和mv等。

  3. /sbin:该目录包含用于系统管理的必要的可执行程序。这些程序通常由root用户使用。

  4. /usr:该目录包含许多子目录,包括/usr/bin、/usr/sbin和/usr/local,这些目录包含用户级二进制文件、系统管理二进制文件和本地安装的程序。

  5. /var:该目录包含变量数据,例如日志文件、临时文件和邮件储存。

  6. /home:该目录包含每个用户的主目录。

  7. /etc:该目录包含系统范围的配置文件。

  8. /tmp:该目录用于程序创建的临时文件。

  9. /dev:该目录包含设备文件,这些文件是提供与硬件设备和其他系统资源交互的特殊文件。

  10. /proc:该目录包含虚拟文件,提供有关系统的信息,如系统内存、进程和CPU使用率等。

环境变量

env或printenv		# 要查看全局变量,可以使用env或printenv命令。
printenv HOME		# 显示个别环境变量值,如HOME变量
echo $HOME		# 也可以使用echo显示变量的值
ls $HOME			# 显示HOME目录
ps -ef		# 查看系统上运行的所有进程
top		# 实时显示进程
kill PID		# 结束一个进程
killall http*	# 结束了所有以http开头的进程,比如Apache Web服务器的httpd服务
mount		# 用来挂载媒体的命令
df		# 在某个设备上还有多少磁盘空间
df -h		# 会把输出中的磁盘空间按照用户易读的形式显示,通常用M来替代兆字节,用G替代吉字节
du		# ,du命令会显示当前目录下所有的文件、目录和子目录的磁盘使用情况,它会以磁盘块为单位来表明每个文件或目录占用了多大存储空
sort file2		# sort命令按照会话指定的默认语言的排序规则对文本文件中的数据行排序
sort -n file2	# 告诉sort命令把数字识别成数字而不是字符,并且按值排序。
sort -M file3	# 如果用-M参数,sort命令就能识别三字符的月份名,并相应地排序。

搜索数据
grep three file1	# 在文件file1中搜索能匹配模式three的文本
grep t file1	# 在文件file1中搜索能匹配模式t的文本
grep -v t file1	# 如果要进行反向搜索(输出不匹配该模式的行),可加-v参数。
grep -n t file1	# 如果要显示匹配模式的行所在的行号,可加-n参数。
grep -c t file1	# 如果只要知道有多少行含有匹配的模式,可用-c参数。
grep -e t -e f file1	# 如果要指定多个匹配模式,可用-e参数来指定每个模式。
grep [tf] file1	# 正则表达式中的方括号表明grep应该搜索包含t或者f字符的匹配

归档数据
tar -cvf test.tar test/ test2/	# 创建了名为test.tar的归档文件,含有test和test2目录内容
tar -tf test.tar		# 列出tar文件test.tar的内容(但并不提取文件)
tar -xvf test.tar		# 通过这一命令从tar文件test.tar中提取内容。

history		# 要查看最近用过的命令列表,可以输入不带选项的history命令。
alias -p		# 要查看当前可用的别名,使用alias命令以及选项-p。
alias li='ls -li'	# 可以使用alias命令创建属于自己的别名。

Setting local user-defi ned variables
my_variable=Hello	# assigning the variable to a value using the equal sign
my_variable="Hello World"	# If you need to assign a string value that contains spaces, you need to use a single or double
quotation mark to delineate the beginning and the end of the string
unset my_variable	# 删除环境变量

第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。输入一些代码,第一行一般是这样:

#!/bin/bash
echo "Hello World !"

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限

./test.sh  #执行脚本,作为可执行程序
# 或者
/bin/sh test.sh # 直接运行解释器,其参数就是 shell 脚本的文件名

注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

4. shell变量和传递参数

定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

your_name="runoob.com"

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

使用 unset 命令可以删除变量,

#!/bin/sh

myUrl="https://www.runoob.com"
unset myUrl
echo $myUrl

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

获取字符串长度

string="abcd"
echo ${#string}   # 输出 4

5. linux中的文件权限

对于 PHP 脚本,需要使用文件系统函数打开、读取、写入和关闭文件。具体而言,需要该文件具备以下权限:

  • 读取权限:PHP 访问并读取该文件中的内容。
  • 写入权限:PHP 向该文件中写入或追加内容。
  • 执行权限:此权限不是必需的,因为不需要在文件上执行任何代码。但是,如果在文件上设置了执行权限,则 PHP 脚本可以作为可执行文件通过 Web 服务器访问,而不是作为纯文本文件下载。

更具体地说:

  • r代表读取权限,它允许用户读取文件或目录中的内容。如果一个文件或目录拥有此权限,则可以使用命令像cat或less查看文件的内容或使用ls查看目录中的文件。
  • w代表写入权限,它允许用户修改或创建文件或目录。如果一个文件或目录拥有此权限,则用户可以将数据写入文件或编辑文件,也可以创建新文件或目录。
  • x代表执行权限,它允许用户运行文件或进入目录。如果一个文件或目录拥有此权限,则可以运行可执行文件或进入该目录。

权限字符在文件/目录的权限设置中有多种组合表示,例如"rwx"指的是所有三个权限位都设置了,而"r-x"表示只有读取和执行权限被设置,而写入权限没有被设置。

在 Linux 系统中,可以使用ls -l命令查看文件的权限。例如,以下命令将显示文件“example.txt”的权限:

ls -l example.txt

输出可能是这个样子:

-rw-r--r--. 1 user user 4096 Sep 13 12:34 example.txt

其中,rw-r--r--”代表该文件的权限。第一位表示文件类型(“-”代表常规文件),接下来的三组权限表示所有者、所在组和其他用户的读写执行权限。在此示例中,所有者具有读写权限,所在组和其他用户只有读权限。

因此,为了让 PHP 程序可以读取和写入文件,我们需要确保使用可以访问该文件的用户来运行 Web 服务器,并使用适当的权限(例如 644)。

以下命令将文件的所有者更改为nginx用户:

sudo chown nginx /path/to/siteNameUrl.txt

要将组更改为nginx用户组,请使用以下命令:

sudo chown :nginx /path/to/siteNameUrl.txt

您可以使用以下命令更改文件权限:

sudo chmod 664 /path/to/siteNameUrl.txt

这将为该文件分配rw-rw-r--权限,允许所有者和组用户读写文件,其他用户只能读取该文件。

在`chown`命令中,`root:root`表示将文件的所有者和所属组都设置为root。

具体来说,`root:root`中第一个`root`表示要将文件的所有者设置为root,第二个`root`表示要将文件的所属组设置为root。

`chown`命令的语法是:

chown [OPTIONS] [USER][:[GROUP]] FILE...

其中,USER表示要将文件的所有者设置为哪个用户,GROUP表示要将文件的所属组设置为哪个组。如果不指定GROUP,则默认将文件的所属组设置为USER所属的组。如果都不指定,则默认将文件的所有者和所属组都设置为当前用户。

因此,`chown root:root /path/to/file`的含义是将文件的所有者设置为root,所属组也设置为root。

  • 为啥linux系统输入ls -l命令,有的显示蓝色,有的为绿色,有的为白色呢?

这是因为在Linux系统中,命令输出的文本会根据它们的类型被分为不同的颜色以增加可读性。

通常情况下,在输入"ls -l"命令后,蓝色表示目录,绿色表示可执行文件,红色表示压缩文件,白色表示普通文件,等等。这些颜色可以根据你的终端环境和颜色方案进行自定义和配置。

这种颜色分类对Linux管理员、开发人员和用户来说非常有用,因为它可以快速列出他们需要查找的文件和目录。

  • 要将所属用户和所在组的权限设置为可读可写,可以使用以下命令:
$ chmod 660 file1

这里,6表示所有者有读和写的权限,而同组用户也有读和写的权限,0表示其他用户没有任何权限。

如果要让文件的所有者,所在组和其他用户均具有读写权限,可以使用以下命令:

$ chmod 666 file1

这个命令参数中的666中,每一位都标记着不同的权限信息:

  • 第1个6表示所有者具备读写权限(r+w)。
  • 第2个6表示与所有者同组的用户具备读写权限(r+w)。
  • 第3个6表示其他所有用户(非所有者且非与所有者同组的用户)具备读写权限(r+w)。

这将使用数字表示法将文件的权限更改为所有用户都能够读取和修改file1的内容。

如果按照这种方法打算设置目录的权限,则必须在命令中使用递归选项(-R),以便将所选目录中所有文件和子目录的权限一起更改。

为了提高文件的安全性,建议只向文件分配所需的最低权限,以确保安全性并防止潜在的安全漏洞。可以考虑更改文件或目录的权限,或者使用文件权限掩码(FUMask)等工具来限制对文件的访问权限。

  • 将文件所有者设置为A,所在组设置为B,A具有读写权限,B具有读写权限,其他用户有读权限,如何设置命令

可以使用chown和chmod命令分别更改文件所有者和权限,其中:

  • chown命令用于更改文件所有者、所在组。
  • chmod命令用于更改文件权限。

假设您要将文件"file1"的所有者设置为"A",所在组设置为"B",并给A和B读写权限,给其他用户只读权限,可以运行以下命令:

$ sudo chown A:B file1
$ sudo chmod 644 file1

这里的命令语法很简单:先使用chown命令更改文件所有者和所在组,再使用chmod命令更改文件权限。sudo保证您以管理员身份运行命令。

在这种情况下,使用chmod命令中的644来设置文件的权限,其中6表示可读可写权限(r+w),4表示只读权限(r),第一个6表示所有者有读写权限,第二个4表示与所有者相同组的用户只有读权限,最后一个 4 表示非所有者或非同组人员只有读权限。

设置完成后,所有者和所在组的用户具有读写文件的权限,其他用户只能读取文件内容。

6. linux中的root用户和普通用户

在CentOS系统中,root用户和普通用户之间有以下几点区别:

  1. 权限:root用户拥有系统中的所有权限,包括对系统核心的完全访问权限。而普通用户只能访问其拥有的文件和目录,并且不能执行某些需要root权限的操作。

  2. 安全性:由于root用户具有所有权限,因此使用root用户进行常规任务可能会降低系统的安全性。如果您以root用户身份运行某些不必要的任务,可能会导致系统被攻击或受到其他安全威胁。

  3. 资源限制:系统管理员可以通过限制普通用户的资源使用来确保系统的稳定性和可靠性。例如,可以限制普通用户的CPU和内存使用,以防止他们占用过多的资源。

为什么要创建普通用户呢?普通用户是用于执行一般任务和日常操作的用户账户。与root用户不同,普通用户通常没有对整个系统的完全访问权限。创建普通用户可以提高系统的安全性,并允许多个用户同时使用系统,从而实现更好的资源管理和协作。例如,在多用户环境中,每个用户都可以拥有自己的家目录和配置文件,以便定制其工作环境。同时,管理员可以对每个用户的资源使用进行限制,以确保系统的稳定性和可靠性。

在CentOS系统中,您可以使用以下命令来创建一个普通用户:

adduser <username>

其中,<username>是您要创建的用户名。

该命令将创建一个新用户,并为其设置一个密码。系统还将创建一个家目录和一些其他配置文件,以及与该用户关联的一些默认组。

如果您想要为新用户设置密码,可以使用以下命令:

passwd <username>

其中,<username>是您要设置密码的用户名。系统将提示您输入新密码和确认密码。

您可以使用以下命令查看新用户的详细信息:

id <username>

该命令将显示与该用户关联的UID和GID等信息。

如果您想要为新用户分配其他组,请使用以下命令:

usermod -aG <groupname> <username>

其中,<groupname>是您要添加用户的组名,<username>是您要添加到该组的用户名。

请注意,除非您使用sudo命令,否则普通用户不能执行需要root权限的操作。建议仅在必要时使用root权限,以提高系统的安全性。

在CentOS系统中,您可以使用以下命令来查看系统中的所有用户:

cat /etc/passwd

该命令将打印出系统中所有用户的列表。每个用户都对应一个密码记录,其格式如下:

username:password:UID:GID:gecos:home_dir:shell

其中,字段含义如下:

  • username:用户的登录名。
  • password:加密的密码(通常是x)。
  • UID:用户的唯一标识符(User ID)。
  • GID:用户所属的组的唯一标识符(Group ID)。
  • gecos:用户的全名和其他信息,如电话号码和电子邮件地址。
  • home_dir:用户的主目录(Home directory)。
  • shell:用户登录后默认使用的shell。

您可以在输出中查找以":"分隔的第一个字段,即用户名,以获取所有用户的列表。例如,以下是示例输出:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

在这个例子中,root、bin、daemon和adm是系统中的四个用户。

在CentOS系统下,您可以使用su命令来从root用户切换到另一个用户。

以下是切换到普通用户的步骤:

  1. 打开终端窗口并登录到系统。确保您已经以root用户身份登录。

  2. 输入以下命令,将当前用户切换到另一个用户:

su <username>

其中,<username>是您要切换到的普通用户的用户名。

  1. 输入所需用户的密码(普通用户的密码),然后按Enter键。

  2. 如果您需要执行某些需要root权限的操作,请使用sudo命令。在执行sudo命令时,系统会提示您输入root用户的密码。

  3. 如果您想要回到root用户,请使用以下命令:

  4. 在输入密码后,您将回到root用户。

请注意,切换到普通用户后,您可能无法执行某些需要root权限的操作。此外,当您切换到普通用户时,系统将使用普通用户的家目录作为默认工作目录。如果您需要访问其他目录,请使用cd命令更改当前工作目录。

在CentOS系统中,您可以使用以下命令删除一个普通用户:

userdel <username>

其中,<username>是要删除的用户名。

请注意,使用此命令仅会删除用户账户和相关的系统文件,但不会删除用户的家目录。如果您希望同时删除用户的家目录,请使用以下命令:

userdel -r <username>

在执行此命令之前,请确保您要删除的用户不再需要,并且没有正在运行的进程或服务。

至于您的第二个问题,如果一个普通用户已经安装了一些软件,那么这些软件不会自动被删除。当您删除用户账户时,相关的系统文件和配置文件将被删除,但安装的软件文件将仍然存在于系统中。如果您希望彻底删除这些软件,可以手动删除它们或使用包管理器(如yum)卸载它们。建议在删除普通用户之前备份其家目录和其他重要文件,以便将来需要时恢复这些文件。

7. python脚本控制cpu利用率

以下是修改后的Python脚本,可以让云服务器的CPU利用率保持在50%,并且每隔20秒打印一次当前的CPU利用率:

import psutil
import time

# 设置目标CPU利用率为50%
target_cpu_percent = 50

while True:
    # 获取当前CPU利用率
    current_cpu_percent = psutil.cpu_percent()

    if current_cpu_percent < target_cpu_percent:
        # 如果当前CPU利用率低于目标利用率,则启动线程以增加CPU负载
        for i in range(psutil.cpu_count()):
            # 在每个CPU核心上运行无限循环
            cpu_thread = psutil.Popen(["while true; do :; done"], shell=True)
    else:
        # 如果当前CPU利用率高于或等于目标利用率,则杀死所有CPU线程以降低CPU负载
        for process in psutil.process_iter():
            try:
                process_name = process.name()
                if "while" in process_name:
                    process.kill()
            except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
                pass

    # 打印当前CPU利用率
    print(f"当前CPU利用率为:{current_cpu_percent}%")

    # 等待20秒后重新检查CPU利用率
    time.sleep(20)

这个脚本与之前的脚本相似,不同之处在于,它在每次循环中都打印了当前的CPU利用率。我们使用Python的f字符串语法来将当前的CPU利用率插入到打印语句中。然后,我们使用time.sleep()函数在每次循环之间等待20秒。这样,我们可以让脚本保持在后台运行,并每隔20秒更新一次CPU利用率的状态。

要终止正在运行的Python脚本,您可以使用以下方法:

  1. 使用Ctrl+C:在运行脚本的终端窗口中,按下Ctrl+C组合键,会向脚本发送中断信号,脚本会立即停止运行。

  2. 使用kill命令:可以使用kill命令来杀死正在运行的进程。首先,您需要找到该脚本的进程ID(PID),可以使用ps命令来查找:

ps aux | grep python

然后,使用kill命令来发送SIGTERM信号,以终止该进程:

kill <PID>
  • 其中,<PID>是您要终止的进程的PID。

请注意,如果您使用了后台模式(使用&运行脚本),则必须使用jobs命令查找该进程的PID,然后使用kill命令终止该进程。此外,如果脚本正在执行耗时较长的操作,可能需要等待一段时间才能生效。

8. 定时执行任务命令crontab

crontab是Linux/Unix系统中用于设置定时任务的命令,通过它可以在指定的时间周期性地执行命令或脚本。crontab命令是cron表达式的管理工具,使用户可以创建、查看、修改和删除cron表达式,以便按照自己的需求定时执行任务。

常用的crontab命令选项如下:

- crontab -e:打开当前用户的cron表达式文件,用于编辑或创建新的定时任务;
- crontab -l:列出当前用户的所有定时任务,包括已经启用和未启用的任务;
- crontab -r:删除当前用户的所有定时任务;
- crontab -u user:指定要操作的用户,可以查看或编辑指定用户的cron表达式文件;
- crontab -i:在删除前提示用户确认。

cron表达式一般由5个时间字段组成,分别表示分钟、小时、日期、月份和星期几,每个时间字段可以设置多个值,以逗号分隔。具体格式如下:

* * * * *
- - - - -
| | | | |
| | | | ----- 星期几 (0 - 7) (0 或 7 代表星期日)
| | | ------- 月份 (1 - 12)
| | --------- 日期 (1 - 31)
| ----------- 小时 (0 - 23)
------------- 分钟 (0 - 59)

其中,* 表示匹配该时间字段的所有值,而 */n 表示匹配该时间字段的每隔 n 个值。例如,*/5 表示每隔5个值匹配一次。

除了时间字段之外,还可以在cron表达式中指定要执行的命令或脚本,以及重定向输出到指定的日志文件中等。例如,下面的命令会在每天的凌晨2点执行一次backup.sh脚本,并将输出记录到backup.log文件中:

0 2 * * * /path/to/backup.sh >> /path/to/backup.log 2>&1

在编写和设置cron表达式时,需要考虑到任务执行的频率和执行时间,避免对系统和网络造成不必要的负担。同时,也需要注意任务的安全性和可靠性,确保任务执行的正确性和稳定性。

如果你想要每隔5分钟下载一次网页,可以使用以下命令:

*/5 * * * * curl -o /path/to/mainpage.html https://mctease.one/01_mainpage.html

其中,*/5 表示每隔5分钟执行一次命令。其他部分与上面的命令相同。

注意:在设置下载间隔时间时,需要避免对网站造成不必要的负担,建议设置合适的时间间隔。

关于curl

curl是一种用于与服务器进行数据交互的命令行工具和库。它支持多种协议(例如HTTP、FTP、SMTP等)和多种操作系统。curl常用于从Web服务器下载文件、上传文件到Web服务器、对Web API进行测试以及进行其他与Web相关的任务。

以下是一些curl的常见用法:

除了命令行工具外,curl还有一个可用于多种编程语言的库,可以在程序中使用curl库进行数据交互。

参考资料

Shell 教程 | 菜鸟教程

Bing AI - 搜索

猜你喜欢

转载自blog.csdn.net/qq_45659165/article/details/127612200