Linux怎么给一个文件修改属性:属主拥有一切权限,同组和其他用户拥有可读可写的权限?

1
chmod u=rwx,go=rw 文件名

这个命令将文件的权限设置为:

  • 属主(u)具有读、写和执行权限 (rwx)
  • 同组用户(g)具有读和写权限 (rw)
  • 其他用户(o)具有读和写权限 (rw)

怎么打包两个文件

要将两个文件打包到一个压缩文件中,您可以使用 tar 命令。以下是一个示例,演示如何将两个文件打包成一个.tar文件:

1
tar -cvf 打包文件名.tar 文件1 文件2

在上面的命令中:

  • -c 选项表示创建新的归档文件。
  • -v 选项表示在打包过程中显示详细信息(可选)。
  • -f 选项后面跟着要创建的打包文件的名称。
  • 打包文件名.tar 是您要创建的.tar文件的名称。
  • 文件1文件2 是您要打包的文件的名称。您可以列出任意数量的文件,以将它们全部打包到.tar文件中。

例如,要将名为 file1.txtfile2.txt 的两个文本文件打包到一个名为 myarchive.tar 的.tar文件中,您可以运行以下命令:

1
tar -cvf myarchive.tar file1.txt file2.txt

这将创建一个名为 myarchive.tar 的压缩文件,其中包含了 file1.txtfile2.txt 两个文件。

怎么复制文件到指定目录

要将文件复制到指定目录,您可以使用 cp 命令。以下是一般的命令格式:

1
cp 源文件 目标目录

其中:

  • 源文件 是要复制的文件的路径和名称。
  • 目标目录 是您要将文件复制到的目标目录的路径。

例如,如果您要将文件 file.txt 复制到目录 /目标目录并重命名,您可以运行以下命令:

1
cp file.txt /目标目录/文件名

如果您希望在复制文件时保留文件的元数据(如权限、所有者等),可以使用 -p 选项,例如:

1
cp -p file.txt /目标目录/文件名

如果目标目录不存在,cp 命令将创建该目录并将文件复制到其中。

请确保您有足够的权限来复制文件到指定目录,否则可能需要使用 sudo 命令以管理员权限运行 cp 命令。

脚本:

写一个shell脚本,判断系统软件源是否是中科大源,如果不是,则修改为中科大源。判断系统是否已经安装tree命令,如果没有则安装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash

# 检查是否是中科大源
if [ "$(cat /etc/apt/sources.list | grep 'ustc.edu.cn')" ]; then
echo "已经是中科大源,无需更改。"
else
echo "不是中科大源,正在更改..."

# 备份原来的软件源文件
cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 使用中科大源替换原来的软件源
sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

# 更新软件源
apt-get update

echo "软件源已更改为中科大源。"
fi

# 检查是否安装了tree命令
if ! [ -x "$(command -v tree)" ]; then
echo "未安装tree命令,正在安装..."
apt-get install -y tree
echo "tree命令已安装。"
else
echo "tree命令已经安装。"
fi

脚本将执行两项任务:首先检查并修改软件源,然后检查并安装tree命令。如果已经是中科大源或已经安装了tree命令,它将提供相应的消息并退出。否则,它将执行必要的更改和安装步骤。

写程序统计系统中,全部用户的总数。
1
2
3
4
5
6
7
8
#!/bin/bash

# 使用cat命令获取/etc/passwd文件中的用户列表,并通过管道传递给wc命令进行行数统计
user_count=$(cat /etc/passwd | wc -l)

# 输出用户总数
echo "系统中的用户总数是: $user_count"

脚本会读取/etc/passwd文件(该文件包含了系统中的用户信息),并使用wc -l命令来统计文件中的行数,即用户总数。最后,它会输出统计结果。

请注意,这个脚本仅统计了系统中的用户总数,而不考虑用户的状态或其他详细信息。如果您需要更详细的用户信息,您可以使用其他命令和工具,例如getent passwd,来获取更多的用户数据。

写程序统计/etc目录下,有多少个目录。不包含/etc子目录内的下一级目录。
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

# 使用find命令查找/etc目录下的子目录(-maxdepth 1表示只查找一级子目录)
# 使用-type d表示查找目录
# 使用-print0和wc命令来统计找到的目录数量
dir_count=$(find /etc -maxdepth 1 -type d -print0 | wc -l)

# 减去1,以排除/etc目录本身
dir_count=$((dir_count - 1))

# 输出结果
echo "在/etc目录下,有 $dir_count 个直接子目录。"

脚本使用find命令查找/etc目录下的直接子目录,并使用wc命令统计找到的目录数量。最后,它将结果输出到终端。

请注意,脚本中的-maxdepth 1选项确保只查找/etc目录的一级子目录。如果您要查找其他目录的直接子目录,请将/etc替换为目标目录的路径。

写程序,找出/etc目录中容量最大的三个子目录,显示名称和占用的磁盘量
1
2
3
4
5
6
7
#!/bin/bash

