注意:我使用的是 Ubuntu MATE 24.04.2,但我没想到桌面会有什么不同。
几天前的软件更新之后,情况发生了变化:
- “应用中心”已从“管理”子菜单中消失
- “Snap Store”现在位于子菜单“系统工具”中
当我点击“Snap Store”时,启动的软件简单地称自己为“软件”。
窗口中间显示“正在下载软件目录”。
没有发生任何其他事情。
有什么想法吗?
注意:我使用的是 Ubuntu MATE 24.04.2,但我没想到桌面会有什么不同。
几天前的软件更新之后,情况发生了变化:
当我点击“Snap Store”时,启动的软件简单地称自己为“软件”。
窗口中间显示“正在下载软件目录”。
没有发生任何其他事情。
有什么想法吗?
我正在使用 Ubuntu 22.04。我有一个 GUI 文件夹,其中包含子文件夹和文件(文本、csv、rar 等)。GUI 应用程序只能修改文件。只有管理员用户可以删除文件。普通用户不能修改任何文件,也不能从 GUI 文件夹中删除文件夹或文件。如何为 GUI 文件夹和 GUI 可执行文件授予如此特定的权限?
这是我第一次使用 Ubuntu Server 或任何需要使用命令提示符的东西。我使用的是 Ubuntu Server 24.04。我在系统上设置了两个 Samba 共享驱动器。它们主要用于文档和照片存储。第一个工作正常,我可以从我的 Windows 机器上毫无问题地访问它及其内容。
我对第二个硬盘进行了相同的设置,我已对一个完整的硬盘进行了分区并将其安装为 fat32,文件系统为 vfat。我可以通过 Windows 查看驱动器并打开它,但我无法将任何东西保存到其中(而且由于它是空的,我不知道我是否可以从中提取任何东西)。我只是弹出一个“您需要权限”框。
我的问题在于/media
一个。Ubuntu 安装在 120GB 驱动器上,这是 Samba 共享首次尝试使用的驱动器。/media
一个是 1TB HDD 上的单个分区。鉴于我缺乏知识,我认为最好安装一个新的 SSD,开始全新安装并丢弃旧驱动器。
这是我的配置信息。我看不出这里有任何会引起问题的东西,但就像我说的,我对此很陌生。
[sambashare]
comment = Samba on Ubuntu
path = /home/ollie/sambashare
read only = no
browsable = yes
public = yes
[bulk]
comment = bulk
path = /media
read only = no
browsable = yes
public = yes
编辑:
已重新安装到希望更好的位置/home/ollie/storage
。
我尝试使用下面建议的命令使该分区对所有人都可写入,但访问被拒绝。
/dev/sda1: UUID="033D-1E2C" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="61dfcddd-01"
/dev/sdb1: PARTLABEL="Microsoft reserved partition" PARTUUID="c0258793-6786-4438-b8e2-dffa73ce487c"
/dev/sdc1: PARTUUID="3481976b-9b16-466a-879f-1117a8833016"
ollie@winchester:~$ UUID=033D-1E2C /home/ollie/storage vfat defaults,umask=000 0 0
-bash: /home/ollie/storage: Is a directory
ollie@winchester:~$ UUID=033D-1E2C /dev/sda1 vfat defaults,umask=000 0 0
-bash: /dev/sda1: Permission denied
编辑:
尝试添加权限以使分区可写。
sudo nano /etc/fstab
显示:
/dev/disk/by-uuid/1d277102-f481-4f85-bdd3-b60a60f27b9f / ext4 defaults 0 1
/swap.img none swap sw 0 0
/dev/sda1 /home/ollie/storage vfat conv=b 0 0
目前顶部top
看起来或多或少是这样的:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
160932 username 20 0 236684 222504 6912 R 99,3 0,7 58:14.16 python3
6353 username 20 0 633904 523992 6656 R 99,0 1,6 13,39 python3
18092 username 20 0 393320 369180 11264 R 39,4 1,1 154:58.37 python3
149778 username 20 0 3975792 800884 301444 S 14,6 2,4 18:42.82 firefox
168196 username 20 0 2544432 181284 112904 S 7,0 0,6 0:08.15 Isolated Web Co
2065 root 20 0 1547428 353628 258444 S 3,3 1,1 63:27.48 Xorg
3103 mateusz 20 0 1206696 104704 39056 S 0,7 0,3 1:19.68 lxqt-panel
53 root -51 0 0 0 0 S 0,3 0,0 7:51.72 irq/9-acpi
834 root -51 0 0 0 0 S 0,3 0,0 9:44.32 irq/147-iwlwifi
1410 root 20 0 427404 4992 3968 S 0,3 0,0 3:00.38 thermald
我知道我可以用来ps -fA | grep python
区分 python 进程,并用它ps -fA | grep 160932
来查找消耗我资源的顶级进程之一。
但是我怎样才能在 中正确显示它top
?或者我怎样才能获得top
支持此功能的 -equivalent,最好是一些相对标准的工具?
在无线局域网中,如果两个设备想要互相通信(或者如果一个设备想要与外部网络(如互联网)中的设备通信),它们需要将想要传达的信息发送到路由器,并且由于它是一个无线网络,所以这是通过以电磁波的形式传输数据来实现的。
由于所有传输数据的形式最终都是二进制(1 和 0),我们不能只选择一种特定的电磁波频率、幅度和相位组合作为“1”,而选择另一种组合作为“0”,因为路由器需要区分从一个设备传入的数据和另一个设备传入的数据,同时需要将信息发送到网络上的一个特定设备,而不是所有设备。
据我了解,这是通过将数字数据(二进制)转换为模拟载波信号(电磁波),然后将“调制”波叠加到该载波上来实现的,其中调制波如何改变最终调制信号的细节会在网络设备和路由器之间产生独特的信号。
这些信号也需要“解调”,然后从模拟电磁波转换回数字(此处为二进制)。调制和解调这些信号的设备是调制解调器。
我的问题是:
当我想重定向 ffprobe 命令的 stdout 时,我大吃一惊:通常的stdout > (file)不起作用。经过几次网络搜索,我找到了答案:我必须使用stdout > (file) 2>&1,这样就可以了:https://stackoverflow.com/questions/29680391/ffmpeg-command-line-write-output-to-a-text-file。
什么可以解释为什么将输出重定向到文件的常用方法对我不起作用:我使用的 ffprobe 版本? shell?还是其他什么?
~$ ffprobe --version
ffprobe version 5.1.6-0+deb12u1 Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
或者由程序员来选择重定向的行为方式,如下面这个评论所解释的:
@Apostolos it's up to the programmer, you may want to keep normal
output separate from error output.
如果我点击这样一行用制表符缩进的行
ꕯlet name; //Indented with three tabs.
let name2; //Indented with four tabs.
Notepad++(v8.7.7 和 v8.7.8)在窗口右下角显示类似这样的内容。
Ln: 155 Col: 13 Pos: 5,772
它将每个制表符视为 4 个字符。
但是,如果我将首选项中的缩进大小从 4 改为 1,制表符就会缩小到与空格相同的大小,这会使代码变得不可读。
ꕯlet name; //Indented with three tabs.
let name2; //Indented with four tabs.
Ln: 155 Col: 4 Pos: 5,772
如何让 Notepad++ 正确执行此操作(任何代码编辑器的极其基本的功能)?
bash 提示符中的此命令可正确对目标文件夹中的文件进行排序。排序按降序在第三个字段进行,如下所示:
$ find -printf '%f\n' | sort -r -k3
bfilename Desc 1068%.html
afilename Desc 298%.html
我想在浏览器中以链接形式按排序顺序显示文件名。我的想法是创建并在相应的文件名前面添加一个唯一的四位数字索引号,如下所示:
0001 filename Desc 1068%.html
0002 filename Desc 298%.html
这个问题使用排序的输出来循环重命名文件,但我不明白如何修改我的任务的代码:
https://unix.stackexchange.com/questions/564672/rename-files-based-on-their-ranked-number
我能否将 sort 命令的输出通过管道传输到另一个进程,该进程要么通过添加索引来重命名文件,要么创建一个包含指向原始文件的排序链接的新文件夹?我想尝试这两种选择。我想使用 bash,但 python 脚本也是一个选择。
编辑
$ n=1; find -printf '%f\n' | sort -r -k3 | while read f; do printf "%04d" $n; echo " $f"; let n+=1; done
0001 Desc 1068%.html
0002 Desc 298%.html
0018 Desc 17%.html
0019 .
上述命令可以打印到标准输出,但包含一个不需要的额外点项 0019。Tree 在目录中提供了 18 个文件。
$ find -printf '%f\n' | sort -r -k3 | nl -n rz
000001 Desc 1068%.html
000002 Desc 298%.html
000018 Desc 17%.html
000019 .
根据注释显示输出。我想删除前两个前导零,而不是生成带点的最后一行。输出转到标准输出。我仍然不知道如何重命名当前目录中的文件和/或在新目录中生成软链接?
假设我有一个如下值列表:
1
2
3
4
5
6
我想找到涉及此列表的连续成员的每个组合,例如:
(
// every combination of one element
1, 2, 3, 4, 5, 6,
// every combination of two con. elements
1+2, 2+3, 3+4, 4+5, 5+6,
// every combination of three con. elements
1+2+3, 2+3+4, 3+4+5, 4+5+6,
// every combination of four con. elements
1+2+3+4, 2+3+4+5, 3+4+5+6,
// every combination of five con.elements
1+2+3+4+5, 2+3+4+5+6,
// every combination of six con. elements
1+2+3+4+5+6,
)
如您所见,有n(n+1)/2
多种这样的组合。我可以使用任何 Excel 公式来找到它,理想情况下将其显示为表格,每个组合占一行。
以下是bind9-dnsutils
工具:
delv
dig
dnstap-read
mdig
nslookup
nsupdate
列表取自:https://manpages.debian.org/bookworm/bind9-dnsutils/index.html
我知道nslookup
它已被弃用但dig
事实并非如此(dig 是替代品)。
但是其他 4 种工具呢?它们是被弃用、过时还是仍然有效?
如果是这样,有什么替代品吗?
是否可以调整 qemu/libvirt 映像的大小,同时保持虚拟大小,并且不丢失数据?我解释得更好:
当您创建虚拟磁盘时
qemu-img create -f qcow2 debian-GEN.qcow2 60G
虚拟机看到60G的磁盘,但是使用的空间是虚拟机已经使用过的空间(此例子是在安装了一些软件之后)
qemu-img info debian-GEN.qcow2
image: debian-GEN.qcow2
file format: qcow2
virtual size: 60 GiB (64424509440 bytes)
disk size: 3.1 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
Child node '/file':
filename: debian-GEN.qcow2
protocol type: file
file length: 4.61 GiB (4948164608 bytes)
disk size: 3.1 GiB
现在问题来了。假设我写入了 20GB 的额外数据,磁盘大小变为 23GB(3.1+20),假设我删除了 20GB 的数据(使用 rm -fr 甚至 shred),磁盘大小仍然是 23GB!我的问题是:有没有办法从虚拟磁盘中删除 20GB 未使用的数据?那么镜像返回 3.1GB(但虚拟机仍然看到 60GB 空间)?
我有兴趣使用脚本分析 50 个不同的数据集,并将 50 个分析的输出分别保存在 50 个不同的相应目录中。为了避免手动执行此操作,如何以自动化方式(即以“批处理模式”执行此操作)完成?
要运行该脚本,需要使用一组可执行文件,所有这些文件都位于名为“Programmes”的目录中,并且还需要一个输入参数文件。每个数据集实际上由两个文件组成(infile.ped 和 infile.map)。通过我之前问过的一个问题(如何将循环命令每次迭代的输出保存到另一个新文件夹?),我了解到,如果我想对给定的单个数据集运行 50 次重复运行,一种解决方案是:
for dir in dir{01..50}; do
mkdir -p "$dir" &&
ln -sf ../{script.sh,infile.{ped,map},INPUT_PARAMETERS_FILE,PROGRAMMES} "$dir" &&
(cd "$dir" && exec bash ./script.sh infile)
done
我的问题是,这样的循环如何适应这种情况,即目标不是自动分析单个数据集,而是自动分析例如 50 个不同的数据集 (infile_1.ped 和 infile_1.map; infile_2.ped 和 infile_2.map; ...; infile_50.ped 和 infile_50.map)。
当我在 zsh 中运行以下脚本时,和都$0
给出$0:P
相同的输出:/Users/john/scripts/test123.sh
。
#!/bin/zsh
echo script\'s path: $0
echo absolute path: $0:P
echo parent folder: $0:h
echo filename: $0:t
echo filename w/o extension: $0:t:r
echo extension: $0:t:e
但为什么会这样?是不是因为:P
强制使用绝对路径(根据 zsh 文档),如果:P
不使用,路径应该是相对的,例如~/scripts/test123.sh
?
要运行该脚本,我首先要使其可执行:chmod a+rx test123.sh
然后双击它或使用命令行。操作系统是 macOS。
/32
在 Linux 网络中,创建带有启用子网的 IP 地址与创建带有附加路由的pointopoint GATEWAY
地址之间有什么区别?/32
GATEWAY
(是pointopoint
中的选项, 是内核中的标志。)ifconfig
peer
ip address
IFF_POINTOPOINT
具体来说,这些命令之间是否存在差异(例如在路由行为或性能方面)
ip addr add 1.2.3.4/32 peer 1.2.3.1 dev eth0
和
ip addr add 1.2.3.4/32 dev eth0
ip route add 1.2.3.1 dev eth0
1.2.3.1
网关在哪里?
附加问题:如果没有区别,为什么要将其pointopoint
添加到内核中?
我使用的是Ubuntu 24.04.2 LTS (noble),想在同一台机器上启动MariaDBmariadb-multi
服务器的第二个实例。我想我会使用它。
我们的第一个数据库实例运行良好,我相信所有需要的都已安装。
apt list --installed | grep mariadb
返回:
libmariadb3/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-client-core/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-client/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-common/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 all [installed,automatic]
mariadb-plugin-provider-bzip2/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-plugin-provider-lz4/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-plugin-provider-lzma/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-plugin-provider-lzo/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-plugin-provider-snappy/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-server-core/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed,automatic]
mariadb-server/noble-updates,noble-security,now 1:10.11.8-0ubuntu0.24.04.1 amd64 [installed]
但是,在尝试运行的时候mariadb-multi start 2
(我在conf文件中配置了相应的实例),出现以下错误:
Command 'mariadb-multi' not found, did you mean:
command 'mariadbd-multi' from deb mariadb-server (1:10.11.8-0ubuntu0.24.04.1)
Try: apt install <deb name>
我们是否遗漏了一些我不明白的东西?
我有一个带有多个 AG 的企业版 SQL Server 2022 集群。
其中两个 AG 将不同的实例视为主要实例。这两个 AG 都认为其次要实例是可读的,并且这样认为是正确的。
除了处于可读的辅助配置之外,没有任何东西可以使任何实例上的任何数据库变为只读。它们不是基本可用性组。
令人震惊的是:当我运行DBCC CHECKCATALOG
针对可读辅助数据库的查询,同时连接到非该数据库主数据库的实例时,查询会失败,如下所示
消息 3906,级别 16,状态 8,第 1 行
无法更新数据库“DB NAME”,因为该数据库是只读的。
DBCC CHECKDB
工作得很好!我找遍了所有地方,但没有发现任何有用的信息。
我该如何调试它?为什么DBCC CHECKDB
(它是 的超集)可以DBCC CHECKCATALOG
工作,而 却DBCC CHECKCATALOG
失败了?
从 MySQL ver 8 导出我的数据库时,我看到了这一行,这让我很困惑。
它用于虚拟列/字段
`Rego` varchar(12) GENERATED ALWAYS AS (concat(`Call_Sign`,_utf8mb4' ',`Vehicle`)) VIRTUAL,
具体来说, concat 里面的这个Call_Sign
“_utf8mb4”是什么 ?
当我“内联”变量时,下面语句中的 @SQL 变量总是被截断。如果我发送变量并打印,它不会截断到 4000,但是,我无法将发送的变量绑定到 USE [@DatabaseName] 语句中。如何解决。
这是可行的,但是数据库名称在 USE 语句中是硬编码的
DECLARE @DatabaseName NVARCHAR(MAX) = 'MyDatabase'
DECLARE @Sql NVARCHAR(MAX)=
'
USE [MyDatabase]
PRINT @DatabaseName
SELECT
...<20,000 more chars
'
DECLARE @params NVARCHAR(MAX) ='@DatabaseName NVARCHAR(MAX)'
EXEC sp_executesql @SQL, @params,@DatabaseName
这将引发异常,并显示消息“数据库‘@DatabaseName’不存在。请确保正确输入名称。”
DECLARE @DatabaseName NVARCHAR(MAX) = 'MyDatabase'
DECLARE @Sql NVARCHAR(MAX)=
'
USE [@DatabaseName]
PRINT @DatabaseName
SELECT
...<20,000 more chars
'
DECLARE @params NVARCHAR(MAX) ='@DatabaseName NVARCHAR(MAX)'
EXEC sp_executesql @SQL, @params,@DatabaseName
这会将查询截断为 NVARCHAR(4000)
DECLARE @DatabaseName NVARCHAR(MAX) = 'MyDatabase'
DECLARE @Sql NVARCHAR(MAX)=
'
USE ['+@DatabaseName+']
PRINT @DatabaseName
SELECT
...<20,000 more chars
'
DECLARE @params NVARCHAR(MAX) ='@DatabaseName NVARCHAR(MAX)'
EXEC sp_executesql @SQL, @params,@DatabaseName
也尝试使用 N'string',但没有成功
DECLARE @DatabaseName NVARCHAR(MAX) = N'MyDatabase'
DECLARE @Sql NVARCHAR(MAX)=
N'
USE ['+@DatabaseName+']
PRINT @DatabaseName
SELECT
...<20,000 more chars
'
DECLARE @params NVARCHAR(MAX) =N'@DatabaseName NVARCHAR(MAX)'
EXEC sp_executesql @SQL, @params,@DatabaseName
我想我明白为什么USE [@Variable]
不起作用,而我不知道如何解释为什么USE ['+@Variable+']
当两个变量都最大时会被截断到 4000,除非 sql server 正在强制关闭sp_executesql
。
无论如何,有谁知道有什么解决方法可以实现这一点。我基本上想使用大于 4000 个 nchars 的 SQL 语句动态定位任何数据库。
我有下表:
CREATE TABLE transactions
(
id NUMERIC(20, 0) NOT NULL DEFAULT NEXTVAL('transactions_sequence') PRIMARY KEY,
transaction_date TIMESTAMP DEFAULT NULL NULL,
transaction_type VARCHAR(255) DEFAULT NULL NULL,
merchant_id VARCHAR(255) DEFAULT NULL NULL,
transaction_type VARCHAR(255) DEFAULT NULL NULL,
-- Some more columns here
);
以及以下索引:
CREATE INDEX transactions_merchant_id_idx ON transactions (merchant_id, transaction_type, transaction_date DESC, id) WHERE merchant_id IS NOT NULL;
我有以下疑问:
SELECT id, transaction_date
FROM transactions
WHERE merchant_id = 'some_merchant_id'
AND transaction_type = 'a'
AND transaction_date >= '2025-01-01'
AND transaction_date < '2025-03-28'
ORDER BY transaction_date DESC
LIMIT 100
这个查询工作正常并且我得到了仅索引扫描:
Limit (cost=0.29..7.47 rows=1 width=13) (actual time=1.119..1.120 rows=0 loops=1)
-> Index Scan using transactions_transaction_type_idx on transactions (cost=0.29..7.47 rows=1 width=13) (actual time=1.118..1.118 rows=0 loops=1)
Index Cond: (((transaction_type)::text = 'a'::text) AND (transaction_date >= '2025-01-01 00:00:00'::timestamp without time zone) AND (transaction_date < '2025-03-28 00:00:00'::timestamp without time zone))
Filter: ((merchant_id)::text = 'some_merchant_id'::text)
Planning Time: 0.311 ms
Execution Time: 1.139 ms
但是,当我需要transaction_type
独立结果时:
SELECT id, transaction_date
FROM transactions
WHERE merchant_id = 'some_merchant_id'
AND transaction_date >= '2025-01-01'
AND transaction_date < '2025-03-28'
ORDER BY transaction_date DESC
LIMIT 100
我仍然只得到索引扫描:
Limit (cost=38.08..38.19 rows=44 width=13) (actual time=0.108..0.115 rows=47 loops=1)
-> Sort (cost=38.08..38.19 rows=44 width=13) (actual time=0.107..0.110 rows=47 loops=1)
Sort Key: transaction_date DESC
Sort Method: quicksort Memory: 27kB
-> Index Only Scan using transactions_merchant_id_idx on transactions (cost=0.29..36.88 rows=44 width=13) (actual time=0.029..0.093 rows=47 loops=1)
Index Cond: ((merchant_id = 'some_merchant_id'::text) AND (transaction_date >= '2025-01-01 00:00:00'::timestamp without time zone) AND (transaction_date < '2025-03-28 00:00:00'::timestamp without time zone))
Heap Fetches: 0
Planning Time: 0.228 ms
Execution Time: 0.161 ms
我确实有一个所有潜在 transaction_type 值的列表,所以我最初认为这会更好:
SELECT id, transaction_date
FROM transactions
WHERE merchant_id = 'some_merchant_id'
AND transaction_type IN ('a', 'b', 'c', ...) -- all the potential values here
AND transaction_date >= '2025-01-01'
AND transaction_date < '2025-03-28'
ORDER BY transaction_date DESC
LIMIT 100
但是,根据子句中的值的数量,我可能会在查询计划中IN
获得额外的值:filter
Limit (cost=38.29..38.40 rows=43 width=13) (actual time=0.110..0.118 rows=47 loops=1)
-> Sort (cost=38.29..38.40 rows=43 width=13) (actual time=0.109..0.112 rows=47 loops=1)
Sort Key: transaction_date DESC
Sort Method: quicksort Memory: 27kB
-> Index Only Scan using transactions_merchant_id_idx on transactions (cost=0.31..37.13 rows=43 width=13) (actual time=0.030..0.097 rows=47 loops=1)
Index Cond: ((merchant_id = 'some_merchant_id'::text) AND (transaction_date >= '2025-01-01 00:00:00'::timestamp without time zone) AND (transaction_date < '2025-03-28 00:00:00'::timestamp without time zone))
" Filter: ((transaction_type)::text = ANY ('{a,b,c,d,e,f}'::text[]))"
Heap Fetches: 0
Planning Time: 0.340 ms
Execution Time: 0.142 ms
因此,即使我跳过中间transaction_type
列,我的索引也会被使用。但是,使用哪种查询更好呢?是使用包含所有潜在值的IN
on 查询transaction_type
,还是不使用过滤器?如果没有过滤器,我的索引如何仍然可用transaction_type
?