26 Linux高级篇-Linux面试题

news2024/11/17 22:24:47

26 Linux高级篇-Linux面试题

文章目录

  • 26 Linux高级篇-Linux面试题
    • 1.分析日志t.txt(访问量),将各个ip地址截取,并统计出现次数,并按从大到小排序(腾讯)
    • 2.统计连接到服务器的各个ip情况,并按连接数从大到小排序(腾讯)
    • 3.如忘记了mysql5.7数据库的ROOT用户的密码,如何找回?(滴滴)
    • 4.统计ip访问情况,要求分析nginx访问日志(access.log),找出访问页面数量在前两位的ip(美团)
    • 5.使用tcpdump监听本机,将来自ip 192.168.200.1、tcp端口为22的数据,保存输出到tcpdump.log,用做将来数据分析(美团)
    • 6.常用的Nginx模块,用来做什么(头条)
    • 7.如果你是系统管理员,在进行Linux系统权限划分时,应考虑哪些因素?(腾讯)
    • 8.权限操作思考题
    • *9.说明Centos7启动流程,并说明和CentOS6相同和不同的地方(腾讯)
    • 10.列举Linux高级命令,至少6个(百度)
    • 11.Linux查看内存、io读写、磁盘存储、端口占用、进程查看命令是什么?(瓜子)
    • 12.使用Linux命令计算t2.txt第二列的和并输出(美团)
    • 13.Shell脚本里如何检查一个文件是否存在?并给出提示(百度)
    • 14.用shell写一个脚本,对文本t3.txt中无序的一列数字排序,并将总和输出(百度)
    • 15.请用指令写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符“cat”的文件名称(金山)
    • 16.请写出统计/home目录下所有文件个数和所有文件总行数的指令(在金山面试题扩展)
    • 17.列出你了解的web服务器负载架构(滴滴)
    • 18.每天晚上10点30分,打包站点目录/var/spool/mail备份到/home目录下(每次备份按时间生成不同的备份包)(滴滴)
    • *19.如何优化Linux系统,说出你的方法(瓜子)
    • *20.Linux面试100道题

  • 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。
  • 可能会用到的资料有如下所示,下载链接见文末:
  1. 《鸟哥的Linux私房菜 基础学习篇 第四版》1
  2. 《鸟哥的Linux私房菜 服务器架设篇 第三版》2
  3. 《韩顺平_2021图解Linux全面升级》3

通过对面试题的讲解,可以加深对Linux各个指令的理解。
标星号的三节内容是重点


1.分析日志t.txt(访问量),将各个ip地址截取,并统计出现次数,并按从大到小排序(腾讯)

下面是t.txt

http://192.168.200.10/index1.html
http://192.168.200.10/index2.html
http://192.168.200.20/index1.html
http://192.168.200.30/index1.html
http://192.168.200.40/index1.html
http://192.168.200.30/order.html
http://192.168.200.10/order.html

解答:

################## 指令速览 #####################
cat t.txt | cut -d '/' -f 3 | sort | uniq -c | sort -nr

################## 实际演示 #####################
[root@CentOS76 ~]# mkdir /opt/interview
[root@CentOS76 ~]# cd /opt/interview
[root@CentOS76 interview]# vim 1-t.txt
############################
# 将下面的内容粘贴到文件中:
http://192.168.200.10/index1.html
http://192.168.200.10/index2.html
http://192.168.200.20/index1.html
http://192.168.200.30/index1.html
http://192.168.200.40/index1.html
http://192.168.200.30/order.html
http://192.168.200.10/order.html
############################
# 将文本内容的每一行按照斜杠“/”切割,然后拿出第3段内容
[root@CentOS76 interview]# cat 1-t.txt | cut -d '/' -f 3
192.168.200.10
192.168.200.10
192.168.200.20
192.168.200.30
192.168.200.40
192.168.200.30
192.168.200.10
# 将切割出来的内容再排序(默认从小到大)
[root@CentOS76 interview]# cat 1-t.txt | cut -d '/' -f 3 | sort
192.168.200.10
192.168.200.10
192.168.200.10
192.168.200.20
192.168.200.30
192.168.200.30
192.168.200.40
# 将排序好的内容进行统计
[root@CentOS76 interview]# cat 1-t.txt | cut -d '/' -f 3 | sort | uniq -c
      3 192.168.200.10
      1 192.168.200.20
      2 192.168.200.30
      1 192.168.200.40
# 再将统计的信息按照从大到小的顺序进行排序
[root@CentOS76 interview]# cat 1-t.txt | cut -d '/' -f 3 | sort | uniq -c | sort -nr
      3 192.168.200.10
      2 192.168.200.30
      1 192.168.200.40
      1 192.168.200.20

2.统计连接到服务器的各个ip情况,并按连接数从大到小排序(腾讯)

看看当前有多少个IP连接到Linux服务器上来了。

################## 指令速览 #####################
netstat -an | grep ESTABLISHED | awk -F ' ' '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c | sort -nr

################## 实际演示 #####################
[root@CentOS76 interview]# netstat -an | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:6666            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:41881           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN     
tcp        0     36 192.168.204.131:22      192.168.204.1:52174     ESTABLISHED
tcp        0      0 192.168.204.131:41881   192.168.204.1:60167     ESTABLISHED
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::111                  :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 ::1:6010                :::*                    LISTEN     
udp        0      0 192.168.122.1:53        0.0.0.0:*                          
udp        0      0 0.0.0.0:67              0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 0.0.0.0:111             0.0.0.0:*                          
udp        0      0 127.0.0.1:323           0.0.0.0:*                          
udp        0      0 0.0.0.0:942             0.0.0.0:*                          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
udp        0      0 0.0.0.0:55161           0.0.0.0:*                          
udp        0      0 0.0.0.0:6666            0.0.0.0:*                          
udp6       0      0 :::111                  :::*                               
udp6       0      0 ::1:323                 :::*                               
udp6       0      0 :::942                  :::*                               
raw6       0      0 :::58                   :::*                    7          
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     30976    /var/run/libvirt/libvirt-admin-sock
unix  3      [ ]         DGRAM                    14344    /run/systemd/notify
unix  2      [ ]         DGRAM                    14346    /run/systemd/cgroups-agent
unix  2      [ ACC ]     SEQPACKET  LISTENING     17169    /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     24164    @/tmp/dbus-lH68fOEA
unix  2      [ ACC ]     STREAM     LISTENING     37193    @/tmp/dbus-uGgEWS7L
unix  2      [ ACC ]     STREAM     LISTENING     22037    /tmp/.X11-unix/X0
unix  2      [ ACC ]     STREAM     LISTENING     38052    @/tmp/.ICE-unix/1904
unix  2      [ ACC ]     STREAM     LISTENING     24087    /var/run/NetworkManager/private-dhcp
unix  2      [ ACC ]     STREAM     LISTENING     14364    /run/systemd/journal/stdout
unix  5      [ ]         DGRAM                    14367    /run/systemd/journal/socket
unix  24     [ ]         DGRAM                    14369    /dev/log
# 按ctrl+c退出显示
# 1. 筛选出netstat -an中已经连接上的行
[root@CentOS76 interview]# netstat -an | grep ESTABLISHED
tcp        0     36 192.168.204.131:22      192.168.204.1:52174     ESTABLISHED
tcp        0    938 192.168.204.131:41881   192.168.204.1:60167     ESTABLISHED
# 2. 然后按照空格' '进行切割(连续空格视为一个空格),打印出第5段内容
[root@CentOS76 interview]# netstat -an | grep ESTABLISHED | awk -F ' ' '{print $5}'
192.168.204.1:52174
192.168.204.1:60167
# 3. 然后再按照冒号切割,打印出IP地址(第一段内容)
[root@CentOS76 interview]# netstat -an | grep ESTABLISHED | awk -F ' ' '{print $5}' | awk -F ':' '{print $1}'
192.168.204.1
192.168.204.1
# 4. 将IP地址进行排序(默认升序)
[root@CentOS76 interview]# netstat -an | grep ESTABLISHED | awk -F ' ' '{print $5}' | awk -F ':' '{print $1}' | sort
192.168.204.1
192.168.204.1
# 5. 排好序后进行统计
[root@CentOS76 interview]# netstat -an | grep ESTABLISHED | awk -F ' ' '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c
      2 192.168.204.1
# 6. 最后再降序排序即可
[root@CentOS76 interview]# netstat -an | grep ESTABLISHED | awk -F ' ' '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c | sort -nr
      2 192.168.204.1

注:对于简单的分割用cut指令,稍微复杂一点的用awk指令。

3.如忘记了mysql5.7数据库的ROOT用户的密码,如何找回?(滴滴)

################## 指令速览 #####################
# 1. 修改配置文件,使得mysql可以空密码登录
vim /etc/my.cnf             # 修改配置文件
#############################
# 在文档最后一行添加下面一句话:
skip-grant-tables
#############################
service mysqld restart      # 重启mysqld服务,使得配置生效
mysql -u root -p            # 空密码登录
# 2. 空密码登录mysql,并修改密码
########登录myql########
use mysql;          # 使用mysql数据库
desc user;          # 定位到users表
# 通过字段修改root密码
update user set authentication_string=password("mysqlroot") where user='root';
flush privileges;   # 使得修改生效
exit                # 退出mysql
########退出myql########
# 3. 将配置文件更改回来,并使用新密码登录
vim /etc/my.cnf
#############################
# 删除刚才添加的最后一行:
skip-grant-tables
#############################
mysql -u root -p


################## 实际演示 #####################
# 首先发现登录不上去
[root@CentOS76 interview]# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
# 修改配置文件,使支持空密码登录
[root@CentOS76 interview]# vim /etc/my.cnf
#############################
# 在文档最后一行添加下面一句话:
skip-grant-tables
#############################
# 重启服务
[root@CentOS76 interview]# service mysqld restart
Redirecting to /bin/systemctl restart mysqld.service
[root@CentOS76 interview]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydata             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.00 sec)

mysql> desc user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

mysql> update user set authentication_string=password("mysqlroot") where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
[root@CentOS76 interview]# vim /etc/my.cnf
#############################
# 删除刚才添加的最后一行:
skip-grant-tables
#############################
[root@CentOS76 interview]# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
# 发现空密码已经无法登录,下面输入刚才设置的密码才可以登录
[root@CentOS76 interview]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye

4.统计ip访问情况,要求分析nginx访问日志(access.log),找出访问页面数量在前两位的ip(美团)

下面是access.log的内容:

192.168.130.21 aaa.html
192.168.130.20 aaa.html
192.168.130.20 aaa.html
192.168.130.20 aaa.html
192.168.130.23 aaa.html
192.168.130.20 aaa.html
192.168.130.25 aaa.html
192.168.130.20 aaa.html
192.168.130.20 aaa.html
192.168.130.25 aaa.html
192.168.130.20 aaa.html

解答:

################## 指令速览 #####################
cat access.log | awk -F ' ' '{print $1}' | sort | uniq -c | sort -nr | head -2


################## 实际演示 #####################
[root@CentOS76 interview]# touch /opt/interview/access.log
[root@CentOS76 interview]# vim access.log 
###############################
# 将上面access.log的内容粘贴过来
###############################
[root@CentOS76 interview]# cat access.log | awk -F ' ' '{print $1}'
192.168.130.21
192.168.130.20
192.168.130.20
192.168.130.20
192.168.130.23
192.168.130.20
192.168.130.25
192.168.130.20
192.168.130.20
192.168.130.25
192.168.130.20
[root@CentOS76 interview]# cat access.log | awk -F ' ' '{print $1}' | sort | uniq -c
      7 192.168.130.20
      1 192.168.130.21
      1 192.168.130.23
      2 192.168.130.25
[root@CentOS76 interview]# cat access.log | awk -F ' ' '{print $1}' | sort | uniq -c | sort -nr
      7 192.168.130.20
      2 192.168.130.25
      1 192.168.130.23
      1 192.168.130.21
