优雅结束进程
start.sh
app="/home/xunlei/ruoyi-admin.jar"
pid=$(pgrep -f "$app")
if [ -n "$pid" ]; then
kill -15 "$pid"
fi
nohup java -jar $app --spring.profiles.active=prod &
wait $!
exit $?
stop.sh
app="/home/xunlei/ruoyi-admin.jar"
pid=$(ps -ef | grep "$app" | grep -v grep | awk '{print $2}')
if [ "$pid" ]; then
echo "$pid"
kill -15 "$pid"
else
echo 0
fi
kill -15 PID
安装zip工具
Linux 安装 zip unzip
apt-get 安装
apt-get install zip
yum 安装
yum install -y unzip zip
安装系统
Debian12安装保姆级教程
内核
在 Linux 系统中,可以使用以下命令来查看当前系统内核的版本:
uname -r
该命令会输出当前系统内核的版本号。如果需要查看更详细的内核信息,可以使用以下命令:
uname -a
//TODO用户内核切换性能优化
Linux 一键测试脚本,支持speedtest测速、延迟、丢包率、性能、流媒体解锁等测试
bash <(wget -qO- https://down.vpsaff.net/linux/speedtest/superbench.sh)
或
wget -qO- https://down.vpsaff.net/linux/speedtest/superbench.sh | sudo bash
Linux怎么看自己的系统架构是x86还是arm?
注:x86_64、x64、AMD64基本上是同一个东西
x86_64、x64和AMD64实际上在计算领域中指的是相同的架构,也就是64位的x86架构。
它们之间没有本质的区别,只是在命名上稍有差异。
x86_64是Intel与AMD联合推出的64位x86架构的代号。
x64是简写,经常用来指代64位的x86架构。
AMD64是指AMD公司首先推出的64位x86架构,因此也被称为"AMD64"。
在实际使用中,x86_64、x64和AMD64可以互换使用,都代表了现代计算机领域中常见的64位处理器架构,
它们能够提供更大的寻址空间和更高的性能,相较于32位x86架构在处理大内存和高性能计算方面具有明显优势。
查看命令:uname -m
发行版本
在 Linux 系统中,可以使用以下命令来查看当前系统所属的发行版本:
- Debian/Ubuntu 系统:
cat /etc/issue
或者
lsb_release -a
- 如果你在运行该命令时遇到了 "command not found" 的错误提示,可能是因为该命令所在的软件包并没有安装在你的系统中。
- Debian/Ubuntu 系统:`sudo apt-get install lsb-release`
- CentOS/RHEL 系统:`sudo yum install redhat-lsb-core`
- CentOS/Fedora 系统:
cat /etc/redhat-release
或者
cat /etc/centos-release
为Linux系统设置代理
一、为系统设置代理
编辑文件/etc/profile,增加如下两行
export http_proxy=http://proxy.com:8080/
export https_proxy=http://proxy.com:8080/
然后更新一下环境文件:
source /etc/profile
二、为yum配置代理
在/etc/yum.conf后面添加以下内容:
如果代理不需要用户名密码认证:
proxy=http://proxy.com:8080/
如果需要认证
proxy=http://proxy.com:8080/
proxy_username=代理服务器用户名
proxy_password=代理服务器密码
然后更新一下环境文件:
#使用source后者source yum.conf
source
source /etc/yum.conf
三、为wget代理设置:
编辑文件为:/etc/wgetrc
添加下面两行:
http_proxy=http://proxy.com:8080/
https_proxy=http://proxy.com:8080/
然后更新一下环境文件:
#使用source后者source /etc/wgetrc
source
source /etc/wgetrc
dig使用
查看网络流量负载情况
安装工具
Centos7yum install iftop -y
Ubuntu22.04apt install iftop
使用
iftop -i eth0 -P
eth0为网卡名称,使用ip a命令查看即可
tcpdump抓包
Linux抓包工具:tcpdump
tcpdump -i ens33 port 80
port 80可以省略,ens33对应自己的网卡,通过(ifconfig 或者 ip a获取网卡名称)
实时查看日志
tail -f nohup.out
配置JDK环境
#这里以openjdk8为例
yum install java-1.8.0-openjdk
包管理(下载器)
参考文章
CentOS7配置阿里云镜像源
- 备份官方的原yum源的配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup - 下载Centos-7.repo文件
最小化安装,如果没有wget的命令,可使用curl代替wget,执行如下语句代替:
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- 清除及生成缓存
# 清除yum缓存
yum clean all
# 缓存阿里云源
yum makecache
# 测试阿里云源
yum list
- 脚本配置本地源
vi /root/auto_aliyun.sh
路径可以自定义, 编写如下内容,输入完成后按ESC。输入:wq保存
#!/bin/bash
# 备份官方的原yum源的配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载Centos-7.repo文件,或者curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo,取决于你是否有wget的命令
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除yum缓存
yum clean all
# 缓存本地yum源
yum makecache
- 赋予脚本可执行的权限
chmod +x /root/auto_aliyun.sh - 执行脚本文件,即可
/root/auto_aliyun.sh
非centos系统下载vim
apt-get update
apt-get install vim
ps -aux命令详解
查看内存占用
扩展: htop比top更详细,更易用,还支持鼠标操作
ps aux --sort -rss | head
- USER:表示该进程的所有者。
- PID:表示进程ID(Process ID),是操作系统为每个运行的进程分配的唯一标识符。
- %CPU:表示该进程的CPU使用率。
- %MEM:表示该进程使用的物理内存百分比。
- VSZ:表示该进程的虚拟内存大小(Virtual Memory Size),以KB为单位。
- RSS:表示该进程占用的物理内存大小(Resident Set Size),以KB为单位。
- TTY:表示该进程所关联的终端(TTY)。
- STAT:表示该进程的状态(如运行、停止、睡眠等)。
- START:表示该进程的启动时间。
- TIME:表示该进程已经占用的CPU时间。
- COMMAND:表示该进程的命令/可执行文件名称。
查看最占用CPU的进程
top -H
参考Linux下某个进程CPU占用率高分析方法
查看端口占用情况
lsof -i:端口号
netstat -tlnp
lsof -i -P -n
ss -tulnp|grep headscale
lsof全面而netstat简单,lsof可能需要自己下载
lsof命令输出中包含的字段:
COMMAND,代表该连接的进程名字。PID,代表该进程的ID号。USER,代表该进程的运行用户。FD,代表该连接使用的文件描述符。TYPE,代表该连接的类型,如TCP。DEVICE,代表该连接使用的设备(如磁盘设备)的ID号。SIZE/OFF,代表该连接使用的文件大小或偏移量(如果是文件类型的连接)。NODE,代表该连接节点信息(如Linux下的inode号)。NAME,代表该连接的进程打开的文件名。
systemd
journalctl -u headscale.service 查看服务日志
journalctl -u headscale.service -f从后面开始查看,并持续打印日志
网络
默认可以使用ip a查看IP地址
使用ifconfig需要下载
ubuntu
apt install net-tools
centos yum install -y net-tools
centos最小化安装默认没有开启网卡
使用cd /etc/sysconfig/network-scripts进到相关目录
使用ip a查看网卡名称
随后编辑网卡配置
vi ifcfg-ens33
将最下面ONBOOT=yes(是否在开机的的时候启动网卡)原本为no改为yes重启(reboot)即可联网
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens160
UUID=9b714fb4-a60d-4b83-8e3c-752c326d1613
DEVICE=ens160
ONBOOT=yes
定时器cron
1. Cron
在 Debian/Ubuntu 和 CentOS/Fedora 等基于 Linux 系统中,都可以使用 Cron 服务来设置和管理定时任务。
Cron 是 Linux 系统下的一个非常重要的任务调度器,它可以帮助我们在指定的时间点或时间间隔内,自动执行一些指定的命令或任务。通过 Cron,我们可以定期备份数据、更新系统、运行自动化脚本等,非常方便实用。
在 Debian/Ubuntu 系统中,Cron 服务的配置文件位于 /etc/crontab 文件中,用户的 Cron 配置文件位于 /var/spool/cron/crontabs/ 目录下。
在 CentOS/Fedora 系统中,Cron 服务的配置文件位于 /etc/crontab 文件中,用户的 Cron 配置文件位于 /var/spool/cron/ 目录下。
除了 Cron 服务外,还有一些其他的 Linux 定时器工具,比如 systemd-timer 和 atd 等,它们也可以用来设置和管理定时任务。但是 Cron 服务是最常用的定时器工具之一,且具有广泛的兼容性和支持。
2.cron和crond
cron 和 crond 是定时任务管理器在 Linux 系统中的组成部分,两者的关系如下:
cron是定时任务的管理器,它会根据/etc/crontab和/etc/cron.d目录下的配置文件,以及每个用户的个人配置文件/var/spool/cron/中的内容来执行定时任务。crond是cron服务的守护进程,它会在系统启动时自动启动,并负责监控和执行定时任务。当crond发现一个定时任务需要执行时,它会启动一个新的进程来执行该任务。
简而言之,cron 是定时任务的配置管理器,而 crond 则是该服务的实际执行者。
3.Crontab
Cron 是 Linux 系统下的一个任务调度器,可以帮助我们在指定的时间点或时间间隔内,自动执行一些指定的命令或任务。Cron 可以执行系统命令、运行脚本、发送邮件等等操作。在大多数 Linux 系统中,Cron 服务是默认安装的,并且可以在后台一直运行。
而 crontab 则是用于编辑和管理 Cron 服务定时任务的命令。它是 "Cron Table" 的缩写,表示 Cron 的任务表。通过 crontab 命令,我们可以创建、编辑、删除定时任务,也可以查看当前用户的定时任务列表。
Crontab 命令支持多种选项和参数,可以用来管理系统级别的定时任务和用户级别的定时任务。当我们执行 crontab -e 命令时,会打开一个文本编辑器,允许我们编辑当前用户的 Cron 任务表。任务表的每一行都包含了一个定时任务的详细信息,包括执行时间、执行的命令等等。
因此,可以说,Cron 是 Linux 系统下的一个任务调度器,而 crontab 则是用于编辑和管理 Cron 任务的命令。
遇到的问题:
- Ubuntu系统 Cron设置了开机自启,但是重启后依然没有自启
- Linux (CentOS、Ubuntu等)无法输入反斜杠(\)和管道符(|)、@符号的解决方案
输入MySQL密码带@符号时无法识别,@替换为'@',用单引号包裹
root 账户、权限
ubuntu桌面版系统安装后切换到root用户并且设置root密码
ubuntu\
sudo passwd root然后输入root密码
sudo -s -H切换为root账户
防火墙
Ubuntu
Ubuntu 平台的防火墙关闭命令
1、关闭防火墙:
sudo ufw disable
2、查看防火墙状态:
sudo ufw status
3、开启防火墙:
sudo ufw enable
时钟对齐
下载ntpdate
在Ubuntu/Debian系统上,可以使用以下命令安装ntpdate软件包:
apt-get update
apt-get install ntpdate
在CentOS/RHEL系统上,可以使用以下命令安装ntpdate软件包:
yum install ntpdate
安装完成后,就可以使用ntpdate命令手动更新系统时间了。例如,可以使用以下命令从指定的NTP服务器更新系统时间:对齐阿里中国时间 ntpdate ntp1.aliyun.com
方法二([原文](149条消息) centos 7 同步系统时间为网络时间_centos7 同步阿里云时间_cuckoo_yang的博客-CSDN博客)
需要更新两处配置:
设置时区:Asia/Shanghai
设置时间:ntp.aliyun.com
1、更改系统本地时区如上海时区
[root@localhost ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2、使用ntpdate工具更新系统时钟与ntp源同步(这里使用阿里的ntp源)
[root@localhost ~]# yum install -y ntpdate #下载ntpdate工具
[root@localhost ~]# ntpdate ntp.aliyun.com #同步系统时间为阿里云时间
3、查看系统时间,已经与网络时间一致
#查看系统时间
[root@localhost ~]# date
Tue Mar 1 10:14:53 CST 2022
4、将时间同步写入计划任务
[root@localhost ~]# crontab -e
59 23 * * * ntpdate ntp.aliyun.com
[root@localhost ~]# crontab -l #查看计划任务
用户管理
权限控制(文档、文件等)
touch和mkdir都是用于创建文件或目录的命令,它们的区别如下:
- touch:touch命令用于修改文件或目录的时间戳,如果所指定的文件不存在,则会创建一个空的文件。例如,可以使用touch命令创建一个名为file.txt的文件:touch file.txt。
- mkdir:mkdir命令用于创建新的目录。例如,可以使用mkdir命令创建一个名为mydir的目录:mkdir mydir。
因此,二者的本质区别在于,touch主要用于修改文件的时间戳,而mkdir则用于创建目录。同时,如果目录不存在,也可以使用touch命令创建空文件来模拟一个目录,但这种做法并不可靠,不建议使用。
+x +755区别
两者的作用是相同的,都是为文件或者目录加上可执行权限。
+x是chmod命令中的一种形式,其中“+”表示增加权限,“x”表示可执行权限,如“chmod +x 文件名”表示给该文件增加可执行权限。
而755是一种用八进制表示权限的方法,其中第一位为文件所有者的权限,第二位为同组用户的权限,第三位为其他用户的权限。7表示可读可写可执行,5表示可读可执行,因此755就表示所有者拥有读、写、执行权限,同组用户拥有读、执行权限,其他用户拥有读、执行权限。
所以,在实际使用中,在授予文件或目录可执行权限时,可以使用+x或755命令来设置,二者的效果是相同的,只是表示方式不同。有些操作系统或命令可能只支持其中一种方式,因此应按具体情况选择合适的方式。
在Unix/Linux系统中,文件访问权限通常采用三种基本的权限标记(r、w、x),表示读、写和执行权限,对应的权限数字为4、2、1。其中,r表示可读,w表示可写,x表示可执行,用数字表示就是r=4,w=2,x=1。
如果要将一个文件设置为只读,可以使用chmod命令设置只读权限标记。
chmod a-w 文件名 将文件名指定的文件的所有用户的写权限去掉,即设为只读文件;
如果要将一个文件设置为只执行,可以使用chmod命令设置只执行权限标记。
chmod a-r 文件名 将文件名指定的文件的所有用户的读权限去掉,即设为只执行文件。
需要注意的是,文件权限是以用户身份来进行划分的,其中包括三种用户:文件所有者(u)、同组用户(g)、其他用户(o)和所有用户(a)。因此,如果需要更加精细地设置文件权限,可以针对不同用户设置不同的权限标记,例如:
chmod u=rwx,g=rx,o= 文件名 表示将文件名指定的文件的所有者设置为可读、可写、可执行,同组用户设置为可读、可执行,其他用户不设置任何权限标记。
安装SSH
sudo apt install openssh-server
SSH免密登录
对于Ubuntu而言默认root未启用,需要设置root密码
sudo passwd root
后面一共输入三次密码,第一次为当前用户密码,随后输入root用户的密码以及确认密码
下一步修改SSH配置文件
- 首先得确保Ubuntu已经安装了SSH,安装命令为
apt install openssh-server - 切换成ROOT用户,输入命令
vi /etc/ssh/sshd_config来修改配置文件 - 找到
PermitRootLogin所在行,输入i进入输入模式,取消注释并将值设为yes - 找到
#PubkeyAuthentication yes去掉#号注释 - 然后按
q,输入:wq保存退出 - 重启SSH服务,输入命令
service ssh restart - 然后再次尝试连接,连接成功
下面是生成密钥步骤(Centos可忽略上面ubuntu root设置操作,仅需要修改SSH配置文件)
SSH 三步解决免密登录
1.客户端生成公私钥
本地客户端生成公私钥:(一路回车默认即可)
ssh-keygen
上面这个命令会在用户目录.ssh文件夹下创建公私钥
cd ~/.ssh
ls
下创建两个密钥:
id_rsa (私钥)
id_rsa.pub (公钥)
2.上传公钥到服务器
这里测试用的服务器地址为:192.168.235.22
用户为:root
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.235.22
上面这条命令是写到服务器上的ssh目录下去了
cd ~/.ssh
vim authorized_keys
可以看到客户端写入到服务器的 id_rsa.pub (公钥)内容。
3.测试免密登录
客户端通过ssh连接远程服务器,就可以免密登录了。
ssh root@192.168.235.22
开机自动运行脚本
查询开机自启的服务
systemctl list-unit-files | grep enabled
rc.local方式开机自启
systemd方式开机自启
rc.local和systemd是两种不同的系统启动方式,它们的区别如下:
- rc.local是在/systemV方式下的启动脚本,而systemd是在systemd方式下的启动脚本。
- rc.local是一个简单的shell脚本,用于在系统启动过程中执行特定命令,而systemd则是一个复杂的初始化系统,包含多个单元(unit)和服务(service),可以管理系统和服务的启动、停止和重新加载等。
- rc.local文件的执行顺序在rcN.d脚本之后,而systemd则是通过依赖关系,按照指定的顺序执行各个单元。
- 在rc.local中配置的服务可能不会在systemd中正常工作,因为systemd可能会使用更严格的安全限制、沙箱环境和资源管理,但是在systemd中配置的服务都可以在rc.local中正常工作。
- 在新一代的Linux发行版(如Ubuntu 20.04)中,已经废弃了rc.local方式,将其替换为systemd方式,因此在新系统中建议使用systemd方式设置开机自启。
总之,systemd更为灵活、安全和强大,支持并行和按需启动,对系统的管理和控制更为细致和科学,而rc.local则是一种简单易用的启动方式,在某些情况下可能更为方便。
systemd示例
1、编写脚本(需要#!/bin/bash 开头,脚本不要使用nohup & 后台执行,后台执行会导致线程执行任务结束)shell脚本第一行:#!/bin/bash的含义
vim /home/npc/start.sh
#!/bin/bash
/home/npc/npc -server=xxxxxx -vkey=xxxxxx -type=tcp
2、赋予脚本hello.sh 执行权限(0755和+x都可以用于给文件添加执行权限,但0755会同时设置其他权限,而+x只添加执行权限,不影响其他权限。读(4)、写(2)和执行(1)权限)
chmod 0755 /home/npc/start.sh
3、创建Unit定义文件
vim /etc/systemd/system/npc.service
npc.service 内容如下:
[Unit]
Description = start npc
[Service]
ExecStart = /home/npc/start.sh
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target
4、查看所有服务,list-unit-files --type 是列出所有启动文件
systemctl list-unit-files --type=service |grep npc
5、启动服务(启动失败在确认文件路径、文件执行权限没错的情况下试试systemctl daemon-reload)
systemctl enable npc # 开机自动启动on
systemctl start npc # 单次开机启动
systemctl status npc #运行状态确认
systemctl restart 服务名称 #重启网络服务
systemctl reload npc #(如果后面修改了脚本)重新加载配置
systemctl stop 服务名称 #停止网络服务
systemctl disable npc #关闭开机自启
systemctl is-enabled 服务名称 #查看特定服务是否为开机自动启动:
6、测试重启机器
reboot
nohup 和setsid区别
- nohup和setsid都是在Linux系统中运行进程时使用的命令,并且都可以让进程在后台运行,但它们的作用和用法略有不同。
- nohup命令是指在执行命令时忽略挂起信号,在执行命令时,将命令的输出重定向到指定文件(默认为nohup.out文件),这样即使当前终端关闭,进程也会一直运行下去,而不会被挂起或停止。常用的命令操作为:nohup command &,其中command是指要运行的命令。
- 而setsid命令是启动一个新的会话,并以此启动一个新的进程,使新进程摆脱原来的终端控制。这同样可以使进程在后台运行。常用的命令操作为:setsid command,其中command是指要运行的命令。
- 综上所述,nohup命令主要是为了让进程在后台运行,并忽略挂起信号,而setsid命令则是创建一个新的会话,并在新的会话中启动进程,使进程摆脱原来的终端控制,进而让进程在后台运行。
什么时候用nohup,什么时候用setsid
nohup和setsid都可以让进程在后台运行,但是它们的使用场景略有不同,以下是它们的使用建议:
- 当需要在终端运行一个长时间运行的命令,但不希望因为关闭终端窗口而中止该命令时,建议使用nohup,例如:
nohup command &。 - 当需要启动一个新的进程,让该进程摆脱与当前终端的关联,以便在后台运行时使用时,建议使用setsid,例如:
setsid command。
需要注意的是,系统资源是有限的,如果开启太多的后台进程,会占用过多的系统资源,影响系统的稳定性和性能。因此,在使用nohup或setsid等命令时,需要仔细考虑进程的实际需求,避免过度占用系统资源。此外,在使用nohup时,需要注意输出重定向的文件路径,以及进程的日志记录和控制等问题,以确保进程可以正常运行并及时发现和解决问题。
默认nohup日志输出位置
默认情况下,nohup命令输出的日志信息会保存在当前目录下的nohup.out文件中。nohup.out文件会在运行nohup命令时自动生成,如果原来存在nohup.out文件,则会将新的输出信息追加到该文件中,而不会覆盖原来的内容。
如果需要将nohup命令的输出信息保存到其他文件中,可以使用重定向符号(>)将输出信息重定向到指定文件。例如,以下命令将ls命令的输出信息保存到list.txt文件中:nohup ls > list.txt &
如果重新运行nohup命令,会自动在文件末尾追加新的输出信息,而不会覆盖该文件。如果需要覆盖原来的内容,可以使用重定向符号(>)和覆盖符号()组合使用,例如:nohup ls > list.txt 2>&1 &该命令将ls命令的标准输出(1)和标准错误输出(2)都重定向到list.txt文件中,并覆盖原来的内容。
rc.local 中执行nohup 的nohup.out在哪输出
在rc.local中执行nohup命令时,nohup命令输出的日志信息会保存在默认的nohup.out文件中。但由于rc.local是在系统启动阶段执行的,可能还没有创建出所有目录,因此如果nohup命令输出的日志需要保存到某个目录下的文件中,需要确保该目录已经创建。
可以在nohup命令中使用重定向符号(>)将输出信息保存到指定文件中。例如:nohup command > /path/to/logfile.log &
在rc.local中执行/root/npc.sh命令时,"&"符号的作用是将该命令放在后台执行,使rc.local命令不会在执行该命令时阻塞,而是可以继续执行后续的命令。
如果不使用"&"符号,将会在执行该命令时阻塞rc.local命令,直到该命令执行完毕后,才会执行后续的命令。在rc.local中,由于这些命令是在系统启动时执行的,如果其中的某个命令阻塞了,可能会影响系统的启动速度和启动结果。
因此,在rc.local中执行后台命令时,建议使用"&"符号,将命令放在后台执行,以避免阻塞rc.local命令的执行。需要注意的是,如果后台进程产生了输出信息,输出可能会被重定向到nohup.out文件中,需要注意查看该文件以获取后台进程的输出日志。
nohup ls > list.txt 2>&1 & 中 2>&1 2和1什么意思
>>表示追加内容不会覆盖原有,如ls >> list.txt
>|也可以重定向,>|等效的重定向符 >
>&重定向操作符,可以将错误流重定向到标准流上,>重定向操作符,只能重定向标准流
在Linux中,每个进程都有三个标准的流,分别是标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。这些标准流在执行命令时都是自动开启的,如果不进行重定向,则默认输出到屏幕上。
在命令中使用2>&1的作用是将标准错误流(stderr)重定向到标准输出流(stdout)上。这样,如果命令产生了错误信息,就会和正常输出信息一样,被输出到指定的文件list.txt中。
可以这样理解:
1表示标准输出(stdout)。2表示标准错误(stderr)。>&表示重定向到。1表示标准输出(stdout)。&1表示的是标准输出的位置,也就是list.txt,因为在前面已经将标准输出重定向到list.txt了。
因此,命令"nohup ls > list.txt 2>&1 &"的意思是将ls命令的标准输出和标准错误输出都重定向(stdout/stderr)到list.txt文件中,而不是输出到屏幕上,并且将该命令放在后台执行。
进入单用户模式
本人系统为centos7.9.2002
如果修改某些文件导致开机进度条卡死的情况可以进入单用户模式,删除或还原文件
开机时差不多到这个位置时多按几次E
然后通过键盘,移动光标到UTF-8 后面添加
init=/bin/bash
然后按 ctrl+x 进入单用户模式
默认进去只有只读权限,输入下面的命令便可以对文件编辑
mount -o remount,rw /