突然,我的 Xubuntu 24.04 系统上的一个 ID 丢失了背景和图标。Whisker 菜单仍然有效。我可以通过 Whisker 菜单或从终端会话启动应用程序。~/Desktop 仍然包含应显示的各种图标。此外,顶部和底部的“面板”可见且可以工作。我该怎么做才能让桌面恢复正常。我尝试更改桌面背景 - 结果相同,屏幕始终是黑屏
主页
我需要使用 lyx 的早期版本,该版本在 24.04 中不可用。我该如何添加此存储库?我想我问的是新格式化的 Ubuntu.sources 文件中的 Signed-By 行,该文件替换了 sources.list 文件。
# route -v
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default RT-00904C0FF018 0.0.0.0 UG 1024 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-55985fc83fa9
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-4a2e674be385
172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-c4a5411407dd
172.21.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7eb7fa74a326
172.22.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-3b304b8d2b9f
172.23.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-519d33f42172
172.24.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-10bfee6d9dcb
172.25.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-5f628b8f8682
172.26.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-d7fcffbb970a
172.27.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-4b57aa2459c5
172.28.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-a4759ccfc8c4
172.29.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-fa55d2bd337d
172.30.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-f7574a62a5c4
172.31.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-45084db52c51
192.168.0.0 0.0.0.0 255.255.240.0 U 0 0 0 br-65a630f9019d
192.168.16.0 0.0.0.0 255.255.240.0 U 0 0 0 br-5aa5d76d0c7a
192.168.32.0 0.0.0.0 255.255.240.0 U 0 0 0 br-e0d66f2d6753
192.168.48.0 0.0.0.0 255.255.240.0 U 0 0 0 br-beb580b505a2
192.168.214.0 0.0.0.0 255.255.255.0 U 1024 0 0 eth0
RT-00904C0FF018 0.0.0.0 255.255.255.255 UH 1024 0 0 eth0
- 我有一个 LXC,里面运行着一堆 Docker 容器
- 我看到很多 172.xxx,并假设它们属于某些容器
- 我不太明白为什么
192.x.x.x
还有 - 为什么从 172.x 跳到 192.x?
我的问题是,我在 192.168.9.111 上有一个实际的服务器,但由于这些路由,我无法访问它。有什么想法吗?
我正在尝试按照https://help.ubuntu.com/community/Partitioning/Home/Moving/etc/fstab
上的说明进行编辑。
我收到以下错误消息:
steven@steven-Vostro-7620:~$ sudo cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)
steven@steven-Vostro-7620:~$ cmp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)
steven@steven-Vostro-7620:~$ sudo gedit /etc/fstab
sudo: gedit: command not found
我搜索了 Ask Ubuntu,但唯一的建议是其他程序,而不是 gedit。
find ..
我知道当您由于“奇怪”的文件名而遇到将例如输出管道传输到的问题时,使用特定的分隔符(例如)来实际传递完整的文件名(例如)xargs
会有所帮助。并且,引用有问题的字符串以指定它们的边界“总是”有帮助的。\0
find foldername/ -type f -print0 | xargs -0 ...
但是,如果这些字符串(文件名)包含 bash 敏感字符'
(如,,,,,"
.. ?)并且您想使用一个字符串两次(即必须使用,并且需要在嵌套命令中注入这些字符串(即)?`
(
sh -c ..
$(CMD)
例如:
# create a file which should not exist but does
mkdir remove_afterwards
touch remove_afterwards/"some [\"strange\"] ('file')"
# this will work
find remove_afterwards/ -type f -print0 | xargs -0 -I{} sh -c 'echo "{}"'
# but this won't due to the nested command
find remove_afterwards/ -type f -print0 | xargs -0 -I{} sh -c 'echo "{}" $(stat -c "%s" "{}")'
stat: cannot statx 'remove_afterwards/some [strange] ('\''file'\'')': No such file or directory
remove_afterwards/some [strange] ('file')
我还没弄清楚如何逃离第二个{}
里面$()
。
有办法吗?
不可否认,一些具有功能的真实脚本会使这一切更容易编写和阅读,但我很好奇,历史上有这样一行代码值得努力去写这个问题。
编辑 1:设法使用拔电源插头技术重新启动我的服务器,现在可以 ssh 和调试:)
发布这个是因为此刻我的 pi 崩溃了,因为我怀疑 SD 卡上没有更多空间了,但我正在使用目录中的 FTP 上传到我的外部硬盘/media/nvme/some/folder/
在崩溃之前获取了所有这些信息,目前我甚至无法再使用 ssh。我将尝试手动删除一些文件,取出 SD 卡并重新启动 pi
2TB nvme 安装在/media/nvme
,du -sh /media/nvme/
仅提供 68GB 的使用空间,因此空间充足。我有一个homepage
使用配置运行的服务
- resources:
cpu: true
memory: true
disk:
- /
- /nvme # mounted in docker with /media/nvme:/nvme:ro
主页磁盘使用情况均显示剩余空间为 0
这可能是什么原因造成的
以下是我在崩溃前执行的一些调试命令;请注意,/dev/sda1
nvme 没有显示df
在fdisk
sudo fdisk -l
Disk /dev/sda: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: Forty
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5e4c525d
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 3907029167 3907027120 1.8T 83 Linux
df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 3728372 0 3728372 0% /dev
tmpfs 799744 3008 796736 1% /run
/dev/mmcblk0p2 122383952 117122864 0 100% /
tmpfs 3998704 0 3998704 0% /dev/shm
tmpfs 5120 16 5104 1% /run/lock
/dev/mmcblk0p1 522232 66670 455562 13% /boot/firmware
tmpfs 799740 0 799740 0% /run/user/1000
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 1.8T 0 disk
└─sda1 8:1 0 1.8T 0 part
mmcblk0 179:0 0 119.1G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 118.6G 0 part /
cat /etc/fstab
proc /proc proc defaults 0 0
PARTUUID=359da976-01 /boot/firmware vfat defaults 0 2
PARTUUID=359da976-02 / ext4 defaults,noatime 0 1
ls -l /dev/disk/by-uuid/*
lrwxrwxrwx 1 root root 15 Dec 8 15:15 /dev/disk/by-uuid/3b614a3f-4a65-4480-876a-8a998e01ac9b -> ../../mmcblk0p2
lrwxrwxrwx 1 root root 15 Dec 8 15:15 /dev/disk/by-uuid/5DF9-E225 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 10 Dec 8 15:15 /dev/disk/by-uuid/c4aa43d1-a9bc-498c-8549-653c5e929fc2 -> ../../sda1
ls /media/
nvme
sudo du -sh /media/nvme/
68G /media/nvme/
我可以使用以下命令从 Linux 命令行启动串行会话:
putty -serial /dev/ttyS0
但是我找不到设置串行速度的选项。Google AI 告诉我这应该可行:
putty -serial /dev/ttyS0 -speed 115200
但它报告说“-speed”是一个无法识别的选项。也许这对 Windows 用户有用。我可以在 Linux 中这样做吗?
我正在使用 unity,根据文档https://docs.unity3d.com/2022.3/Documentation/ScriptReference/PlayerPrefs.html我应该能够在“HKCU\Software\ExampleCompanyName\ExampleProductName”找到玩家偏好设置。
但当我在整个电脑上搜索名为“hkcu”的文件夹时,我什么也没找到。
所以我基本上是尝试找到该文件夹。
这张图片展示了我所描述的一切。
额外信息
每次我制作新版本时,以前的版本中的玩家偏好似乎都会保留下来。但这次我想测试我的新版本,并像新玩家一样体验游戏。所以我想删除我所有的玩家偏好。
我正在尝试在以下 unix/linux 中对库存清单进行排序。我成功地按名称和 ID 进行排序,并能够调出使用菜单,但无法按价格排序,即使使用“awk”函数也是如此。
我使用 调用代码./invOpt -p
,输出继续告诉我这是一个invalid option: -p
然后拉出下面的使用菜单。我很困惑,因为它拒绝对价格所在的第 4 个字段进行排序。我不知道 $ 和/或逗号符号是否扰乱了排序
"Usage: invOpts -i | -n | -p | -h
" -i sort by product ID"
" -n sort by product name"
" -p sort by price"
" -h display usage"
INVENTORY MENU:
Product ID Product Name Quantity Price Total Value
----------- ------------------------------ -------- ----- -----------
P101 Apple MacBook Pro 25 $2,399.99 $59,999.75
P102 Samsung Galaxy S23 40 $799.99 $31,999.60
P103 Apple iPhone 15 60 $999.99 $59,999.40
P104 Google Pixel 8 35 $899.99 $31,499.65
P105 Microsoft Surface Pro 9 18 $1,299.99 $23,399.82
P106 Dell XPS 13 50 $1,099.99 $54,999.50
P107 Apple iPad Air 75 $599.99 $44,999.25
P108 Fitbit Charge 5 100 $179.95 $17,995.00
P109 Amazon Echo Dot 5th Gen 150 $49.99 $7,498.50
P110 Sonos One SL 80 $199.99 $15,999.20
P111 Logitech MX Master 3 120 $99.99 $11,998.80
P112 HP Spectre x360 25 $1,499.99 $37,499.75
P113 GoPro Hero 11 60 $399.99 $23,999.40
P114 Nintendo Switch OLED 45 $349.99 $15,749.55
P115 Canon EOS R6 15 $2,499.99 $37,499.85
P116 Seagate 2TB External Hard Drive 200 $69.99 $13,998.00
P117 Apple AirPods Pro 2nd Gen 130 $249.99 $32,498.70
P118 MSI GeForce RTX 4070 40 $599.99 $23,999.60
P119 Lenovo ThinkPad X1 Carbon 20 $1,799.99 $35,999.80
P120 Anker PowerCore 26800 180 $59.99 $10,798.20
当前代码:
#!/bin/bash
# Function to display usage information
usage() {
echo "Usage: invOpts -i | -n | -p | -h"
echo " -i sort by product ID"
echo " -n sort by product name"
echo " -p sort by price"
echo " -h display usage"
}
# Process command-line options using getopts
while getopts ":inp:h" opt; do
case $opt in
i)
# Sort by product ID (Field 1) and save to a temp file
tempFile="/tmp/inventory_sorted_by_id_$$.txt"
sort -t: -k1,1 ~/A09/inventory > "$tempFile"
;;
n)
# Sort by product name (Field 2) and save to a temp file
tempFile="/tmp/inventory_sorted_by_name_$$.txt"
sort -t: -k2,2 ~/A09/inventory > "$tempFile"
;;
p)
# Sort by price (Field 4) and save to a temp file
tempFile="/tmp/inventory_sorted_by_price_$$.txt"
sort -t: -k4,4n ~/A09/inventory > "$tempFile"
;;
h)
# Display usage and exit
usage
exit 0
;;
?)
# Handle invalid options
echo "Invalid option: -$OPTARG"
usage
exit 1
;;
esac
done
# If no option is provided, default to original file
if [[ -z $tempFile ]]; then
tempFile=~/A09/inventory
fi
# Source the myFunctions script to use the chkFile function
source ~/Homework9/myFunctions
# Store the inventory file name
filename=~/A09/inventory
# Check if the file exists using chkFile
chkFile $filename
if [[ $? -ne 0 ]]; then
echo "Error: Inventory file does not exist."
exit 1
fi
# Print the header
printf "%-12s %-30s %-10s %-15s %-15s\n" "Product ID" "Product Name" "Quantity" "Price" "Total Value"
printf "%-12s %-30s %-10s %-15s %-15s\n" "-----------" "------------------------------" "--------" "-----" "-----------"
# Initialize total inventory value
totalInventoryValue=0
# Read the sorted file line by line (either sorted or original)
while IFS=: read -r productID productName quantity price; do
# Calculate the total value: Quantity * Price
totalValue=$(echo "$quantity * $price" | bc -l)
# Format the price and total value with commas
formattedPrice=$(echo $price | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')
formattedTotalValue=$(echo $totalValue | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')
# Print the formatted data
printf "%-12s %-30s %-10s $%-14s $%-14s\n" "$productID" "$productName" "$quantity" "$formattedPrice" "$formattedTotalValue"
# Add total value to the overall inventory value
totalInventoryValue=$(echo "$totalInventoryValue + $totalValue" | bc -l)
done < "$tempFile"
# Format the total inventory value with commas
formattedTotalInventoryValue=$(echo $totalInventoryValue | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')
# Print the total inventory value
printf "\nTotal Inventory Value: $%-14s\n" "$formattedTotalInventoryValue"
# Clean up the temporary file
rm -f "$tempFile"
例如,我有自己的进程,它VikProcess
继承了wps_supplicant
(dport
、、等)的可能代码,以获取的基本代码特征。systemd
events.c
scan.c
wps_supplicant
现在,有人可以指导我替换所有可能的服务wps_supplicant
并用于VikPropcess
与 Debian OS (RPI-3) NetworkManager 服务进行通信吗?任何指导都会有所帮助并表示感谢。
我需要扫描 Linux 系统中的病毒/恶意软件,仅扫描整个文件系统。有几个选项可以考虑。
- 一种是用户通常的做法:每天使用防病毒软件扫描一次系统。
- 第二个选项是查找过去一天修改的文件并将该列表提供给防病毒程序。
我在包含 500 万个空文件的目录上测试了以下 bash 命令find
,它非常高效。
date;find /test/ -type f -ctime -1 -type f 1>./find_ctime.out 2>./find.errors;date
只需约5秒。
我使用 -ctime 选项只是为了克服使用 touch 等实用程序更改某些程序修改时间的问题。
大多数管理员在谈论系统扫描时都会谈论使用防病毒软件进行完整扫描。
为什么不可以使用 find 来获取修改的文件列表并对其进行扫描?
我想测试函数的输出是否与我设想的它应该写入标准输出的文本相匹配。但下面的代码从未打印出来test PASS
,我不知道为什么。我也尝试\n
在变量中放入各种字符或删除它们,GROUND_TRUTH
但这没有帮助。
error_out()
{
printf "%s\n" "${ERROR}"
printf "Return to exit\n"
read -r THROW_AWAY
exit
}
ERROR="Test output."
OUTPUT_TO_TEST=$(error_out)
GROUND_TRUTH="Test output.\nReturn to exit\n"
{ [ "${OUTPUT_TO_TEST}" = "${GROUND_TRUTH}" ] \
&& printf "error_out test PASS\n"; } \
|| { \
printf "error_out test FAIL\n"; \
}
我有一个非常基本的文件;
15
Chapter name
some text and some more text
some text and some more text
我试图得到这样的东西
Book: 15 Chapter name
some text and some more text
some text and some more text
我尝试使用 sed 和这种模式来做到这一点;
sed 's/^\([[:digit:]]\+\)\n\([[:alpha:]].*$\)\n$/Book: \1 \2\n/g'
显然,这在终端上不起作用,但是在 VIM 版本中可以完美运行sed
。
我们在网上商店收到此警告
report.WARNING:分配给临时表的内存大小超过 innodb_buffer_pool_size 的 20%。请更新 innodb_buffer_pool_size 或减小批处理大小值(这会减少临时表的内存使用量)。当前批处理大小:589;分配的内存大小:1742262000 字节;InnoDB 缓冲池大小:8589934592 字节。
因此我运行了mysqltuner来分析数据库设置,它建议将innodb_buffer_pool_size设置为 >13.7GB。目前设置为 8GB。
我们预计一月份的客户流量会非常高,所以我问我的主管是否允许将该值增加到大约 14 GB(我们有 12 GB 的可用 RAM),但据他说这只是一个警告,我们应该忽略它,直到三月份我们切换到另一个托管商。
根据我的研究,这种错误配置可能会导致性能损失,甚至导致交易失败并最终导致错误。这真的只是一个可以忽略的警告吗?
如果被忽视的话,可能发生的最坏情况是什么?
附加信息:
我们正在使用rabbitMQ将目录数据从PIM(产品信息管理)系统导入 magento 2。当队列消费者运行时,总是会出现警告。这会减慢商店的速度,在此期间平均负载上升到大约 30(10 个 CPU),而平均负载为 6。
表中有一些列可能会包含一些非 ANSI 字符,我们必须存储它们。在 SQL Server 2019 之前,只有 1 个选项 -NVARCHAR
数据类型,但是从 SQL Server 2019 开始,可以使用VARCHAR
以 结尾的排序规则的数据类型%_UTF8
。我理解,为了完全兼容大小,我需要将VARCHAR
列大小加倍,所以如果是,VARCHAR(20)
则需要VARCHAR(40)
覆盖如果有人插入所有 20 个字符都是非 ANSI 的文本的情况,但这种排序规则还有其他缺点吗?该列中的数据将只有 ~99.9% 的 ANSI 字符。
对于示例数据...
/*Quick and dirty generation of some rows of data*/
SELECT value as [orderid],
1 as [custid],
1 as [empid],
1 as [shipperid],
getdate() as [orderdate],
'abcdefgh' as [filler]
INTO dbo.Orders
FROM generate_series(1,10000000)
CREATE CLUSTERED INDEX [idx_cl_od] ON [dbo].[Orders]
(
[orderdate] ASC
)
UPDATE STATISTICS dbo.Orders WITH FULLSCAN
以及以下查询
SELECT [orderid], [custid], [empid], [shipperid], [orderdate], [filler]
FROM dbo.Orders
WHERE orderid <=7601715 AND 1=1 /*Prevent simple parameterisation*/
然后在我的开发机器(SQL Server 2022,DOP 为 4)上,聚集索引扫描的 IO 成本46.8853
与串行或并行计划无关。扫描的 CPU 成本11.0002
在串行计划和 2.75004
并行计划中,因此我预计计划之间的临界点是并行运算符超出时8.25016
(估计进入的行数约为 450 万时达到的阈值)。实际上,在实际发生这种情况时,收集流运算符的成本是13.0501
(比我预期的高出约 300 万行)。
如果 SQL Server 不使用总体计划成本作为临界点,那么实际逻辑是什么?
我有一个多租户应用程序。因此,单个数据库包含所有使用该数据库的组织的数据。
有没有办法提供对数据库的访问权限,以便我的客户可以使用任何分析工具(例如 Power BI)连接到它。
有 Org 表 - 我可以在其中指定他们可以获取的该表的 PK。
然后是 Event 表,它有一个到 Org 表的 FK。
然后是注册(到事件)表,其中包含指向事件的 FK 和指向用户的 FK。
最困难的是用户表。如果用户注册了活动,那么该客户就可以获取该用户。这意味着多个客户可以看到该用户表行。
这是专门针对 SQL Server 的。因此,我需要制作一些视图来确定给定用户可以查看哪些用户记录。虽然我可以在 Event 表中复制 Ord PK,但用户记录(因为多个客户可以获得它)无法与添加的 FK 一起使用。
有办法吗?
我观察(并重现)了 SQL Server 2022 中的以下场景。
使用中的模式
- 代码通过 sp_executesql 执行(不涉及存储过程)
- 第一个查询将数据选择到临时表中
- 然后,DDL 语句会在临时表上创建聚集索引。临时表绝对不可缓存——首先,这不是一个模块(存储过程或函数),而且我们在临时表填充后创建索引。因此,我不希望缓存的临时对象上留下的统计信息在这里被涉及。
- 查询从临时表中选择数据。此查询每次都会获得完全优化(不是 TRIVIAL 计划)
该批处理可以针对小型和大型数据集运行,因此临时表中可以包含 1 行或数千行。
此行为通常发生在可读辅助数据库上。没有可写查询存储,也没有自动计划强制因素。
我已经验证我也可以针对主副本重现该行为。(自动计划更正被告知忽略查询,并且我确认重现时没有在主副本上强制执行计划。)
复制脚本
- 安装脚本- 我在 SQL Server 2022 CU15 上运行了此脚本。这会关闭查询存储并使用兼容级别 130。
- 重现查询- 我一直通过 SQL Query Stress 运行该查询,因此我可以轻松地在一个或多个线程上同时运行该查询
- 计划生成编号和临时表- 一个非常简单的查询,用于观察系统查询统计中的 plan_generation_num(“重新编译后可用于区分计划实例的序列号。”)和当前的临时表列表
通常会发生什么——以及我期望的行为
通常,在查询执行之间更改临时表中的大量行会自动导致重新编译,并且我会看到从临时表中选择数据的查询具有与临时表中的行匹配的行估计值。
当它按预期工作时,性能良好。
使用重现查询:如果我清除计划缓存,然后在 SQL 查询压力中的单个线程上运行重现查询 40 次迭代,plan_generation_number 最终为 82。当使用 sp_WhoIsActive 对查询计划进行采样时,查询临时表的行估计值与临时表中的行数匹配,正如预期的那样。
有时会发生的情况——在我看来像是一个错误
在极少数情况下,我看到正在使用的计划中,临时表的估计计划只有 1 行,但临时表中实际上有大量行。很多行已更改,但它没有自动重新编译:
这会导致性能非常缓慢,因为低估计计划决定使用没有预取的嵌套循环,这使其成为 CPU 消耗器。
使用重现查询:如果我清除计划缓存,然后在 SQL Query Stress 中的 2 个线程上运行重现查询 20 次迭代,则 plan_generation_number 最终会小于 82——它因运行而异,但可能是 72 或 59,表示重新编译次数较少。在运行时,我还可以使用 sp_WhoIsActive 对估计的行数为单个但临时表中的行数更多的情况进行采样。屏幕截图:
我只能在多个并发会话上运行重现代码时重现此问题
我无法在 SQL Server 中使用单个会话重现此行为。我能重现此行为的唯一方法是设置一个代码块:
- 执行至少 1 次 sp_executesql 语句的迭代,该语句在临时表中有 1 行
- 然后执行 sp_executesql 语句的 1 次迭代,该语句在临时表中包含更多行
如果我在单个会话中运行此程序,则无法重现问题。但如果我在四五个会话中同时运行此程序,则偶尔会出现“未按应有的方式重新编译”的问题。(注意:使用 SQL Query Stress,我只需 2 个会话/迭代即可重现此问题。)
我觉得这像是一个 bug,我很好奇是否有人见过它。不过,使用临时表重新编译和统计行为非常复杂,因此我可能忽略了它如何与不可缓存的临时表一起工作的一些细微差别。
PS:我确实认为可缓存的临时表通常更好。我只是想弄清楚为什么这种行为会在此时在不可缓存的临时表场景中发生。
解决方法
在查询中添加后option (recompile)
,我无法再重现查询临时表的 1 行计划的重用。这已经足够了,但我很困惑为什么这是必要的。