# 使用du命令列出/etc目录下的所有子目录,并按磁盘使用量排序
# 然后使用head命令获取前三个目录
# 最后使用awk命令格式化输出
du -h --max-depth=1 /etc | sort -rh | head -n 4 | awk '{print "目录: " $2 "\t大小: " $1}'

这个脚本使用du命令列出了/etc目录下的所有子目录,并按磁盘使用量从高到低排序。然后,它使用head命令获取前三个目录(最大的三个),最后使用awk命令格式化输出以显示目录名称和大小。

批量创建5个普通用户,stu1~5,创建成功后依次显示成功提示信息到屏幕上,如果发现已经存在用户,则显示用户已存在的信息,继续完成创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

# 循环创建5个用户
for i in {1..5}
do
username="stu$i"

# 检查用户是否已存在
if id "$username" &>/dev/null; then
echo "用户 $username 已存在,跳过创建。"
else
# 创建用户并显示成功信息
useradd "$username"
echo "用户 $username 创建成功。"
fi
done

脚本会循环创建名为stu1stu5的5个用户。在每次循环中,它会首先检查用户是否已经存在,如果存在就显示用户已存在的信息,否则就创建用户并显示创建成功的信息。

请注意,创建用户需要管理员权限,所以可能需要使用sudo命令以管理员身份运行脚本。

统计磁盘的分区,仅将磁盘分区sda,sdb,sdc三个磁盘的分区信息和容量占比,写到disk.txt中
1
2
3
4
5
6
7
8
9
10
#!/bin/bash

# 获取磁盘分区信息并筛选出sda、sdb和sdc分区
partitions=$(df -h | grep -E 'sda|sdb|sdc')

# 将结果写入到disk.txt文件中
echo "$partitions" > disk.txt

echo "磁盘分区信息已写入到disk.txt文件中。"

脚本会使用df -h命令获取磁盘分区信息,然后使用grep命令筛选出包含sdasdbsdc的分区信息,并将结果写入到disk.txt文件中。最后,它会显示一个消息来确认信息已写入文件中。

请确保脚本以管理员权限运行,以确保能够访问磁盘分区信息。

查找192.168.40.1~80范围内,所有ping不通的ip,将这些ip写入address.txt文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

# 循环ping测试IP范围内的每个IP地址
for ((i=1; i<=80; i++))
do
ip="192.168.40.$i"
ping -c 1 -W 1 "$ip" &>/dev/null
if [ $? -ne 0 ]; then
echo "$ip" >> address.txt
fi
done

echo "不可达的IP地址已写入address.txt文件中。"

脚本会循环从192.168.40.1192.168.40.80的IP地址,并使用ping命令测试每个IP是否可达。如果ping测试不成功,脚本会将IP地址添加到address.txt文件中。最后,脚本会显示一个消息来确认不可达的IP地址已写入文件中。

请注意,ping测试需要一定时间,因此脚本的运行时间可能会较长,具体取决于网络条件和可达性。

写程序统计系统中,系统用户的总数。结果显示到屏幕上
1
2
3
4
5
6
7
8
#!/bin/bash

# 使用grep命令过滤/etc/passwd文件,只保留包含系统用户的行,并计算行数
system_user_count=$(grep -cE ':(0|1|2|3|4|5|6):' /etc/passwd)

# 输出系统用户总数
echo "系统中的系统用户总数是:$system_user_count"

这个脚本使用grep命令过滤/etc/passwd文件,只保留包含系统用户(通常其UID为0到6之间)的行,并通过-c选项统计匹配的行数。最后,它将系统用户总数显示在屏幕上。

写程序统计/etc目录下(不含子目录),有多少个文件名结尾是conf的文件
1
2
3
4
5
6
7
8
#!/bin/bash

# 使用find命令查找/etc目录下(不含子目录)以"conf"结尾的文件,并统计它们的数量
conf_file_count=$(find /etc -maxdepth 1 -type f -name "*.conf" | wc -l)

# 输出结果
echo "在/etc目录下,有 $conf_file_count 个以.conf结尾的文件。"

脚本会使用find命令查找/etc目录下的文件,然后通过-name "*.conf"选项筛选出以”.conf”结尾的文件,并使用wc -l命令统计它们的数量。最后,它将结果显示在屏幕上。

写程序,找出/var目录下,名称最长的子目录。不包含var目录子目录的下一级目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash

# 使用find命令查找/var目录下的直接子目录,但不包括下一级子目录
# 使用-maxdepth 1选项表示只查找一级子目录
directories=$(find /var -maxdepth 1 -type d)

# 初始化变量来存储最长子目录的名称和长度
longest_directory=""
max_length=0

# 遍历找到的子目录
for dir in $directories
do
# 使用basename命令获取子目录的名称
dir_name=$(basename "$dir")

# 检查子目录的名称长度是否大于当前最长长度
if [ ${#dir_name} -gt $max_length ]; then
max_length=${#dir_name}
longest_directory="$dir_name"
fi
done

# 输出最长子目录的名称
echo "在/var目录下,名称最长的子目录是:$longest_directory"

脚本会使用 find 命令查找 /var 目录下的直接子目录(不包括下一级子目录),然后遍历这些子目录,找到名称最长的子目录并将其输出到屏幕上。