Command-Line
nautilus 和命令行命令是否相同?
當我在 Nautilus 中複製、移動或刪除文件或使用相應的命令(cp、mv 或 rm)時,相同的工具是否會執行包裝後的操作?
我問是因為 nautilus 往往會掛在大文件或太多文件上。我的印像是效率不高。
不,它不只是呼叫
cp
,mv
等。相反,它呼叫 GTK+ 庫,該庫包含圍繞也包含函式的 C/C++ 系統庫的包裝函式。正是這些 C/C++ 函式在 Nautilus 和諸如 、 等命令之間
cp
共享mv
。例子
您可以使用系統跟踪工具
strace
附加到正在執行的nautilus
程序,如下所示:$ strace -Ff -tt -p $(pgrep nautilus) 2>&1 | tee strace-naut.log
現在,如果我們在 Nautilus 中執行一些操作,我們將看到正在執行的系統呼叫。這是文件複製/粘貼期間的日誌樣本
/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz
。[pid 25897] 22:28:36.909183 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", {st_mode=S_IFREG|0664, st_size=16090900, ...}) = 0 [pid 25897] 22:28:36.909259 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", R_OK) = 0 [pid 25897] 22:28:36.909302 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", W_OK) = 0 [pid 25897] 22:28:36.909339 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", X_OK) = -1 EACCES (Permission denied) [pid 25897] 22:28:37.580109 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", {st_mode=S_IFREG|0664, st_size=16090900, ...}) = 0 [pid 25897] 22:28:37.580169 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", R_OK) = 0 [pid 25897] 22:28:37.580215 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", W_OK) = 0 [pid 25897] 22:28:37.580249 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", X_OK) = -1 EACCES (Permission denied) [pid 26667] 22:28:39.222446 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", {st_mode=S_IFREG|0664, st_size=16090900, ...}) = 0 [pid 26667] 22:28:39.222981 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", {st_mode=S_IFREG|0664, st_size=16090900, ...}) = 0 [pid 26667] 22:28:39.223201 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", {st_mode=S_IFREG|0664, st_size=16090900, ...}) = 0 [pid 26667] 22:28:39.223304 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", {st_mode=S_IFREG|0664, st_size=16090900, ...}) = 0 [pid 26667] 22:28:39.223397 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", {st_mode=S_IFREG|0664, st_size=16090900, ...}) = 0 [pid 26667] 22:28:39.223444 open("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06.tar.gz", O_RDONLY) = 46 [pid 26667] 22:28:39.223658 open("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", O_WRONLY|O_CREAT|O_EXCL, 0664) = 47 [pid 25897] 22:28:39.235249 read(14, "\f\0\0\0\0\1\0\0\0\0\0\0000\0\0\0ULD_Linux_V1.00."..., 1024) = 96 [pid 26667] 22:28:39.388744 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", <unfinished ...> [pid 26667] 22:28:39.388853 chmod("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", 0100664 <unfinished ...> [pid 26667] 22:28:39.388959 stat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", <unfinished ...> [pid 26667] 22:28:39.389061 utimes("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", {{1388460519, 222672}, {1384901700, 0}} <unfinished ...> [pid 26667] 22:28:39.391274 lstat("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", <unfinished ...> [pid 26667] 22:28:39.391848 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", R_OK <unfinished ...> [pid 26667] 22:28:39.391955 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", W_OK <unfinished ...> [pid 26667] 22:28:39.392059 access("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", X_OK <unfinished ...> [pid 26667] 22:28:39.392734 lgetxattr("/home/saml/samsung_ml2165w_print_drivers/ULD_Linux_V1.00.06 (copy).tar.gz", "security.selinux" <unfinished ...>
系統呼叫、
lstat
、access
、open
、read
等是通用的較低級別的呼叫。