[root@CentOS76 interview]# cat access.log | awk -F ' ' '{print $1}' | sort | uniq -c | sort -nr | head -2
      7 192.168.130.20
      2 192.168.130.25

5.使用tcpdump监听本机,将来自ip 192.168.200.1、tcp端口为22的数据,保存输出到tcpdump.log,用做将来数据分析(美团)

  • 注:为了保证有抓到的内容,建议将上面的IP地址改成虚拟机的IP地址。

这个tcpdump指令就是监听tcp通讯的,下面是解答:

################## 指令速览 #####################
tcpdump -i ens33 host 192.168.204.131 and port 22 >> /opt/interview/tcpdump.log

################## 实际演示 #####################
# 1. 验证已安装tcpdump。若没有安装,可使用语句sudo yum install tcpdump
[root@CentOS76 interview]# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on virbr0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
# 2. 将tcpdump监听到的信息输出到tcpdump.log
[root@CentOS76 interview]# tcpdump -i ens33 host 192.168.204.131 and port 22 >> /opt/interview/tcpdump.log
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
^C2 packets captured
4 packets received by filter
0 packets dropped by kernel
# 3. 查看监听的内容
[root@CentOS76 interview]# cat tcpdump.log 

16:06:18.561792 IP CentOS76.ssh > 192.168.204.1.52174: Flags [P.], seq 2485459692:2485459880, ack 919837171, win 307, length 188
16:06:18.561924 IP 192.168.204.1.52174 > CentOS76.ssh: Flags [.], ack 188, win 4099, length 0

[root@CentOS76 interview]# 

6.常用的Nginx模块,用来做什么(头条)

这个题考的就是看看你在Linux下是否使用过Nginx服务器。

  • rewrite模块:实现重写功能。
  • access模块:来源控制。
  • ssl模块:安全加密。
  • ngx_http_gzip_module:网络传输压缩模块。
  • ngx_http_proxy_module:模块实现代理。
  • ngx_http_upstream_module:模块实现定义后端服务器列表。
  • ngx_cache_purge:实现缓存清除功能。

7.如果你是系统管理员,在进行Linux系统权限划分时,应考虑哪些因素?(腾讯)

简答题,老韩提供一些思路:

  1. 首先阐述主要对象——Linux权限。
  2. 然后根据自己实际经验谈考虑因素。

1. 首先阐述Linux权限
(之前“组管理和权限管理”一章的内容)那到底什么是rwx权限呢?下面就来进行rwx权限详解【难点】。Linux中“文件”和“目录”的rwx权限有不同的含义:

文件的rwx权限:

  1. r】:可以读取、查看该文件。
  2. w】:代表可写(write):可以修改,但是不代表可以删除该文件。删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
  3. x】:代表可执行(execute):表示系统可以使用./文件名执行该文件。比如在一个有执行权限的文件a.txt中写入ls -al,然后直接在终端输入./a.txt,那么该指令就会被相应的执行。
  4. -】:表示没有相应的权限。

目录的rwx权限:

  1. r】:代表可读(read):表示可以读取该目录的文件列表,比如使用ls指令。
  2. w】:代表可写(write):表示可以修改该目录的文件列表,也就是删除、创建、重命名其下的目录/文件。
  3. x】:代表可执行(execute):表示可以进入该目录,这和文件的x权限非常不同。如果仅有x权限,也可以读写那些有读写权限的文件,但就像摸黑找东西,全靠记忆力。
  4. -】:表示没有相应的权限。

a.txt:所以-rw-r--r--就表示a.txt是一个普通文件,“所有者”享有“读”、“写”权限不能“执行”,“所在组”的其他用户只享有“读”权限,“其他组”的所有用户也只享有“读”权限。

# 下面是权限展示示例:
[root@CentOS76 interview]# ll
总用量 12
-rw-r--r--. 1 root root 236 827 10:59 1-t.txt
-rw-r--r--. 1 root root 264 827 15:54 access.log
-rw-r--r--. 1 root root 225 827 16:06 tcpdump.log

修改权限就是如下:

# 基本语法-chmod
# 【方式一】+、-、=变更权限,u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
chmod u=rwx,g=rx,o=x 文件/目录名    # 给文件/目录的u用户rwx权限、g用户rx权限、o用户x权限
chmod o+w 文件/目录名               # 给文件/目录的o用户添加w权限
chmod a-x 文件/目录名               # 剥夺文件/目录的a用户的x权限

# 【方式二】r=4,w=2,x=1
chmod 751 文件/目录名    # 等价于chmod u=rwx,g=rx,o=x 文件/目录名

-R  权限递归选项

2. 根据自己实际经验谈考虑因素

  • 【注意权限分离】。比如在工作中,Linux系统权限和数据库权限不要在同一个部门。
  • 【权限最小原则】。在满足使用的情况下,权限最少优先。
  • 【减少使用root用户】。尽量用普通用户+sudo提权的方式进行日常操作。
  • 【锁定重要的系统文件】【演示1】。比如/etc/passwd、/etc/shadow etc/fstab、/etc/sudoers等配置文件,建议使用chattr指令(change attribute)锁定,需要操作时再打开。
  • 【设置特殊权限】。使用SUID、SGID、Sticky设置特殊权限。
  • 【检测rootkit脚本】【演示2】。可以利用工具,比如chkrootkit或者rootkit hunter检测rootkit脚本。rootkit是入侵者使用工具,在不察觉的建立了入侵系统途径。
  • 【检测文件系统完整性】。由于黑客入侵通常会修改文件系统,所以利用工具Tripwire检测文件系统完整性。

【演示1】锁定/etc/passwd文件,使系统不能通过useradd添加用户。

################## 指令速览 #####################
chattr +i /etc/passwd   # 锁定文件
chattr -i /etc/passwd   # 解锁文件

################## 实际演示 #####################
# 1. 首先验证usradd、userdel可以添加、删除用户
[root@CentOS76 interview]# useradd smith
[root@CentOS76 interview]# userdel -r smith
# 2. 锁定文件后,验证无法添加用户
[root@CentOS76 interview]# chattr +i /etc/passwd
[root@CentOS76 interview]# useradd smith
useradd:无法打开 /etc/passwd
# 3. 为了保险,将/usr/bin/chattr指令挪走并改名,使得外来“黑客”无法使用chattr解锁
[root@CentOS76 interview]# which chattr
/usr/bin/chattr
[root@CentOS76 interview]# mv /usr/bin/chattr /opt/chattr
[root@CentOS76 interview]# find / -name chattr       # 只挪走还是可以找到的
/opt/chattr
[root@CentOS76 interview]# mv /opt/chattr /opt/h     # 关键是改名
# 4. 将chattr名字改回来并挪回来,验证可以重新使用useradd、userdel
[root@CentOS76 interview]# mv /opt/h /usr/bin/chattr
[root@CentOS76 interview]# chattr -i /etc/passwd
[root@CentOS76 interview]# useradd smith
[root@CentOS76 interview]# userdel -r smith

【演示2】安装chkrootkit。

  • chkrootkit官网下载(成功):https://chkrootkit.org/download/ ,对应的指令为
    wget ftp://ftp.chkrootkit.org/pub/seg/pac/chkrootkit.tar.gz
  • 安装包备用下载地址(成功):https://src.fedoraproject.org/repo/pkgs/chkrootkit/ ,对应的指令为
    wget https://src.fedoraproject.org/repo/pkgs/chkrootkit/chkrootkit-0.57.tar.gz
  • 安装包备用下载地址(肯定成功):我的百度网盘“chkrootkit.tar.gz”,下载后通过Xftp上传到Linux虚拟机目录/opt/chkrootkit
  • 完整的操作流程:博客园文章“Chkrootkit安装配置教程 – Linux后门入侵检测”
################## 指令速览 #####################
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar -zxvf chkrootkit.tar.gz
./chkrootkit 

################## 实际演示 #####################
# 1. 下载chkrootkit安装包
[root@CentOS76 interview]# mkdir /opt/chkrootkit
[root@CentOS76 interview]# cd /opt/chkrootkit/
[root@CentOS76 chkrootkit]# wget ftp://ftp.chkrootkit.org/pub/seg/pac/chkrootkit.tar.gz
--2023-08-27 17:27:03--  ftp://ftp.chkrootkit.org/pub/seg/pac/chkrootkit.tar.gz
           => “chkrootkit.tar.gz.1”
正在解析主机 ftp.chkrootkit.org (ftp.chkrootkit.org)... 187.33.4.179
正在连接 ftp.chkrootkit.org (ftp.chkrootkit.org)|187.33.4.179|:21... 已连接。
正在以 anonymous 登录 ... 登录成功!
==> SYST ... 完成。   ==> PWD ... 完成。
==> TYPE I ... 完成。 ==> CWD (1) /pub/seg/pac ... 完成。
==> SIZE chkrootkit.tar.gz ... 42957
==> PASV ... 完成。   ==> RETR chkrootkit.tar.gz ... 完成。
长度:42957 (42K) (非正式数据)

100%[=============================================================>] 42,957      23.5KB/s 用时 1.8s   

2023-08-27 17:27:12 (23.5 KB/s) - “chkrootkit.tar.gz” 已保存 [42957]

