我想了解术语“系统调用”。我熟悉系统调用用于从用户空间应用程序获取内核服务。
我需要澄清的部分是“系统调用”和“系统调用的 C 实现”之间的区别。
这是一个让我困惑的引用:
在类 Unix 系统上,该 API 通常是 C 库 (libc) 实现的一部分,例如 glibc,它为系统调用提供包装函数,通常与它们调用的系统调用命名相同
什么是“他们调用的系统调用”?他们的来源在哪里?我可以将它们直接包含在我的代码中吗?
一般意义上的“系统调用”是否只是 POSIX 定义的接口,但要实际查看实现,可以检查 C 源代码并在其中查看实际用户空间与内核通信的实际情况?
背景说明:我试图了解是否每个 c 函数最终都与来自/dev.
当我阅读 Linux 源代码,更具体地说是系统调用代码时,我遇到了sys_reboot实现:http : //lxr.free-electrons.com/source/kernel/reboot.c#L199。
199 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
200 void __user *, arg)
201 {
202 ...
...
286 }
Run Code Online (Sandbox Code Playgroud)
在中间,有一段特定的代码:
209
210 /* For safety, we require "magic" arguments. */
211 if (magic1 != LINUX_REBOOT_MAGIC1 ||
212 (magic2 != LINUX_REBOOT_MAGIC2 &&
213 magic2 != LINUX_REBOOT_MAGIC2A &&
214 magic2 != LINUX_REBOOT_MAGIC2B &&
215 magic2 != LINUX_REBOOT_MAGIC2C))
216 return -EINVAL;
Run Code Online (Sandbox Code Playgroud)
我想知道它实际上提供了什么样的“安全”。我的意思是,是为了防止滥用吗?在这种情况下,由于参数是公开的,任何库或应用程序都可能滥用系统调用,即使它们需要传递参数。我错过了什么?
我需要对bed文件随机排序10000 次,每次取前 1000 行。目前,我正在使用以下代码:
for i in {1..100}; do
for j in {1..100}; do
sort -R myfile.bed_sorted | tail -n 1000 > myfile.bed.$i.$j.bed
done
done
Run Code Online (Sandbox Code Playgroud)
为每个文件执行此操作需要将近 6 个小时。我有大约 150 个需要解决。有没有更快的解决方案?
我有一个数据样本(myfile.bed_sorted):
chr1 111763899 111766405 peak1424 1000 . 3224.030 -1 -1
chr1 144533459 144534584 peak1537 998 . 3219.260 -1 -1
chr8 42149384 42151246 peak30658 998 . 3217.620 -1 -1
chr2 70369299 70370655 peak16886 996 . 3211.600 -1 -1
chr8 11348914 11352994 peak30334 990 . 3194.180 -1 -1
chr21 26828820 …Run Code Online (Sandbox Code Playgroud) 我必须从命令中hcitool dev 只提取蓝牙加密狗的 MAC 地址。
的输出hcitool dev是:
Devices:
hci0 xx:xx:xx:xx:xx:xx
Run Code Online (Sandbox Code Playgroud)
我将此输出写入文件并尝试使用以下内容获取信息awk:
hcitool dev > /home/pi/mario/BT.txt
awk ' { print $2 } ' /home/pi/mario/BT.txt
Run Code Online (Sandbox Code Playgroud)
输出还包含第一行,它是一个空单元格:
xx:xx:xx:xx:xx:xx
我怎样才能推迟第一个细胞?
交叉编译 Linux 内核 3.18.10 时,编译器会.part.<N>在某些符号的末尾添加后缀(参见下面的示例)。<N>使用不同的 defconfigs 时,数字会发生变化。有人知道在什么条件下编译器会在符号末尾添加零件后缀吗?
$ arm-none-linux-gnueabi-readelf -a vmlinux | grep do_kernel_fault
给
c03a48f8 116 FUNC LOCAL DEFAULT 2 __do_kernel_fault.part.10
我有一个从/etc/fstab. 但是我非常希望在该共享上创建文件/目录以忽略我的 umask。那可能吗?似乎 cifs 不支持该umask=000选项(来源:)man mount.cifs。
我目前最好的选择是将系统范围的 umask 设置为 000,但我不想这样做,因为我想让本地机器更加锁定。愚蠢的是我以前的 NAS 做得很好,所以也许这是需要的服务器端更改?
出于某些测试目的,我在一台机器上运行多个基于套接字的应用程序,并希望模拟它们之间的“真实”网络条件。我认为最简单的方法是通过我的计算机连接的路由器重定向应用程序之间的所有流量。直观地说,这应该或多或少地像连接到同一网络的多台计算机一样执行,并且网络本身应该受路由器(100Mbps)的能力而不是本地机器间套接字连接的限制。
我的机器(192.168.1.101)通过接口直接连接到路由器(192.168.1.2)em1。我试图通过添加一个 ip 路由来做到这一点。我的 ip route 命令的结果是:
default via 192.168.1.2 dev em1 proto static metric 1024
192.168.1.0/24 dev em1 proto kernel scope link src 192.168.1.101
192.168.1.101 via 192.168.1.2 dev em1
Run Code Online (Sandbox Code Playgroud)
然而,这似乎没有任何影响,因为 ping localhost 返回的结果与间接 ping 我的机器(192.168.1.101)大致相同,即大约 0.040 毫秒。同时,在我的网络中 ping 另一台机器会导致 ping 大约 0.3-0.5 毫秒。
我试过traceroute,这是我得到的:
$traceroute 192.168.1.200 # my other computer
traceroute to 192.168.1.200 (192.168.1.200), 30 hops max, 60 byte packets
1 192.168.1.200 (192.168.1.200) 1.005 ms 0.972 ms 0.954 ms
$traceroute 192.168.1.101
traceroute to 192.168.1.101 (192.168.1.101), 30 hops …Run Code Online (Sandbox Code Playgroud) 我正在使用带有自定义内核的 Arch Linux 存储为/boot/vmlinuz-linux1. 我想要的某些功能在其中不起作用,但也有一个/boot/vmlinuz-linux内核可以使这些功能起作用。如何.config从第二个vmlinuz文件中检索内核配置文件,以便在文本编辑器中将其与第一个内核的配置进行比较?
我在 Unix 中的预定义位置有两个 Perl 脚本。此预定义位置在路径变量 ( $PATH) 中设置。现在,当我尝试运行第一个脚本(从任何位置)时,该脚本成功运行,而第二个脚本(与前一个脚本的路径相同)会引发错误提示
ScriptB: Command not found
Run Code Online (Sandbox Code Playgroud)
我的 shell 是 tcsh 并且授予两个脚本的权限是相同的。
这种错误行为的可能原因是什么?
10 awhdk;
14 hjoeow;
2 kdkld;
4 jkjdksl
Run Code Online (Sandbox Code Playgroud)
如何根据第一列(即计数)对其进行排序?
我想得到这个输出:
14 hjoeow;10 awhdk;4 jkjdksl;2 kdkld
我需要根据对第一列的排序来打印两列。
我正在使用 openssl-1.0.1f。我正在尝试在配置文件中加载 pkcs11 引擎,但它不起作用。这是我的配置:
openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/ssl/engines/engine_pkcs11.so
MODULE_PATH = /usr/lib/arm-linux-gnueabihf/opensc-pkcs11.so
default_algorithms = ALL
init = 0
Run Code Online (Sandbox Code Playgroud)
以下是结果openssl engine pkcs11 -t:
1996159072:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(/usr/lib/arm-linux-gnueabihf/openssl-1.0.0/engines/libpkcs11.so): /usr/lib/arm-linux-gnueabihf/openssl-1.0.0/engines/libpkcs11.so: cannot open shared object file: No such file or directory
1996159072:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
1996159072:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:447:
1996159072:error:2606A074:engine routines:ENGINE_by_id:no such engine:eng_list.c:418:id=pkcs11
Run Code Online (Sandbox Code Playgroud) 如何打印行中最后一个单词之前的单词(使用 ksh 或 awk 或 sed 或 perl 一行)
示例 1:
echo one two three
Run Code Online (Sandbox Code Playgroud)
将打印“两个”
示例 2:
echo 1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)
将打印“5”
我正在编写一个脚本,它允许我查看整个选定目录中每个文件的内容,但我不太知道该怎么做。
我在想的输出通过管道ls进入cat或less但这似乎并没有工作时。
是否有我需要使用的命令行变量,或者是否有满足我需要的命令?
我想要这个,这样每当我在寻找某个我不记得的文件时,我就可以快速查看文件的内容。
kernel ×2
scripting ×2
sort ×2
system-calls ×2
arch-linux ×1
awk ×1
bash ×1
bluetooth ×1
c ×1
cat ×1
cifs ×1
compiling ×1
gcc ×1
hardware ×1
iptables ×1
ksh ×1
linux ×1
mac-address ×1
mount ×1
networking ×1
openssl ×1
path ×1
perl ×1
permissions ×1
posix ×1
reboot ×1
routing ×1
sed ×1
smb ×1
symbol-table ×1
tcsh ×1
umask ×1
usb-device ×1