内核如何在运行时自我更新而不破坏过程中的任何内容?
为什么写在一行上时,shell循环中没有;
字符?do
这就是我的意思。当写在多行上时,for
循环看起来像:
$ for i in $(jot 2)
> do
> echo $i
> done
在一行上:
$ for i in $(jot 2); do echo $i; done
除了该行之外,所有折叠的行都;
在它们之后得到一个,如果你包含,这是一个错误。可能比我聪明得多的人认为这是正确的做法是有原因的,但我不知道原因是什么。对我来说似乎不一致。do
;
while
循环也一样。
$ while something
> do
> anotherthing
> done
$ while something; do anotherthing; done
首先是一些规格:我的电脑是 HP EliteBook 8460p。它带有一个集成的 Chicony HP 高清网络摄像头。
我的问题是很多应用程序(至少是 Skype 和 guvcview)为同一个网络摄像头显示多行;事实上,如果我这样做ls -l /dev | grep video
,我会得到以下信息:
crw-rw---- 1 root video 29, 0 Apr 16 08:13 fb0
crw-rw---- 1 root video 243, 0 Apr 16 08:13 media0
crw-rw----+ 1 root video 81, 0 Apr 16 08:13 video0
crw-rw----+ 1 root video 81, 1 Apr 16 08:13 video1
我有 2 个/dev/video[n]
,只有一个(集成)网络摄像头;Skype 可以正常工作/dev/video0
,但不能正常工作/dev/video1
。guvcview 也一样。
如果我插入另一个 USB 网络摄像头,例如罗技网络摄像头,我会得到以下信息dmesg
:
[21222.638802] usb 2-2: new high-speed USB device number 20 using xhci_hcd
[21222.970684] usb 2-2: New USB device found, idVendor=046d, idProduct=08c2, bcdDevice= 0.05
[21222.970755] usb 2-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[21222.972518] uvcvideo: Found UVC 1.00 device <unnamed> (046d:08c2)
[21226.044535] uvcvideo 2-2:1.0: Entity type for entity Extension 4 was not initialized!
[21226.044538] uvcvideo 2-2:1.0: Entity type for entity Extension 8 was not initialized!
[21226.044540] uvcvideo 2-2:1.0: Entity type for entity Extension 10 was not initialized!
[21226.044541] uvcvideo 2-2:1.0: Entity type for entity Extension 9 was not initialized!
[21226.044543] uvcvideo 2-2:1.0: Entity type for entity Extension 3 was not initialized!
[21226.044545] uvcvideo 2-2:1.0: Entity type for entity Processing 2 was not initialized!
[21226.044547] uvcvideo 2-2:1.0: Entity type for entity Camera 1 was not initialized!
[21226.044746] input: UVC Camera (046d:08c2) as /devices/pci0000:00/0000:00:1c.7/0000:25:00.0/usb2/2-2/2-2:1.0/input/input35
[21226.137559] usb 2-2: Warning! Unlikely big volume range (=3072), cval->res is probably wrong.
[21226.137569] usb 2-2: [5] FU [Mic Capture Volume] ch = 1, val = 4608/7680/1
以下是ls -l /dev/ | grep video
:
crw-rw---- 1 root video 29, 0 Apr 16 08:13 fb0
crw-rw---- 1 root video 243, 0 Apr 16 08:13 media0
crw-rw---- 1 root video 243, 1 Apr 16 14:06 media1
crw-rw----+ 1 root video 81, 0 Apr 16 08:13 video0
crw-rw----+ 1 root video 81, 1 Apr 16 08:13 video1
crw-rw----+ 1 root video 81, 2 Apr 16 14:06 video2
crw-rw----+ 1 root video 81, 3 Apr 16 14:06 video3
3 个新条目/dev/media1
:/dev/video2
和/dev/video3
。
我什至发现了一个索尼网络摄像头 (CEVCECM),它最多可以添加 4 个新设备。dmesg
日志:
[21927.665747] usb 2-2: new high-speed USB device number 23 using xhci_hcd
[21927.817330] usb 2-2: New USB device found, idVendor=05e3, idProduct=0608, bcdDevice= 9.01
[21927.817339] usb 2-2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[21927.817343] usb 2-2: Product: USB2.0 Hub
[21927.824119] hub 2-2:1.0: USB hub found
[21927.824814] hub 2-2:1.0: 4 ports detected
[21928.113733] usb 2-2.4: new high-speed USB device number 24 using xhci_hcd
[21928.223184] usb 2-2.4: New USB device found, idVendor=054c, idProduct=097b, bcdDevice=21.12
[21928.223192] usb 2-2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[21928.223197] usb 2-2.4: Product: CEVCECM
[21928.223201] usb 2-2.4: Manufacturer: Sony
[21928.223206] usb 2-2.4: SerialNumber: DHZD10412EUHK1
[21928.227506] uvcvideo: Found UVC 1.00 device CEVCECM (054c:097b)
[21928.242592] uvcvideo: Unable to create debugfs 2-24 directory.
[21928.242780] uvcvideo 2-2.4:1.0: Entity type for entity Extension 7 was not initialized!
[21928.242783] uvcvideo 2-2.4:1.0: Entity type for entity Extension 3 was not initialized!
[21928.242785] uvcvideo 2-2.4:1.0: Entity type for entity Processing 2 was not initialized!
[21928.242787] uvcvideo 2-2.4:1.0: Entity type for entity Camera 1 was not initialized!
[21928.242877] input: CEVCECM: CEVCECM as /devices/pci0000:00/0000:00:1c.7/0000:25:00.0/usb2/2-2/2-2.4/2-2.4:1.0/input/input38
生成的设备文件包含ls -l /dev | grep video
:
crw-rw---- 1 root video 29, 0 Apr 16 08:13 fb0
crw-rw---- 1 root video 243, 0 Apr 16 08:13 media0
crw-rw---- 1 root video 243, 1 Apr 16 14:18 media1
crw-rw----+ 1 root video 81, 0 Apr 16 08:13 video0
crw-rw----+ 1 root video 81, 1 Apr 16 08:13 video1
crw-rw----+ 1 root video 81, 2 Apr 16 14:18 video2
crw-rw----+ 1 root video 81, 3 Apr 16 14:18 video3
crw-rw----+ 1 root video 81, 4 Apr 16 14:18 video4
crw-rw----+ 1 root video 81, 5 Apr 16 14:18 video5
5 个新条目:/dev/media1
和/dev/video2
到/dev/video5
.
我觉得要使用的文件是正确/dev/media[n]
的,但 Skype 和 guvcview 不知何故未能这样做并回退到/dev/video[n]
.
例如,我对 Webcamoid 没有这个问题。
如果有人有想法,我会接受。与此同时,我将继续调查......
--- 编辑了 2019-05-14 ---
得到了一些有趣的信息v4l2-ctl --device=/dev/video* --all
。对于群光惠普高清网络摄像头,其 2 个设备文件具有不同的设备功能:
# Devices capabilities for /dev/video0
Video Capture
Streaming
Extended Pix Format
# Devices capabilities for /dev/video1
Metadata Capture
Streaming
Extended Pix Format
对于 USB 网络摄像头,我得到了类似的结果。所以说到底,也许 Skype 和 guvcview 做不到的就是只列出支持Video Capture
设备功能的视频设备。
我想尝试 cgroup v2 但不确定它是否安装在我的 linux 机器上
>> uname -r
4.14.66-041466-generic
由于 cgroup v2 在 4.12.0-rc5 中可用,我认为它应该在我使用的内核版本中可用。
https://www.infradead.org/~mchehab/kernel_docs/unsorted/cgroup-v2.html
但是,我的系统似乎没有 cgroup v2,因为其文档中提到的内存接口文件在我的系统上不可用。
https://www.kernel.org/doc/Documentation/cgroup-v2.txt
好像我还有 cgroup v1。
/sys/fs/cgroup/memory# ls
cgroup.clone_children memory.kmem.failcnt memory.kmem.tcp.usage_in_bytes memory.memsw.usage_in_bytes memory.swappiness
cgroup.event_control memory.kmem.limit_in_bytes memory.kmem.usage_in_bytes memory.move_charge_at_immigrate memory.usage_in_bytes
cgroup.procs memory.kmem.max_usage_in_bytes memory.limit_in_bytes memory.numa_stat memory.use_hierarchy
cgroup.sane_behavior memory.kmem.slabinfo memory.max_usage_in_bytes memory.oom_control notify_on_release
docker memory.kmem.tcp.failcnt memory.memsw.failcnt memory.pressure_level release_agent
memory.failcnt memory.kmem.tcp.limit_in_bytes memory.memsw.limit_in_bytes memory.soft_limit_in_bytes tasks
memory.force_empty memory.kmem.tcp.max_usage_in_bytes memory.memsw.max_usage_in_bytes memory.stat
后续问题 感谢 Brian 的帮助。如果我应该创建一个新问题,请告诉我,但我认为如果我只是在这里问我的问题可能对其他人有帮助。
1) 我无法按照文档中的命令添加 cgroup 控制器
>> echo "+cpu +memory -io" > cgroup.subtree_control
但是,我得到“回声:写入错误:无效参数”。我是否缺少此步骤的先决条件?
2) 我运行了一个 docker 容器,但 docker 守护进程日志抱怨找不到“/sys/fs/cgroup/cpuset/docker/cpuset.cpus”。似乎 docker 仍在期待 cgroupv1。在我的 docker 守护程序上启用 cgroupv2 支持的最佳方法是什么?
docker -v
Docker version 17.09.1-ce, build aedabb7
来自https://unix.stackexchange.com/a/458074/674
请记住
--
在将任意参数传递给命令时使用(或在可能的情况下使用重定向)。所以sort -- "$f1"
或更好sort < "$f1"
而不是sort "$f1"
.
为什么首选使用--
和重定向?
为什么sort < "$f1"
优先于sort -- "$f1"
?
为什么 sort -- "$f1"
优先于sort "$f1"
?
谢谢。
Python 包经常托管在许多发行版的存储库中。阅读本教程后,特别是标题为“你真的想这样做”的部分后,我避免使用 pip,而是更喜欢使用系统存储库,只有当我需要安装不在存储库中的包时才使用 pip。
但是,因为这是一种不一致的安装方式,所以只使用pip会更好吗?对于在两个地方都可用的软件包,在系统自己的存储库上使用 pip 有什么好处/反对者?
我包含的链接状态
始终使用标准 Debian / NeuroDebian 软件包的优势在于,这些软件包都经过仔细测试以相互兼容。Debian 软件包记录了与其他库的依赖关系,因此您将始终获得所需的库作为安装的一部分。
我用拱门。除了 apt 之外的其他包管理系统是否也是这种情况?
是否可以调用下面在 bash 中声明的函数?
例子
if [ "$input" = "yes" ]; then
YES_FUNCTION
elif [ "$input" = "no" ]; then
NO_FUNCTION
else
exit 0;
fi
YES_FUNCTION()
{
.....
.....
}
NO_FUNCTION()
{
.....
.....
}
我发现在我的根目录下,有一些目录具有相同的 inode 号:
$ ls -aid */ .*/
2 home/ 2 tmp/ 2 usr/ 2 var/ 2 ./ 2 ../ 1 sys/ 1 proc/
我只知道目录的名称保存在父目录中,而它们的数据保存在目录本身的inode中。
我在这里很困惑。
这就是我在跟踪路径名 /home/user1 时的想法。
- 首先,我进入 inode 2,它是包含目录列表的根目录。
- 然后我发现名称 home 与 inode 2 配对。
- 所以我回到磁盘找inode 2?
- 我在这里得到了 user1 这个名字?