# 若无法下载,就尝试以下指令,或去手动下载安装包安装
# wget https://src.fedoraproject.org/repo/pkgs/chkrootkit/chkrootkit-0.57.tar.gz
# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
# 2. 解压安装chkrootkit
[root@CentOS76 chkrootkit]# ls
chkrootkit.tar.gz
[root@CentOS76 chkrootkit]# tar -zxvf chkrootkit.tar.gz 
chkrootkit-0.53/
chkrootkit-0.53/chkrootkit
chkrootkit-0.53/ifpromisc.c
chkrootkit-0.53/check_wtmpx.c
chkrootkit-0.53/Makefile
chkrootkit-0.53/README.chkwtmp
chkrootkit-0.53/strings.c
chkrootkit-0.53/README.chklastlog
chkrootkit-0.53/chkwtmp.c
chkrootkit-0.53/chkutmp.c
chkrootkit-0.53/chkdirs.c
chkrootkit-0.53/ACKNOWLEDGMENTS
chkrootkit-0.53/README
chkrootkit-0.53/COPYRIGHT
chkrootkit-0.53/chkproc.c
chkrootkit-0.53/chkrootkit.lsm
chkrootkit-0.53/chklastlog.c
[root@CentOS76 chkrootkit]# ./chkrootkit-0.53/
-bash: ./chkrootkit-0.53/: 是一个目录
[root@CentOS76 chkrootkit]# ls
chkrootkit-0.53  chkrootkit.tar.gz
[root@CentOS76 chkrootkit]# cd chkrootkit-0.53/
[root@CentOS76 chkrootkit-0.53]# ls
ACKNOWLEDGMENTS  chklastlog.c  chkrootkit.lsm  COPYRIGHT    README             strings.c
check_wtmpx.c    chkproc.c     chkutmp.c       ifpromisc.c  README.chklastlog
chkdirs.c        chkrootkit    chkwtmp.c       Makefile     README.chkwtmp
# 3. 下面开始扫描,有异常会显示红色
[root@CentOS76 chkrootkit-0.53]# ./chkrootkit 
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected
Checking `fingerd'... not found
Checking `gpm'... not found
Checking `grep'... not infected
Checking `hdparm'... not found
Checking `su'... not infected
Checking `ifconfig'... not infected
Checking `inetd'... not tested
Checking `inetdconf'... not found
Checking `identd'... not found
Checking `init'... not infected
Checking `killall'... not infected
Checking `ldsopreload'... can't exec ./strings-static, not tested
Checking `login'... not infected
Checking `ls'... not infected
Checking `lsof'... not infected
Checking `mail'... not infected
Checking `mingetty'... not found
Checking `netstat'... not infected
Checking `named'... not found
Checking `passwd'... not infected
Checking `pidof'... not infected
Checking `pop2'... not found
Checking `pop3'... not found
Checking `ps'... not infected
Checking `pstree'... not infected
Checking `rpcinfo'... not infected
Checking `rlogind'... not found
Checking `rshd'... not found
Checking `slogin'... not infected
Checking `sendmail'... not infected
Checking `sshd'... not infected
Checking `syslogd'... not tested
Checking `tar'... not infected
Checking `tcpd'... not infected
Checking `tcpdump'... not infected
Checking `top'... not infected
Checking `telnetd'... not found
Checking `timed'... not found
Checking `traceroute'... not infected
Checking `vdir'... not infected
Checking `w'... not infected
Checking `write'... not infected
Checking `aliens'... no suspect files
Searching for sniffer's logs, it may take a while... nothing found
Searching for HiDrootkit's default dir... nothing found
Searching for t0rn's default files and dirs... nothing found
Searching for t0rn's v8 defaults... nothing found
Searching for Lion Worm default files and dirs... nothing found
Searching for RSHA's default files and dir... nothing found
Searching for RH-Sharpe's default files... nothing found
Searching for Ambient's rootkit (ark) default files and dirs... nothing found
Searching for suspicious files and dirs, it may take a while... 
/usr/lib/debug/usr/.dwz

Searching for LPD Worm files and dirs... nothing found
Searching for Ramen Worm files and dirs... nothing found
Searching for Maniac files and dirs... nothing found
Searching for RK17 files and dirs... nothing found
Searching for Ducoci rootkit... nothing found
Searching for Adore Worm... nothing found
Searching for ShitC Worm... nothing found
Searching for Omega Worm... nothing found
Searching for Sadmind/IIS Worm... nothing found
Searching for MonKit... nothing found
Searching for Showtee... nothing found
Searching for OpticKit... nothing found
Searching for T.R.K... nothing found
Searching for Mithra... nothing found
Searching for LOC rootkit... nothing found
Searching for Romanian rootkit... nothing found
Searching for HKRK rootkit... nothing found
Searching for Suckit rootkit... nothing found
Searching for Volc rootkit... nothing found
Searching for Gold2 rootkit... nothing found
Searching for TC2 Worm default files and dirs... nothing found
Searching for Anonoying rootkit default files and dirs... nothing found
Searching for ZK rootkit default files and dirs... nothing found
Searching for ShKit rootkit default files and dirs... nothing found
Searching for AjaKit rootkit default files and dirs... nothing found
Searching for zaRwT rootkit default files and dirs... nothing found
Searching for Madalin rootkit default files... nothing found
Searching for Fu rootkit default files... nothing found
Searching for ESRK rootkit default files... nothing found
Searching for rootedoor... nothing found
Searching for ENYELKM rootkit default files... nothing found
Searching for common ssh-scanners default files... nothing found
Searching for Linux/Ebury - Operation Windigo ssh... not tested
Searching for 64-bit Linux Rootkit ... nothing found
Searching for 64-bit Linux Rootkit modules... nothing found
Searching for Mumblehard Linux ... nothing found
Searching for Backdoor.Linux.Mokes.a ... nothing found
Searching for Malicious TinyDNS ... nothing found
Searching for Linux.Xor.DDoS ... nothing found
Searching for Linux.Proxy.1.0 ... nothing found
Searching for CrossRAT ... nothing found
Searching for Hidden Cobra ... nothing found
Searching for Rocke Miner ... nothing found
Searching for suspect PHP files... nothing found
Searching for anomalies in shell history files... nothing found
Checking `asp'... not infected
Checking `bindshell'... not infected
Checking `lkm'... not tested: can't exec 
Checking `rexedcs'... not found
Checking `sniffer'... not tested: can't exec ./ifpromisc
Checking `w55808'... not infected
Checking `wted'... not tested: can't exec ./chkwtmp
Checking `scalper'... not infected
Checking `slapper'... not infected
Checking `z2'... not tested: can't exec ./chklastlog
Checking `chkutmp'... not tested: can't exec ./chkutmp
Checking `OSX_RSPLUG'... not tested

8.权限操作思考题

  1. 用户tom对目录/home/test有执行和读写权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗?能修改吗?能删除吗?
    能读、不能修改、能删除。
  2. 用户tom对目录/home/test只有读写权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗?能修改吗?能删除吗?
    不能读、不能修改、不能删除。
  3. 用户tom对目录/home/test只有执行权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗?能修改吗?能删除吗?
    能读、不能修改、不能删除。
  4. 用户tom对目录/home/test只有执行和写权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗?能修改吗?能删除吗?
    能读、不能修改、能删除。

*9.说明Centos7启动流程,并说明和CentOS6相同和不同的地方(腾讯)

很常规,出现频率高并不复杂,但是细节很多不容易说完。回答面试官的关键:

  1. 大概说出Linux7启动的四个阶段。
  2. 然后指出第二、四阶段是和CentOS6不一样的,并将Linux7第四阶段的细节再说一下。

1. Linux7启动的流程
首先来介绍一下CentOS7的启动流程:

【参考1】CSDN博文“centos7 开机启动流程”。
【参考2】稀土掘金文章“一文快速看懂 Centos7 系统的启动过程(配思维导图)”。

图26-1 Linux7启动流程-思维导图

下面来对上图做出一些注释:

  • 第一阶段:硬件引导启动
  1. Power On:上电。
  2. BIOS:查找启动介质时会选择:光驱启动(CDROM)、USB启动、硬件启动(HDD)。
  3. MBR:会读取分区表。
  • 第二阶段:GRUB2启动引导阶段
    显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub2/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。

/boot/grub2/grub.cfg:是“GRUB2引导加载程序”的配置文件,用于配置操作系统的启动选项和引导过程中的各种设置,如选用哪个内核、启动模式等。之前“定制自己的linux”一章,通过修改这个文件指定哪些盘是启动盘,哪些盘是根目录。grub.cfg配置文件比较复杂,开头注释部分说明了由/etc/grub.d/目录下文件和/etc/default/grub文件组成,但在CentOS7中一般是使用命令进行配置,而无需直接修改该配置文件。一般修改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。

  • 第三阶段:内核引导阶段
    加载驱动,切换到真正的根文件系统。

  • 第四阶段:systemed初始化阶段
    调用systemd初始化系统。

下图进一步给出了Linux7的启动流程,最关键的是第四阶段(从“调用systemd”开始)的介绍

图26-2 Linux7启动流程图

一些注意点:

  • 内核解压并自检:若内核有问题,跑不起来。
  • 由虚拟根目录切换回磁盘根目录:这个时候磁盘就找到了。
  • 调用muliti-user.target:表示“多用户模式”。
  • 启动本级别对应的服务:比如本级别定义的自启服务,可以使用指令systemctl来更改这些要自启的服务。
  • 调用/etc/rc.d/rc.local:定义开机后需要自启的自定义脚本。

最关键的第四阶段(“多用户模式”作为演示示例):

  1. 执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。
  2. 并发执行sysinit.target来初始化系统和basic.target来准备操作系统。
  3. 并发启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。
  4. 最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。

显然在上述“调用systemd”启动的过程中调用了很多系统配置文件,下面简单对这些文件的依赖关系做出示意:

/lib/systemd/system/
依赖
依赖
依赖
指向
指向
graphical.target
multiuser.target
basic.target
sysinit.target
/etc/systemd/system/default.target
图26-3 .target文件依赖关系

如上图所示:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.targetmultiuser.target。而graphical.target依赖multiuser.targetmultiuser.target依赖basic.targetbasic.target依赖sysinit.target,所以倒过来执行。

2. CentOS7于CentOS6启动的不同点
第一步、硬件启动阶段
这一步和CentOS6差不多,详细请看上图。

第二步、GRUB2引导阶段
从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了。CentOS7的主引导程序使用的是grub2。

这一步的流程:显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub2/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。

在这里grub.cfg配置文件已经比较复杂了,但并不用担心,到了CentOS7中一般是使用命令进行配置,而不直接去修改配置文件了。不过我们可以看到grub.cfg配置文件开头注释部分说明了由/etc/grub.d/目录下文件和/etc/default/grub文件组成。

一般修改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。

第三步、内核引导阶段

这一步与CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd。

第四步、systemed初始化阶段(又叫系统初始化阶段)
这个阶段和CentOS6区别较大。(下面这段话就是回答的重点)
CentOS7中我们的初始化进程变为了systemd。执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target来初始化系统和basic.target来准备操作系统。接着启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。

注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。

3. 补充chatgpt的回答
CentOS7启动流程:

  1. BIOS/UEFI 启动:计算机首先执行 BIOS 或 UEFI 中的引导程序,查找可引导的设备。一般来说,它会查找磁盘或其他存储设备以加载引导加载程序。
  2. 引导加载程序(GRUB2):GRUB2 是 CentOS 7 默认使用的引导加载程序。GRUB2 负责显示引导菜单,其中列出了可用的内核选项。
  3. 加载内核和 initramfs:一旦用户选择内核选项,GRUB2 会加载指定的内核文件(vmlinuz),同时加载相关的 initramfs(初始化 RAM Disk)。initramfs 是一个临时文件系统,包含了内核启动所需的文件和驱动程序。
  4. 内核初始化和启动 init:内核初始化时,它会检测硬件、加载驱动程序并设置系统参数。然后,内核启动第一个用户空间进程,这通常是 systemd 初始化进程。
  5. systemd 初始化:systemd 是 CentOS 7 默认使用的初始化系统,它负责启动和管理系统的各种服务。systemd 启动一系列的目标(target),每个目标包含要同时启动的一组服务。
  6. 运行级别(Runlevel)切换:在过去的 SysVinit 系统中,运行级别定义了系统在不同模式下启动的配置。在 CentOS 7 中,systemd 引入了目标(target)的概念,取代了运行级别。
  7. 启动服务和进程:在所选的目标中,systemd 启动相关的服务和进程。这可能涉及网络、文件系统、登录管理、时间同步等各种服务。
  8. 启动显示管理器(如果有):如果您的系统配置了图形用户界面(GUI),systemd 可能会启动 X Window 系统或其他显示管理器,显示登录界面。
  9. 用户登录:最终,系统会显示登录界面,用户可以通过图形界面或终端登录。

总之,CentOS 7 的启动流程涉及硬件初始化、加载内核、初始化 RAM Disk、启动用户空间、systemd 初始化和服务启动等步骤。每个步骤都是为了确保系统能够成功启动并准备好接受用户登录和任务执行。

CentOS6启动流程(使用了SysVinit初始化系统):

  1. BIOS/UEFI 启动:计算机首先执行 BIOS 或 UEFI 中的引导程序,查找可引导的设备。一般来说,它会查找硬盘或其他存储设备以加载引导加载程序。
  2. 引导加载程序(GRUB):GRUB(Legacy)是 CentOS 6 默认使用的引导加载程序。GRUB 负责显示引导菜单,其中列出了可用的内核选项。
  3. 加载内核和 initramfs:一旦用户选择内核选项,GRUB 会加载指定的内核文件(vmlinuz),同时加载相关的 initramfs(初始化 RAM Disk)。initramfs 是一个临时文件系统,包含了内核启动所需的文件和驱动程序。
  4. 内核初始化和启动 init:内核初始化时,它会检测硬件、加载驱动程序并设置系统参数。然后,内核启动第一个用户空间进程,这通常是 SysVinit 初始化进程。
  5. 运行级别(Runlevel)切换:在 CentOS 6 中,运行级别定义了系统在不同模式下启动的配置。运行级别涵盖了不同的系统状态,如单用户模式、多用户模式、图形界面模式等。
  6. 启动服务和进程:在所选的运行级别中,SysVinit 启动相关的服务和进程。这可能涉及网络、文件系统、登录管理、时间同步等各种服务。
  7. 启动显示管理器(如果有):如果您的系统配置了图形用户界面(GUI),SysVinit 可能会启动 X Window 系统或其他显示管理器,显示登录界面。
  8. 用户登录:最终,系统会显示登录界面,用户可以通过图形界面或终端登录。

总之,CentOS 6 的启动流程与许多早期的 Linux 发行版相似,使用了 SysVinit 初始化系统。这个过程涉及硬件初始化、加载内核、初始化 RAM Disk、启动用户空间、启动服务和进程等步骤,最终准备好接受用户登录和任务执行。

CentOS6和CentOS7在启动流程上的区别:

这些区别主要涉及初始化系统、运行级别管理和服务管理等方面。以下是其中一些主要的区别:

  1. 初始化系统:
    CentOS 6 使用 SysVinit 作为初始化系统。在 SysVinit 中,系统通过运行级别(runlevel)来定义不同的操作模式,每个运行级别包含了要启动的一组服务和进程。
    CentOS 7 使用 systemd 作为初始化系统。systemd 引入了更加现代的方式来管理系统服务,它不仅可以更快地启动服务,还可以并行地处理服务和资源管理。
  2. 运行级别:
    在 CentOS 6 中,运行级别用于定义系统启动时的不同模式,如单用户模式、多用户模式、图形界面模式等。每个运行级别都有对应的服务启动配置。
    在 CentOS 7 中,不再使用传统的运行级别,而是引入了 target 的概念。target 是一组服务的逻辑分组,它定义了系统在不同模式下的行为,如图形目标、多用户目标等。
  3. 服务管理:
    CentOS 6 使用 service 命令来管理系统服务,例如启动、停止、重启等。
    CentOS 7 使用 systemctl 命令来管理系统服务。systemctl 提供了更多的功能,如启动、停止、重启、状态查询、日志查看等。
  4. 启动脚本:
    在 CentOS 6 中,每个服务都有一个启动脚本位于 /etc/init.d/ 目录下。这些脚本由 SysVinit 管理。
    在 CentOS 7 中,systemd 使用 .service 文件来管理服务,这些文件位于 /usr/lib/systemd/system/ 或 /etc/systemd/system/ 目录下。
  5. 日志管理:
    在 CentOS 6 中,系统日志通常存储在 /var/log/ 目录下,使用工具如 syslog 或 rsyslog 进行管理。
    在 CentOS 7 中,systemd 引入了 journald 来管理日志,系统日志直接存储在 journald 的数据库中,可以使用 journalctl 命令来查询和管理日志。

总体而言,CentOS 7 引入了 systemd 初始化系统和相关的变化,使得启动流程更加现代化、高效和灵活。这些变化也使得服务管理和系统配置更加方便。

10.列举Linux高级命令,至少6个(百度)

netstat     # 网络状态监控
top         # 系统运行状态
lsblk       # 查看硬盘分区
find        # 搜索符合指定条件的文件和目录
ps -aux     # 查看运行进程
chkconfig   # 查看服务启动状态
systemctl   # 管理系统服务器
...

11.Linux查看内存、io读写、磁盘存储、端口占用、进程查看命令是什么?(瓜子)

################## 指令速览 #####################
top                     # 查看内存
iotop                   # io读写,安装指令:yum install iotop
df -lh                  # 磁盘存储
netstat -tunlp          # 端口占用
ps -aux | grep 进程名   # 进程查看

################## 实际演示 #####################
[root@CentOS76 boot]# top
top - 09:51:20 up 2 days, 18:04,  2 users,  load average: 0.08, 0.03, 0.05
Tasks: 298 total,   1 running, 297 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8154716 total,  2834392 free,  1203764 used,  4116560 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  6622624 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                          
 64145 root      20   0 1344732  49228  10228 S   0.3  0.6   1:44.80 BT-Task                          
 95943 root      20   0 1029412  27792   5020 S   0.3  0.3   0:13.66 oneav                            
     1 root      20   0  194244   7456   4252 S   0.0  0.1   0:32.15 systemd                          
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.08 kthreadd                         
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                     
# 下面的就省略了

[root@CentOS76 boot]# iotop
Total DISK READ :	0.00 B/s | Total DISK WRITE :      11.59 K/s
Actual DISK READ:	0.00 B/s | Actual DISK WRITE:      11.59 K/s
   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                
 64120 be/4 root        0.00 B/s   11.59 K/s  0.00 %  0.00 % python3 /www/server/panel/BT-Panel
  2048 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % at-spi-bus-launcher [dconf worker]
     1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-r~stem --deserialize 22
     2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
  2051 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % at-spi-bus-launcher [gdbus]
     4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
# 下面的就省略了

[root@CentOS76 boot]# df -lh
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        3.9G     0  3.9G    0% /dev
tmpfs           3.9G  8.0K  3.9G    1% /dev/shm
tmpfs           3.9G   21M  3.9G    1% /run
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda3        17G   14G  2.0G   88% /
/dev/sda1       976M  178M  732M   20% /boot
tmpfs           797M   36K  797M    1% /run/user/0
/dev/sr0        4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64

[root@CentOS76 boot]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:6666            0.0.0.0:*               LISTEN      4931/perl           
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      772/rpcbind         
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1822/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1213/sshd           
# 下面的就省略了

[root@CentOS76 boot]# ps -aux | grep sshd
root       1213  0.0  0.0 113000  4304 ?        Ss   8月25   0:00 /usr/sbin/sshd -D
root       2604  0.0  0.0 161088  5660 ?        Ss   8月25   0:02 sshd: root@pts/0
root     130269  0.0  0.0 112828   968 pts/0    S+   09:58   0:00 grep --color=auto sshd

12.使用Linux命令计算t2.txt第二列的和并输出(美团)

下面是t2.txt

张三 40
李四 50
王五 60

解答:

################## 指令速览 #####################
cat t2.txt | awk -F " " '{sum+=$2} END {print sum}'

################## 实际演示 #####################
[root@CentOS76 ~]# touch /opt/interview/t2.txt
[root@CentOS76 ~]# cd /opt/interview/
[root@CentOS76 interview]# ls
1-t.txt  access.log  t2.txt  tcpdump.log
[root@CentOS76 interview]# vim t2.txt 
#########################
# 将下面的内容复制到文档中:
张三 40
李四 50
王五 60
#########################
[root@CentOS76 interview]# cat t2.txt | awk -F " " '{sum+=$2} END {print sum}'
150

13.Shell脚本里如何检查一个文件是否存在?并给出提示(百度)

if [ -f 文件名 ]
then echo "存在"
else echo "不存在"
fi

14.用shell写一个脚本,对文本t3.txt中无序的一列数字排序,并将总和输出(百度)

下面是t3.txt

3
2
9
8
1
7
4
6
0
5

解答:

################## 指令速览 #####################
sort -nr t3.txt | awk '{sum+=$0; print $0} END {print sum}'

################## 实际演示 #####################
[root@CentOS76 interview]# vim /opt/interview/t3.txt
#########################
# 将下面的数字复制到文件中:
3
2
9
8
1
7
4
6
0
5
#########################
[root@CentOS76 interview]# sort -nr t3.txt 
9
8
7
6
5
4
3
2
1
0
[root@CentOS76 interview]# sort -nr t3.txt | awk '{sum+=$0} END {print sum}'
45
[root@CentOS76 interview]# sort -nr t3.txt | awk '{sum+=$0; print $0} END {print sum}'
9
8
7
6
5
4
3
2
1
0
45

15.请用指令写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符“cat”的文件名称(金山)

注:我按照题目要求找出来的目录实在太多,所以将题目换成,寻找/opt/interview目录下所有包含字符’9’的文件名称。

################## 指令速览 #####################
grep -r "9" /opt/interview/ | cut -d ':' -f 1

################## 实际演示 #####################
[root@CentOS76 interview]# grep -r "9" /opt/interview/
/opt/interview/1-t.txt:http://192.168.200.10/index1.html
/opt/interview/1-t.txt:http://192.168.200.10/index2.html
/opt/interview/1-t.txt:http://192.168.200.20/index1.html
/opt/interview/1-t.txt:http://192.168.200.30/index1.html
/opt/interview/1-t.txt:http://192.168.200.40/index1.html
/opt/interview/1-t.txt:http://192.168.200.30/order.html
/opt/interview/1-t.txt:http://192.168.200.10/order.html
/opt/interview/tcpdump.log:16:06:18.561792 IP CentOS76.ssh > 192.168.204.1.52174: Flags [P.], seq 2485459692:2485459880, ack 919837171, win 307, length 188
/opt/interview/tcpdump.log:16:06:18.561924 IP 192.168.204.1.52174 > CentOS76.ssh: Flags [.], ack 188, win 4099, length 0
/opt/interview/t3.txt:9
/opt/interview/access.log:192.168.130.21 aaa.html
/opt/interview/access.log:192.168.130.20 aaa.html
/opt/interview/access.log:192.168.130.20 aaa.html
/opt/interview/access.log:192.168.130.20 aaa.html
/opt/interview/access.log:192.168.130.23 aaa.html
/opt/interview/access.log:192.168.130.20 aaa.html
/opt/interview/access.log:192.168.130.25 aaa.html
/opt/interview/access.log:192.168.130.20 aaa.html
/opt/interview/access.log:192.168.130.20 aaa.html
/opt/interview/access.log:192.168.130.25 aaa.html
/opt/interview/access.log:192.168.130.20 aaa.html
[root@CentOS76 interview]# grep -r "9" /opt/interview/ | cut -d ':' -f 1
/opt/interview/1-t.txt
/opt/interview/1-t.txt
/opt/interview/1-t.txt
/opt/interview/1-t.txt
/opt/interview/1-t.txt
/opt/interview/1-t.txt
/opt/interview/1-t.txt
/opt/interview/tcpdump.log
/opt/interview/tcpdump.log
/opt/interview/t3.txt
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
/opt/interview/access.log
[root@CentOS76 interview]# grep -r "9" /opt/interview/ | cut -d ':' -f 1 | uniq -c
      7 /opt/interview/1-t.txt
      2 /opt/interview/tcpdump.log
      1 /opt/interview/t3.txt
     11 /opt/interview/access.log
[root@CentOS76 interview]# grep -r "9" /opt/interview/ | cut -d ':' -f 1 | sort | uniq -c | sort -nr
     11 /opt/interview/access.log
      7 /opt/interview/1-t.txt
      2 /opt/interview/tcpdump.log
      1 /opt/interview/t3.txt

16.请写出统计/home目录下所有文件个数和所有文件总行数的指令(在金山面试题扩展)

################## 指令速览 #####################
find /home -name "*.*" | wc -l          # 列出所有文件个数
find /home -name "*.*" | xargs wc -l    # 列出所有文件的总行数

################## 实际演示 #####################
# 1. 首先用小目录/opt/interview/试试
[root@CentOS76 interview]# find /opt/interview/ -name "*.*" | wc -l
5
[root@CentOS76 interview]# find /opt/interview/ -name "*.*" | xargs wc -l
  7 /opt/interview/1-t.txt
  4 /opt/interview/tcpdump.log
 10 /opt/interview/t3.txt
 11 /opt/interview/access.log
  3 /opt/interview/t2.txt
 35 总用量

# 2. 下面来看看题目规定的/home目录
[root@CentOS76 interview]# find /home -name "*.*" | wc -l
254
[root@CentOS76 interview]# find /home -name "*.*" | xargs wc -l
wc: /home/lyl/.cache: 是一个目录
       0 /home/lyl/.cache
       0 /home/lyl/.cache/gdm/session.log.old
       0 /home/lyl/.cache/gdm/session.log
wc: /home/lyl/.cache/mozilla/firefox/m1ftx1zv.default: 是一个目录
       0 /home/lyl/.cache/mozilla/firefox/m1ftx1zv.default
wc: /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default: 是一个目录
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-malware-simple.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-phish-simple.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/block-flashsubdoc-digest256.pset
       2 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/except-flash-digest256.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/analytics-track-digest256.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-unwanted-simple.pset
       1 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-harmful-simple.sbstore
       6 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/social-track-digest256.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-trackwhite-simple.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-track-simple.pset
      32 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/block-flash-digest256.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/mozplugin-block-digest256.pset
       1 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/allow-flashallow-digest256.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-unwanted-simple.sbstore
      46 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/analytics-track-digest256.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/allow-flashallow-digest256.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-malware-simple.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-block-simple.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/block-flash-digest256.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-harmful-simple.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/content-track-digest256.pset
      16 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/mozplugin-block-digest256.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/except-flashallow-digest256.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/mozstd-trackwhite-digest256.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/except-flashsubdoc-digest256.sbstore
       1 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-track-simple.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/base-track-digest256.pset
       1 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/except-flashallow-digest256.sbstore
     242 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/base-track-digest256.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-phish-simple.sbstore
     291 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/block-flashsubdoc-digest256.sbstore
      67 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/content-track-digest256.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-trackwhite-simple.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/except-flashsubdoc-digest256.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/test-block-simple.sbstore
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/ads-track-digest256.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/social-track-digest256.pset
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/except-flash-digest256.pset
    1886 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/mozstd-trackwhite-digest256.sbstore
     191 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/safebrowsing/ads-track-digest256.sbstore
      23 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/OfflineCache/index.sqlite
       0 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/startupCache/urlCache.bin
   56707 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/startupCache/scriptCache.bin
     614 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/startupCache/webext.sc.lz4
    6861 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/startupCache/scriptCache-child.bin
   18995 /home/lyl/.cache/mozilla/firefox/g2lzrpra.default-default/startupCache/startupCache.8.little
       0 /home/lyl/.cache/gnome-shell/update-check-3.28
       4 /home/lyl/.cache/fontconfig/CACHEDIR.TAG
       1 /home/lyl/.cache/fontconfig/477ff6b974c3c1b81af411ebecb34280-le64.cache-7
     928 /home/lyl/.cache/tracker/ontologies.gvdb
    5867 /home/lyl/.cache/tracker/meta.db-wal
       0 /home/lyl/.cache/tracker/first-index.txt
       0 /home/lyl/.cache/tracker/last-crawl.txt
       0 /home/lyl/.cache/tracker/parser-sha1.txt
       0 /home/lyl/.cache/tracker/locale-for-miner-user-guides.txt
       0 /home/lyl/.cache/tracker/db-version.txt
       6 /home/lyl/.cache/tracker/meta.db-shm
     729 /home/lyl/.cache/tracker/meta.db
       0 /home/lyl/.cache/tracker/locale-for-miner-apps.txt
       0 /home/lyl/.cache/tracker/db-locale.txt
     124 /home/lyl/.cache/thumbnails/large/af6acdd6d38b6b1b5741fef41a009a7f.png
       1 /home/lyl/.cache/event-sound-cache.tdb.0d4bcac3ad0e4afe96e50f962baa9f7d.x86_64-redhat-linux-gnu
wc: /home/lyl/.cache/gstreamer-1.0: 是一个目录
       0 /home/lyl/.cache/gstreamer-1.0
       5 /home/lyl/.cache/gstreamer-1.0/registry.x86_64.bin
      36 /home/lyl/.cache/imsettings/log.bak
       2 /home/lyl/.bash_logout
       0 /home/lyl/.ICEauthority
wc: /home/lyl/.config: 是一个目录
       0 /home/lyl/.config
      23 /home/lyl/.config/monitors.xml~
       2 /home/lyl/.config/yelp/yelp.cfg
wc: /home/lyl/.config/gtk-3.0: 是一个目录
       0 /home/lyl/.config/gtk-3.0
wc: /home/lyl/.config/goa-1.0: 是一个目录
       0 /home/lyl/.config/goa-1.0
      15 /home/lyl/.config/user-dirs.dirs
       1 /home/lyl/.config/pulse/0d4bcac3ad0e4afe96e50f962baa9f7d-card-database.tdb
       1 /home/lyl/.config/pulse/0d4bcac3ad0e4afe96e50f962baa9f7d-device-volumes.tdb
       1 /home/lyl/.config/pulse/0d4bcac3ad0e4afe96e50f962baa9f7d-stream-volumes.tdb
       0 /home/lyl/.config/user-dirs.locale
      23 /home/lyl/.config/monitors.xml
      35 /home/lyl/.config/evolution/sources/system-proxy.source
      12 /home/lyl/.bash_profile
       3 /home/lyl/.bash_history
wc: /home/lyl/.dbus: 是一个目录
       0 /home/lyl/.dbus
      11 /home/lyl/.bashrc
wc: /home/lyl/.mozilla: 是一个目录
       0 /home/lyl/.mozilla
wc: /home/lyl/.mozilla/firefox/m1ftx1zv.default: 是一个目录
       0 /home/lyl/.mozilla/firefox/m1ftx1zv.default
       4 /home/lyl/.mozilla/firefox/m1ftx1zv.default/times.json
      19 /home/lyl/.mozilla/firefox/profiles.ini
wc: /home/lyl/.mozilla/firefox/g2lzrpra.default-default: 是一个目录
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default
       6 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/cookies.sqlite
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/AlternateServices.txt
       5 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/pkcs11.txt
    2187 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ka@firefox.mozilla.org.xpi
    2243 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-hi-IN@firefox.mozilla.org.xpi
    2125 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-kn@firefox.mozilla.org.xpi
    2271 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-uk@firefox.mozilla.org.xpi
    2022 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-si@firefox.mozilla.org.xpi
    1860 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ach@firefox.mozilla.org.xpi
    2059 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-my@firefox.mozilla.org.xpi
    2073 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-oc@firefox.mozilla.org.xpi
    2076 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-hu@firefox.mozilla.org.xpi
    1957 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-kab@firefox.mozilla.org.xpi
    2020 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-es-MX@firefox.mozilla.org.xpi
    1931 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-br@firefox.mozilla.org.xpi
    1826 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-gl@firefox.mozilla.org.xpi
    1749 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-af@firefox.mozilla.org.xpi
    2035 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-tr@firefox.mozilla.org.xpi
    2044 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ta@firefox.mozilla.org.xpi
    1927 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-hr@firefox.mozilla.org.xpi
    2048 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-lt@firefox.mozilla.org.xpi
    2134 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ko@firefox.mozilla.org.xpi
    1904 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-en-GB@firefox.mozilla.org.xpi
    2053 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-nl@firefox.mozilla.org.xpi
    1991 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-nb-NO@firefox.mozilla.org.xpi
    1958 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-sv-SE@firefox.mozilla.org.xpi
    2083 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-eu@firefox.mozilla.org.xpi
    2138 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-km@firefox.mozilla.org.xpi
    2163 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ja@firefox.mozilla.org.xpi
    1954 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-gn@firefox.mozilla.org.xpi
    2020 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-fa@firefox.mozilla.org.xpi
    2054 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ro@firefox.mozilla.org.xpi
    2301 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-be@firefox.mozilla.org.xpi
    1991 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ne-NP@firefox.mozilla.org.xpi
    2032 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-cy@firefox.mozilla.org.xpi
    2291 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-kk@firefox.mozilla.org.xpi
    1886 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-lij@firefox.mozilla.org.xpi
    2103 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-th@firefox.mozilla.org.xpi
    2084 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-fr@firefox.mozilla.org.xpi
    2175 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-el@firefox.mozilla.org.xpi
    1971 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-pt-PT@firefox.mozilla.org.xpi
    2048 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ur@firefox.mozilla.org.xpi
    2156 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-hy-AM@firefox.mozilla.org.xpi
    1960 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-rm@firefox.mozilla.org.xpi
    1952 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-an@firefox.mozilla.org.xpi
    2229 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ru@firefox.mozilla.org.xpi
    1995 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-sl@firefox.mozilla.org.xpi
    2166 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-te@firefox.mozilla.org.xpi
    2182 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-bn@firefox.mozilla.org.xpi
    2032 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-cak@firefox.mozilla.org.xpi
    1945 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-et@firefox.mozilla.org.xpi
    2120 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-gu-IN@firefox.mozilla.org.xpi
    1983 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-eo@firefox.mozilla.org.xpi
    1970 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ast@firefox.mozilla.org.xpi
    1848 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-id@firefox.mozilla.org.xpi
    1954 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-az@firefox.mozilla.org.xpi
    1931 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ff@firefox.mozilla.org.xpi
    1987 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-es-ES@firefox.mozilla.org.xpi
    2033 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-pa-IN@firefox.mozilla.org.xpi
    1968 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ca@firefox.mozilla.org.xpi
    2032 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-lv@firefox.mozilla.org.xpi
    1999 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ia@firefox.mozilla.org.xpi
    1886 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-uz@firefox.mozilla.org.xpi
    2120 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-mr@firefox.mozilla.org.xpi
    1939 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-nn-NO@firefox.mozilla.org.xpi
    2100 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-dsb@firefox.mozilla.org.xpi
    1968 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-gd@firefox.mozilla.org.xpi
    2128 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-es-AR@firefox.mozilla.org.xpi
    2028 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ar@firefox.mozilla.org.xpi
    2111 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-bg@firefox.mozilla.org.xpi
    1955 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-es-CL@firefox.mozilla.org.xpi
    2034 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-is@firefox.mozilla.org.xpi
    2135 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-zh-TW@firefox.mozilla.org.xpi
    2157 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-vi@firefox.mozilla.org.xpi
    1958 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ms@firefox.mozilla.org.xpi
    1975 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-pl@firefox.mozilla.org.xpi
    2034 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-sq@firefox.mozilla.org.xpi
    2011 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-da@firefox.mozilla.org.xpi
    1567 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-it@firefox.mozilla.org.xpi
    1935 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-mk@firefox.mozilla.org.xpi
    1934 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-bs@firefox.mozilla.org.xpi
    1912 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-en-CA@firefox.mozilla.org.xpi
    1994 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-fy-NL@firefox.mozilla.org.xpi
    2048 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-de@firefox.mozilla.org.xpi
    2068 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-sr@firefox.mozilla.org.xpi
    2010 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-hsb@firefox.mozilla.org.xpi
    1951 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-fi@firefox.mozilla.org.xpi
    2063 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-zh-CN@firefox.mozilla.org.xpi
    1797 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-son@firefox.mozilla.org.xpi
    1877 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-xh@firefox.mozilla.org.xpi
    1977 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-pt-BR@firefox.mozilla.org.xpi
    2009 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-he@firefox.mozilla.org.xpi
    1933 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-ga-IE@firefox.mozilla.org.xpi
    2086 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-sk@firefox.mozilla.org.xpi
    2011 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions/langpack-cs@firefox.mozilla.org.xpi
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/sessionCheckpoints.json
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/TRRBlacklist.txt
      11 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/pluginreg.dat
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/xulstore.json
       9 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/SiteSecurityServiceState.txt
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/addons.json
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage.sqlite
      62 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/places.sqlite
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/SecurityPreloadState.txt
       3 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/content-prefs.sqlite
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extension-preferences.json
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/.parentlock
      40 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/sessionstore.jsonlz4
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/containers.json
     192 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/favicons.sqlite
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/handlers.json
       5 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/compatibility.ini
       6 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/key4.db
      65 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/cert9.db
     264 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/addonStartup.json.lz4
wc: /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/1657114595AmcateirvtiSty.files: 是一个目录
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/1657114595AmcateirvtiSty.files
wc: /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/3561288849sdhlie.files: 是一个目录
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/3561288849sdhlie.files
wc: /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/1451318868ntouromlalnodry--epcr.files: 是一个目录
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/1451318868ntouromlalnodry--epcr.files
wc: /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.files: 是一个目录
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.files
       9 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/3561288849sdhlie.sqlite
    1209 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.sqlite
       9 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/1657114595AmcateirvtiSty.sqlite
       9 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/idb/1451318868ntouromlalnodry--epcr.sqlite
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/storage/permanent/chrome/.metadata-v2
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/extensions.json
       1 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/permissions.sqlite
      24 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/datareporting/archived/2023-07/1689239690602.84f56c55-a8ed-402c-89c9-d7ec336a028d.event.jsonlz4
      86 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/datareporting/archived/2023-07/1689239690613.ffd9d828-5872-474a-9fba-a3bfe805c3b8.first-shutdown.jsonlz4
      86 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/datareporting/archived/2023-07/1689239690611.ac81ab6b-4f0a-4e7c-9356-b5211655c725.main.jsonlz4
      23 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/datareporting/archived/2023-07/1689239690579.24304509-d17b-43c3-9b03-5838feb77188.new-profile.jsonlz4
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/datareporting/session-state.json
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/datareporting/state.json
       0 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/times.json
      15 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/search.json.mozlz4
       3 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/webappsstore.sqlite
     171 /home/lyl/.mozilla/firefox/g2lzrpra.default-default/prefs.js
       4 /home/lyl/.mozilla/firefox/installs.ini
       0 /home/lyl/.esd_auth
wc: /home/lyl/.local: 是一个目录
       0 /home/lyl/.local
       1 /home/lyl/.local/share/keyrings/user.keystore
       2 /home/lyl/.local/share/keyrings/login.keyring
       0 /home/lyl/.local/share/gvfs-metadata/home-9f5d88a5.log
       0 /home/lyl/.local/share/gvfs-metadata/root-12c5d369.log
       1 /home/lyl/.local/share/telepathy/mission-control/accounts-goa.cfg
       1 /home/lyl/.local/share/telepathy/mission-control/accounts.cfg
       5 /home/lyl/.local/share/tracker/data/tracker-store.ontology.journal
       0 /home/lyl/.local/share/tracker/data/.meta.isrunning
    2340 /home/lyl/.local/share/tracker/data/tracker-store.journal
       0 /home/lyl/.local/share/flatpak/.changed
      17 /home/lyl/.local/share/evolution/addressbook/system/contacts.db
       6 /home/lyl/.local/share/evolution/calendar/system/calendar.ics
       5 /home/Hello.java
       2 /home/www/.bash_logout
      12 /home/www/.bash_profile
      11 /home/www/.bashrc
wc: /home/www/.mozilla: 是一个目录
       0 /home/www/.mozilla
       7 /home/Hello.class
  284503 总用量

17.列出你了解的web服务器负载架构(滴滴)

常识性问题,为了了解你在Linux下有没有做过真正的开发:

  • Nginx
  • Haproxy
  • Keepalived
  • LVS

18.每天晚上10点30分,打包站点目录/var/spool/mail备份到/home目录下(每次备份按时间生成不同的备份包)(滴滴)

假设时间格式为“年-月-日_时分秒”,于是思路为:先写一个脚本完成单次备份任务,然后将该脚本加入到crond任务队列。

################## 指令速览 #####################
vim /root/mail.sh
##################################
# 将下面的代码复制到文件中:
#!/bin/bash
cd /var/spool/ && /bin/tar zcf /home/mail-`date +%Y-%m-%d_%H%M%S`.tar.gz mail/
##################################
crontab -e
#############################
# 将下面的代码添加到最后一行:
30 22 * * * /bin/sh /root/mail.sh # 这样写可以不用增加执行权限x
#############################


################## 实际演示 #####################
# 1. 编写脚本mail.sh完成单次备份任务
[root@CentOS76 ~]# vim mail.sh
##################################
# 将下面的代码复制到文件中:
#!/bin/bash
cd /var/spool/ && /bin/tar zcf /home/mail-`date +%Y-%m-%d_%H%M%S`.tar.gz mail/
##################################
[root@CentOS76 ~]# date +%Y-%m-%d_%H%M%S
2023-08-28_103813

# 2. 为脚本添加所有者的执行权限
[root@CentOS76 ~]# ll
总用量 52
-rw-------. 1 root root 1883 713 17:12 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 728 16:41 IdeaProjects
-rw-r--r--. 1 root root 1931 713 17:13 initial-setup-ks.cfg
-rw-r--r--. 1 root root   91 828 10:37 mail.sh
drwxr-xr-x. 2 root root 4096 729 17:33 myshcode
drwxr-xr-x. 2 root root 4096 713 19:44 公共
drwxr-xr-x. 2 root root 4096 713 19:44 模板
drwxr-xr-x. 2 root root 4096 713 19:44 视频
drwxr-xr-x. 2 root root 4096 713 19:44 图片
drwxr-xr-x. 2 root root 4096 713 19:44 文档
drwxr-xr-x. 2 root root 4096 713 19:44 下载
drwxr-xr-x. 2 root root 4096 713 19:44 音乐
drwxr-xr-x. 2 root root 4096 713 19:44 桌面
[root@CentOS76 ~]# chmod u+x mail.sh 
[root@CentOS76 ~]# ll
总用量 52
-rw-------. 1 root root 1883 713 17:12 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 728 16:41 IdeaProjects
-rw-r--r--. 1 root root 1931 713 17:13 initial-setup-ks.cfg
-rwxr--r--. 1 root root   91 828 10:37 mail.sh
drwxr-xr-x. 2 root root 4096 729 17:33 myshcode
drwxr-xr-x. 2 root root 4096 713 19:44 公共
drwxr-xr-x. 2 root root 4096 713 19:44 模板
drwxr-xr-x. 2 root root 4096 713 19:44 视频
drwxr-xr-x. 2 root root 4096 713 19:44 图片
drwxr-xr-x. 2 root root 4096 713 19:44 文档
drwxr-xr-x. 2 root root 4096 713 19:44 下载
drwxr-xr-x. 2 root root 4096 713 19:44 音乐
drwxr-xr-x. 2 root root 4096 713 19:44 桌面

# 3. 验证脚本是否可以正常备份
[root@CentOS76 ~]# ls /home
Hello.class  Hello.java  lyl  www
[root@CentOS76 ~]# ./mail.sh 
[root@CentOS76 ~]# ls /home
Hello.class  Hello.java  lyl  mail-2023-08-28_103941.tar.gz  www

# 4. 将备份脚本添加到定时任务中
[root@CentOS76 ~]# crontab -e
crontab: installing new crontab
#############################
# 将下面的代码添加到最后一行:
30 22 * * * /root/mail.sh
#############################
[root@CentOS76 ~]# crontab -l
30 2 * * * /usr/sbin/mysql_db_backup.sh
30 22 * * * /root/mail.sh

*19.如何优化Linux系统,说出你的方法(瓜子)

  这是一个非常经典的简单题,没有标准答案,根据自己的认识和经验展开说就行,大部分是一些原则性的东西,也就是规则性的东西。但老韩的思路是首先应该搞明白的是,本质上想要优化linux系统,就应该站在整体的角度看待问题

Linux主要是做服务器的,比如考虑下面一个Linux作为Web服务器的具体场景:

图26-4 原始的应用场景

上面架构在少量用户进行访问时问题不大,但若有10w个用户访问时(并发变成了高并发),上述体系恐怕难以支撑,所以此时就需要进行优化。而此时对于Linux系统进行优化的目标就是,当有很多客户端/浏览器访问Linux服务器的某个服务时,要保证Linux服务正常运行、速度很快、链接安全。于是有两个层面的优化:

  1. 优化“架构”。
  2. 优化“系统”本身。

优化Linux系统的普遍要求:高性能,高可用,高并发。

1. 对于架构的优化

图26-5 优化架构后的场景

首先是架构上的改变:

  1. 作为一个站点,肯定会有一个文件系统,或者也叫文件服务器,所以单独抽取出来并组成集群。
  2. 原来Linux服务器上肯定也有相应的数据库,也抽取出来单独成为一个集群,并采用“读写分离”的架构。
  3. 负责Web站点服务的Linux服务器也组成一个集群,以满足海量用户连接。
  4. 用户不再直接连接到Linux服务器,而是首先连接到LVS负载均衡(硬件/软件)上,而后LVS会自动将请求合理的分配到不同的服务器上去。

然后是可以进一步优化的方面:

  1. 网络优化(上图标红):保证用户都可以稳定、快速的连接到服务器。
  2. 磁盘IO(上图标红):提升磁盘IO速率,保证对于文件系统的访问足够快。
  3. 文件连接数(上图标红):保证数据库支持足够大的文件连接数,以保证海量用户的访问。
  4. 安全性:防止别人攻击服务器。
  5. 防火墙:不要让Linux监听过多的端口,比如有些端口必须要监听,比如说是内部的端口3306,那就只让它内部访问,而不要到外网中去。
  6. 内存:关掉一些不必要的服务。

注:弹幕中有推荐《大型网站技术架构》。

2. 对于系统的优化

下面是对系统本身的优化(固定的规则):

  1. 不用root,使用sudo提升权限。
  2. 定时的自动更新服务时间,使用nptdate nptl.aliyun.com,让croud定时任务调度定时更新。
  3. 配置yum源,指向国内镜像(清华、163等)。
  4. 配置合理的防火墙策略,打开必要的端口,关闭不必要的端口。尽量打开最少的端口。
  5. 打开最大文件数(专业术语:调整文件的描述的数量),vim /etc/profile ulimit -SHn 65535意为将系统能打开的最大文件数设置为65535(默认1000多,不够)。
  6. 配置合理的监控策略,如对性能、内存、磁盘的监控策略。
  7. 配置合理的系统重要文件的备份策略。
  8. 对安装的软件进行优化,比如nginx、apache。
  9. 内核参数进行优化/etc/sysctl.conf
  10. chattr锁定一些重要的系统文件,如/etc/passwd/ect/shadow/etc/inittab
  11. 使用setupntsysv禁用不必要的服务,以优化内存。

最后给出chatgpt的回答:

问:请问如何优化Linux系统
答:优化 Linux 系统可以提升性能、资源利用率和用户体验。以下是一些常见的优化方法:

  1. 更新内核和软件包:保持系统内核和软件包更新,以获取性能改进、安全补丁和新功能。
  2. 优化硬件资源:根据系统配置,调整 CPU、内存和磁盘等硬件资源的设置,以充分利用硬件性能。
  3. 关闭不必要的服务:禁用不需要的系统服务,减少系统负担和安全风险。
  4. 使用合适的文件系统:选择适合您的用途的文件系统,如EXT4、XFS、Btrfs等,以获得最佳性能和可靠性。
  5. 优化磁盘 I/O:使用SSD代替HDD,使用TRIM来维护SSD性能,配置I/O调度程序和缓存策略来优化磁盘性能。
  6. 内存管理:合理配置虚拟内存、内存交换和调度策略,以确保内存利用率和性能。
  7. 优化网络设置:调整网络参数、使用高性能网络驱动程序,合理配置网络防火墙规则。
  8. 并发管理:使用并发管理工具如systemd,控制并发运行的进程数量,避免过度资源消耗。
  9. 使用缓存和加速器:使用缓存技术如memcached,使用GPU加速器进行计算密集型任务。
  10. 系统监控和优化:使用监控工具(如top、htop、iotop)来识别性能瓶颈,然后针对性地优化。
  11. 文件系统缩减和清理:定期清理不必要的文件、日志和临时文件,以释放磁盘空间。
  12. 使用高效的算法和数据结构:在编写程序时,选择高效的算法和数据结构,以提高应用性能。
  13. 调整内核参数:根据硬件和应用需求,调整内核参数,如文件句柄数、TCP参数等。
  14. 安全性能权衡:优化性能时要保持安全性。关闭不必要的服务和暴露的功能,但不要牺牲系统的安全性。
  15. 使用高效的编译器选项:在编译应用程序时,使用适当的编译器优化选项,以生成更快和更紧凑的代码。
  16. 负载均衡:对于分布式应用,使用负载均衡来平衡不同节点的工作负载。

这些优化方法依赖于您的使用情况、硬件配置和目标。在进行任何系统优化之前,最好先备份您的数据和设置,以防万一出现问题。另外,持续监控和测试是优化的关键,以确保您的更改确实带来了性能提升。

*20.Linux面试100道题

见我的百度网盘链接“llinux选择题100道题-带答案.docx”。

Linux面试基本100道题
1.cron 后台常驻程序 (daemon) 用于:
A. 负责文件在网络中的共享
B. 管理打印子系统
C. 跟踪管理系统信息和错误
D. 管理系统日常任务的调度
答案:D

2. 在大多数Linux发行版本中,以下哪个属于块设备 (block devices) ?
A. 串行口
B. 硬盘
C. 虚拟终端
D. 打印机
答案:B

3. 下面哪个Linux命令可以一次显示一页内容?
A. pause
B. cat
C. more
D. grep
答案:C

4. 怎样了解您在当前目录下还有多大空间?
A. Use df
B. Use du /
C. Use du .
D. Use df .
答案:C

5. 怎样更改一个文件的权限设置?
A. attrib
B. chmod
C. change
D. file
答案:B

6. 假如您需要找出 /etc/my.conf 文件属于哪个包 (package) ,您可以执行:
A. rpm -q /etc/my.conf
B. rpm -requires /etc/my.conf
C. rpm -qf /etc/my.conf
D. rpm -q | grep /etc/my.conf
答案:C

7. 假如当前系统是在 level 3 运行,怎样不重启系统就可转换到 level 5 运行?
A. Set level = 5
B. telinit 5
C. run 5
D. ALT-F7-5
答案:B

8. 那个命令用于改变 IDE 硬盘的设置?
A. hdparam
B. ideconfig
C. hdparm
D. hddparm
答案:C

9. 下面哪个命令可以列出定义在以后特定时间运行一次的所有任务?
A. atq
B. cron
C. batch
D. at
答案:A

10.下面命令的作用是:set PS1="[\u\w\t]\$" ; export PS1
A. 改变错误信息提示
B. 改变命令提示符
C. 改变一些终端参数
D. 改变辅助命令提示符
答案:B

11.作为一个管理员,你希望在每一个新用户的目录下放一个文件 .bashrc ,那么你应该在哪个目录下放这个文件,以便于新用户创建主目录时自动将这个文件复制到自己的目录下。
A. /etc/skel/
B. /etc/default/
C. /etc/defaults/
D. /etc/profile.d/
答案:A

12.在bash中,export命令的作用是:
A. 在子shell中运行命令
B. 使在子shell中可以使用命令历史记录
C. 为其它应用程序设置环境变量
D. 提供NFS分区给网络中的其它系统使用
答案:C

13.在使用了shadow口令的系统中,/etc/passwd和/etc/shadow两个文件的权限正确的是:
A. -rw-r----- , -r--------
B. -rw-r--r-- , -r--r--r--
C. -rw-r--r-- , -r--------
D. -rw-r--rw- , -r-----r--
答案:C

14.下面哪个参数可以删除一个用户并同时删除用户的主目录?
A. rmuser -r
B. deluser -r
C. userdel -r
D. usermgr -r
答案:C

15.有一个备份程序mybackup,需要在周一至周五下午1点和晚上8点各运行一次,下面哪条crontab的项可以完成这项工作?
A. 0 13,20 * * 1,5 mybackup
B. 0 13,20 * * 1,2,3,4,5 mybackup
C. * 13,20 * * 1,2,3,4,5 mybackup
D. 0 13,20 1,5 * * mybackup
答案:B

16.如何从当前系统中卸载一个已装载的文件系统
A. umount
B. dismount
C. mount -u
D. 从 /etc/fstab 中删除这个文件系统项
答案:A

17.如果你的umask设置为022,缺省的你创建的文件的权限为:
A. ----w--w-
B. -w--w----
C. r-xr-x---
D. rw-r--r--
答案:D

18.在一条命令中如何查找一个二进制命令 Xconfigurator 的路径?
A. apropos Xconfigurator
B. find Xconfigurator
C. where Xconfigurator
D. which Xconfigurator
答案:D

19.哪一条命令用来装载所有在 /etc/fstab 中定义的文件系统?
A. amount
B. mount -a
C. fmount
D. mount -f
答案:B

20.运行一个脚本,用户不需要什么样的权限?
A. read
B. write
C. execute
D. browse on the directory
答案:B

21.在Linux中,如何标识接在IDE0上的slave硬盘的第2个扩展分区?
A. /dev/hdb2
B. /dev/hd1b2
C. /dev/hdb6
D. /dev/hd1b6
答案:C

22.在应用程序起动时,如何设置进程的优先级?
A. priority
B. nice
C. renice
D. setpri
答案:B

23.在 bash 中, 在一条命令后加入"1>&2" 意味着:
A. 标准错误输出重定向到标准输入
B. 标准输入重定向到标准错误输出
C. 标准输出重定向到标准错误输出
D. 标准输出重定向到标准输入
答案:C

24.下面哪条命令可以把f1.txt复制为f2.txt?
A. cp f1.txt | f2.txt
B. cat f1.txt | f2.txt
C. cat f1.txt > f2.txt
D. copy f1.txt | f2.txt
答案:C

25.显示一个文件最后几行的命令是:
A. tac
B. tail
C. rear
D. last
答案:B

26.如何快速切换到用户John的主目录下?
A. cd @John
B. cd #John
C. cd &John
D. cd ~John
答案:D

27.把一个流中所有字符转换成大写字符,可以使用下面哪个命令?
A. tr a-z A-Z
B. tac a-z A-Z
C.sed /a-z/A-Z
D. sed --toupper
答案:A

28.使用什么命令可以查看Linux的启动信息?
A. mesg -d
B. dmesg
C. cat /etc/mesg
D. cat /var/mesg
答案:B

29.运行级定义在:
A. in the kernel
B. in /etc/inittab
C. in /etc/runlevels
D. using the rl command
答案:B

30.如何装载(mount)上在 /etc/fstab 文件中定义的所有文件系统?
A. mount -a
B. mount /mnt/*
C. mount
D. mount /etc/fstab
答案:A

31.使用ln命令将生成了一个指向文件old的符号链接new,如果你将文件old删除,是否还能够访问文件中的数据?
A. 不可能再访问
B. 仍然可以访问
C. 能否访问取决于文件的所有者
D. 能否访问取决于文件的权限
答案:A

32.xt2fs文件系统中,缺省的为root用户保留多大的空间?
A. 3%
B. 5%
C. 10%
D. 15%
答案:C

33.哪个命令用来显示系统中各个分区中inode的使用情况?
A. df -i
B. df -H
C. free -b
D. du -a -c /
答案:A

34.多数Linux发行版本中,图形方式的运行级定义为?
A. 1
B. 2
C. 3
D. 5
答案:D

35.在系统文档中找到关于print这个单词的所有说明?
A. man print
B. which print
C. locate print
D. apropos print
答案:D

36.man 5 passwd 含义是?
A. 显示 passwd 命令的使用方法
B. 显示 passwd 文件的结构
C. 显示 passwd 命令的说明的前五行
D. 显示关于passwd的前五处说明文档。
答案:A

37.如何在文件中查找显示所有以" * "打头的行?
A. find \* file
B. wc -l * < file
C. grep -n * file
D. grep ‘^\*’ file
答案:D

38.在ps命令中什么参数是用来显示所有用户的进程的?
A. a
B. b
C. u
D. x
答案:A

39.显示二进制文件的命令是?
A. od
B. vil
C. view
D. binview
答案:A

40.如何显示Linux系统中注册的用户数(包含系统用户)?
A. account -l
B. nl /etc/passwd |head
C. wc --users /etc/passwd
D. wc --lines /etc/passwd
答案:D

41.在一行结束位置加上什么符号,表示未结束,下一行继续?
A. /
B. \
C. ;
D. |
答案:B

42.命令 kill 9 的含义是:
A. kills the process whose PID is 9.
B. kills all processes belonging to UID 9.
C. sends SIGKILL to the process whose PID is 9.
D. sends SIGTERM to the process whose PID IS 9.
答案:D

43.如何删除一个非空子目录/tmp?
A. del /tmp/*
B. rm -rf /tmp
C. rm -Ra /tmp/*
D. rm -rf /tmp/*
答案:B

44.使用什么命令可以在今天午夜运行命令 cmd1 ?
A. at midnight cmd1
B. cron -at "00:00" cmd1
C. batch -t "00:00" < cmd1
D. echo "cmd1" | at midnight
答案:D

45.你的系统使用增量备份策略,当需要恢复系统时,你需要按什么顺序恢复备份数据?
A. 最后一次全备份,然后从最早到最近的增量备份
B. 最后一次全备份,然后从最近到最早的增量备份
C. 最早到最近的增量备份,然后最后一次全备份
D. 最近到最早的增量备份,然后最后一次全备份
答案:B

46.对所有用户的变量设置,应当放在哪个文件下?
A. /etc/bashrc
B. /etc/profile
C. ~/.bash_profile
D. /etc/skel/.bashrc
答案:B
47.Linux系统中,一般把命令 ls 定义为 ls --color 的别名,以便以不同颜色来标识不同类型的文件。但是,如何能够使用原先的ls命令?
A. \ls
B. ;ls
C. ls $$
D. ls --noalias
答案:A

48.在Linux系统中的脚本文件一般以什么开头?
A. $/bin/sh
B. #!/bin/sh
C. use /bin/sh
D. set shell=/bin/sh
答案:B

49.下面哪种写法表示如果cmd1成功执行,则执行cmd2命令?
A. cmd1&&cmd2
B. cmd1|cmd2
C. cmd1;cmd2
D. cmd1||cmd2
答案:A

50.在哪个文件中定义网卡的I/O地址?
A. cat /proc/modules
B. cat /proc/devices
C. cat /proc/ioports
D. cat /io/dma
答案:C

51.Linux中,提供TCP/IP包过滤功能的软件叫什么?
A. rarp
B. route
C. iptables
D. filter
答案:C

52.如何暂停一个打印队列?
A. lpr
B. lpq
C. lpc
D. lpd
答案:C

53.在vi中退出不保存的命令是?
A. :q
B. :w
C. :wq
D. :q!
答案:D

54.在 XFree86 3.x 中, 缺省的字体服务器为:
A. xfs
B. xfserv
C. fonts
D. xfstt
答案:A

55.使用什么命令检测基本网络连接?
A. ping
B. route
C. netstat
D. ifconfig
答案:A

56.下面哪个协议使用了二个以上的端口?
A. telnet
B. FTP
C. rsh
D. HTTP
答案:B

57.在PPP协议中,哪个认证协议不以明文传递密码?
A. PAM
B. PAP
C. PGP
D. CHAP
答案:D

58.下面哪个文件系统应该分配最大的空间?
A. /usr
B. /lib
C. /root
D. /bin
答案:A

59.如何在Debian系统中安装rpm包?
A. alien pkgname.rpm
B. dpkg --rpm pkgname.rpm
C. dpkg --alien pkgname.rpm
D. alien pkganme.rpm ; dpkg -i pkganme.deb
答案:D

60.在安装软件时下面哪一步需要root权限?
A. make
B. make deps
C. make config
D. make install
答案:D

61.什么命令用来只更新已经安装过的rpm软件包?
A. rpm -U * .rpm
B. rpm -F * .rpm
C. rpm -e * .rpm
D. rpm -q * .rpm
答案:B

62.在 windows 与 Linux 双起动的系统中,如果要让LILO 管理引导,则 LILO 应该放在:
A. MBR
B. /
C. root分区的首扇区
D. /LILO
答案:D

63.ldconfig的配置文件是
A. /lib/ld.so
B. /etc/ld.so.conf
C. /etc/ld.so.cache
D. /etc/modules.conf
答案:B
64.下面哪个命令可以压缩部分文件:
A. tar -dzvf filename.tgz *
B. tar -tzvf filename.tgz *
C. tar -czvf filename.tgz *
D. tar -xzvf filename.tgz *
答案:C

65.网络服务的daemon是:
A. lpd
B. netd
C. httpd
D. inetd
答案:D

66.Linux与windows 的网上领居互联,需要提供什么daemon?
A. bind
B. smbd
C. nmbd
D. shard
答案:B

67.对于Apache服务器,提供的子进程的缺省的用户是:
A. root
B. apached
C. httpd
D. nobody
答案:D

68.sendmail中缺省的未发出信件的存放位置是:
A. /var/mail/
B. /var/spool/mail/
C. /var/spool/mqueue/
D. /var/mail/deliver/
答案:C

69.apache的主配置文件是:
A. httpd.conf
B. httpd.cfg
C. access.cfg
D. apache.conf
答案:A

70.关于可装载的模块,装载时的参数,如I/O地址等的存放位置是:
A. /etc/conf.modules
B. /etc/lilo.conf
C. /boot/System.map
D. /etc/sysconfig
答案:A

71.在 Linux 中,如何关闭邮件提示?
A. biff n
B. mesg n
C. notify off
D. set notify=off
答案:A

72.在 bash shell 环境下,当一命令正在执行时,按下 control-Z 会:
A. 中止前台任务
B. 给当前文件加上 EOF.
C. 将前台任务转入后台
D. 注销当前用户
答案:C

73.定义bash环境的用户文件是:
A. bash & .bashrc
B. bashrc & .bash_conf
C. bashrc & bash_profile
D. .bashrc & .bash_profile
答案:D

74.下面哪条命令用来显示一个程序所使用的库文件?
A. ldd
B. ld so
C. modprobe
D. ldconfig
答案:B

75.如何查看一个RPM软件的配置文件的存放位置?
A. rpm -qc rpm1
B. rpm -Vc rpm1
C. rpm --config rpm1
D. rpm -qa --config rpm1
答案:A

76.如何查看一个RPM软件的修改记录?
A. rpm -Vc postfix
B. rpm -qpil postfix
C. rpm --changelog postfix
D. rpm -q --changelog postfix
答案:D

77.通过Makefile来安装已编译过的代码的命令是:
A. make
B. install
C. make depend
D. make install
答案:D

78.什么命令解压缩tar文件?
A. tar -czvf filename.tgz
B. tar -xzvf filename.tgz
C. tar -tzvf filename.tgz
D. tar -dzvf filename.tgz
答案:B

79.在 XF86Config 配置文件中,哪个段用来设置字体文件?
A. The Fonts section.
B. The Files section.
C. The xfsCodes section.
D. The Graphics section.
答案:B

80.8 bit color 指的是:
A. 64K colors
B. 16K colors
C. 256 colors
D. 16M colors
答案:C

81.下面哪个文件用来设置 X window 的显示分辨率?
A. xinit
B. xinitrc
C. XF86Setup
D. XF86Config
答案:D

82.哪个变量用来指定一个远程X应用程序将输出放到哪个X server上?
A. DISPLAY
B. TERM
C. ECHO
D. OUTPUT
答案:A

83.在xdm的配置目录中,哪个文件用来设置在用户通过xdm登录后自动起动的应用程序?
A. The Xsession file
B. The Xsetup_0 file
C. The Xstart_up file
D. The GiveConsole file
答案:B

84.命令 netstat -a 停了很长时间没有响应,这可能是哪里的问题?
A. NFS.
B. DNS.
C. NIS.
D. routing.
答案:B

85.ping使用的协议是:
A. TCP
B. UDP
C. SMB
D. ICMP
答案:D

86.下面哪个命令不是用来查看网络故障的?
A. ping
B. init
C. telnet
D. netstat
答案:B

87.拨号上网使用的协议通常是:
A. PPP
B. UUCP
C. SLIP
D. Ethernet
答案:A
1.TCP/IP中,哪个协议是用来进行IP自动分配的?
A. ARP
B. NFS
C. DHCP
D. DNS
答案:C

89.下面哪个文件定义了网络服务的端口?
A. /etc/netport
B. /etc/services
C. /etc/server
D. /etc/netconf
答案:B

90.下面哪个功能用来生成一个文件的校验码?
A. md5
B. tar
C. crypt
D. md5sum
答案:A

91.缺省的,用户邮件放在:
A. ~/mail/
B. /var/mail/
C. /var/mail/spool/
D. /var/spool/mail/
答案:D

92.下面哪个文件包含了供 NFS daemon 使用的目录列表?
A. /etc/nfs
B. /etc/nfs.conf
C. /etc/exports
D. /etc/netdir
答案:C

93.如何停止一台机器的telnet服务?
A. Put NONE in /etc/telnet.allow
B. Put a line 'ALL:ALL' in /etc/hosts.deny
C. Comment the telnet entry in /etc/inittab
D. Comment the telnet entry in /etc/xinetd.conf
答案:D

94.在哪个文件中保存了sendmail的别名?
A. /etc/aliases
B. /etc/mailaliases
C. /etc/sendmail.aliases
D. /etc/sendmail/aliases
答案:A

95.smbd and nmbddaemons 的配置文件是:
A. /etc/exports
B. /etc/smb.conf
C. /etc/samba/config
D. /usr/local/samba.cfg
答案:B

96.下面哪个命令用来卸载一个内核模块?
A. rmmod
B. unmod
C. delmod
D. modprobe
答案:A

97.什么情况下必须运行lilo
A. once a day from cron
B. once a week from cron
C. after installing a new kernel
D. after installing a new module
答案:C

98.什么命令显示所有装载的模块?
A. lsmod
B. dirmod
C. modules
D. modlist
答案:A

99.下面哪个命令刷新打印机队列?
A. lpflush
B. lprm -
C. lpclear
D. lprm all
答案:B

100.下面哪个命令可以查看网卡的中断?
A. cat /proc/ioports
B. cat /proc/interrupts
C. cat /proc/memoryinfo
D. which interrupts
答案:B

  1. 《鸟哥的Linux私房菜 基础学习篇 第四版》 ↩︎

  2. 《鸟哥的Linux私房菜 服务器架设篇 第三版》 ↩︎

  3. 《韩顺平_2021图解Linux全面升级》 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/956594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

历时3天的springboot+vue打包成jar包

有人说问什么打包花了三天&#xff0c;里面的坑很多&#xff0c;我就先不叙述太多&#xff0c;直接说我搞了三天得出来的最后解决方案&#xff0c;不一定适合每一个人&#xff01;! # 前端 # 修改prod.env.js文件下的内容&#xff0c;把里面的 BASE_API 修改为和dev.env.js文件…

[管理与领导-63]:IT基层管理者 - 潜技能 - 1 - 职场中的陷阱 - 看清楚职场中的霸凌现象

目录 前言&#xff1a; 1&#xff1a;打击自尊心 2&#xff1a;孤立他人 3&#xff1a;恶意针对 4&#xff1a;当众羞辱 5&#xff1a;持续性否定 前言&#xff1a; 职场中&#xff0c;什么样的人都有。 害人之心不可有&#xff0c;防人之心不可无。 前者教人从善&…

顺序栈(数组形式)的实现

&#x1f308;什么是栈&#xff1f; 1.抽象化具象&#xff1a;可以理解为一个细长的乒乓球筒&#xff0c;一端封闭&#xff0c;放球只能从另一端放入球&#xff0c;取出球时也只能从该端取出。先进的球最后出&#xff0c;后进的球最先出。 2.定义&#xff1a;栈是一种线性数据…

【C++】map/multimap容器

1.map基本概念 2.map构造和赋值 #include <iostream> using namespace std;//map容器 构造和赋值 #include<map>//遍历输出map容器 void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it m.begin(); it ! m.end(); it)…

Ubuntu学习---跟着绍发学linux课程记录(第一部分)

文章目录 1、启动、关闭、挂起、恢复&#xff08;电源&#xff09;2、更多虚拟机操作2.1 电源设置2.2 硬件参数设置2.3 状态栏2.4 全屏显示 3、快照与系统恢复4、桌面环境5、文件系统6、用户目录7、创建目录和文件8、命令行&#xff1a;文件列表ls 9、命令行&#xff1a;切换目…

分布式任务调度框架

分布式任务调度框架 学习为主 文章目录 分布式任务调度框架一、概念二、架构图三、任务调度的流程定时触发任务是如何实现的&#xff1f;&#xff1a;使用时间轮实现定时执行任务逻辑:3.1 对到达now时间后的任务&#xff08;超出now 5秒外)3.2 对到达now时间后的任务&#xff0…

从代码设计看 Glide 之生命周期(上)

欢迎关注我的其他平台账号&#xff1a; 掘金&#xff1a;0xforee 个人博客&#xff1a;0xforee’s blog 微信公众号&#xff1a; 上期我们探索了一个具备核心功能的图片加载库该怎么设计。这一期我们来看看如何给这个图片加载库关联生命周期管理。 欢迎关注本系列其他文章&…

PPPoE连接无法建立的排查和修复

嗨&#xff0c;亲爱的读者朋友们&#xff01;你是否曾经遇到过PPPoE连接无法建立的问题&#xff1f;今天我将为你详细解析排查和修复这个问题的步骤。 检查物理连接 首先&#xff0c;我们需要确保物理连接没有问题。请按照以下步骤进行检查&#xff1a; - 检查网线是否插好&…

vue训练场练习props和$emit,实现大写输入,小写输出。

场景&#xff1a; 在vue官网训练场&#xff0c;使用训练场中的组件。 仅作为练习笔记&#xff0c;仅供产考。 App.vue 组件代码 方式一&#xff1a;Watch监听 方式二&#xff1a;input绑定

安卓系列机型--软扩容“system分区扩容”操作步骤解析 增加系统分区大小

感兴趣的友友要区别扩容的概念。软扩容与硬扩容。硬扩容指拆解手机字库。更换大容量的字库来达到硬扩容。例如864硬扩容为8256等等。所谓的软扩容指的是将系统默认的系统分区大小修改分区表增大分区。例如原来系统分区默认2G。修改分区表为3G大小。意义在于可以刷写有些需要扩容…

ssm+vue“魅力”繁峙宣传网站源码和论文

ssmvue“魅力”繁峙宣传网站源码和论文102 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身…

CH341 USB总线转接芯片

产品概述&#xff1a; CH341是一个USB总线的转接芯片&#xff0c;通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 在异步串口方式下&#xff0c;CH341提供串口发送使能、串口接收就绪等交互式的速率控制信号以及常用的MODEM联络信号&#xff0c;用于…

css transition属性

如果想实现一些效果&#xff1a;比如一个div容器宽高拉伸效果&#xff0c;或者一些好看的有过渡的效果可以使用 定义和用法 transition 属性是一个简写属性&#xff0c;用于设置四个过渡属性&#xff1a; transition-property transition-duration transition-timing-func…

视频动态壁纸 Dynamic Wallpaper for Mac中文

Dynamic Wallpaper是一款Mac平台上的动态壁纸应用程序&#xff0c;它可以根据时间等因素动态切换壁纸&#xff0c;提供更加生动和多样化的桌面体验。 Dynamic Wallpaper包含了多个动态壁纸&#xff0c;用户可以根据自己的喜好选择和切换。这些动态壁纸可以根据时间等因素进行自…

目标检测后的图像上绘制边界框和标签

效果如图所示&#xff0c;有个遗憾就是CV2在图像上显示中文有点难&#xff0c;也不想用别的了&#xff0c;所以改成了英文&#xff0c;代码在下面了&#xff0c;一定要注意一点&#xff0c;就是标注文件的读取一定要根据自己的实际情况改一下&#xff0c;我的所有图像的标注文件…

大数据Flink(七十):SQL 动态表 连续查询

文章目录 SQL 动态表 & 连续查询 一、​​​​​​​SQL 应用于流处理的思路

【牛客网题目】反转链表

目录 描述 解题分析 描述 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0≤n≤1000 要求&#xff1a;空间复杂度O(1) &a…

UDP 广播

一、UDP 通信图解 UDP通信、本地套接字_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/132523536?spm1001.2014.3001.5501 #include <sys/types.h> #include <sys/socket > ssize_t sendto(in…

macOS Sonoma 14beta 7(23A5337a)更新发布,附黑/白苹果系统镜像

系统介绍&#xff08;镜像请前往黑果魏叔官网下载&#xff09; 黑果魏叔8 月 31 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 7 更新&#xff08;内部版本号&#xff1a;23A5337a&#xff09;&#xff0c;本次更新距离上次发布隔了 8 天。 …

Windows安装FFmpeg说明

下载地址 官网 Download FFmpeg Csdn ffmpeg安装包&#xff0c;ffmpeg-2023-08-28-git-b5273c619d-full-build.7z资源-CSDN文库 解压安装&#xff0c;添加环境变量 命令行输入ffmpeg 安装成功