对于一个相对较新但并非全新的*nix用户来说,有没有什么好书可以让他获得更深入的知识(所以没有“傻瓜Linux”)?在大多数情况下,我不是在寻找自始至终都要通读的东西。更确切地说,当我需要知道如何做某件事,或者每当我有“我该如何再做一次?”的时候,我宁愿有一些我可以挑选并分块阅读的东西。我希望看到的一些方面是:
命令行管理
bash脚本
编程(尽管我想要的不仅仅是与C程序员相关的东西)
我希望它尽可能独立于平台(这意味着它有与任何linux发行版以及BSD、Solaris、OS X等相关的信
比如:
scp -r all_directories_in_current_directory fenix@xxxxx:~/data
任何人都可以给我一个线索吗?使用rsync而不是thsnscp,例如
$ rsync -av ./ fenix@xxxxx:data/
如果只需要目录,而不需要当前目录中的文件:
scp -r */ fenix@xxxxx:~/data
这不会复制隐藏的(名称以开始)目录。执行NFS装载,并且执行cp-avx不与编程相关-属于超级用户。那么,当您执行上述操
在bash中,如何使这样的构造工作:
if (cp /folder/path /to/path) && (cp /anotherfolder/path /to/anotherpath)
then
echo "Succeeded"
else
echo "Failed"
fi
if应该测试$?返回每个命令的代码,并将它们与&&绑定
我怎样才能在Bash中制作这个
if cp /folder/path /to/path /tmp && cp /anotherf
apt get或yum的Suse版本是什么
如何从命令行安装软件包
Google的一次相当激烈的讨论表明可能是yast或yast2,但似乎不存在从命令行列出和安装软件包的合理方法。(也许我找错地方了)
如果我是远程Suse服务器的管理员,如何从命令行安装软件包?(不使用GUI,最好从中央回购安装)zypper
是的,这就是答案。有趣的是,这并没有得到更广泛的宣传。但很好,谢谢,这为我指明了正确的方向。@edvaldig请检查一下为什么像这样的链接式答案对未来的读者帮助不大。根据我自己的经验,如
我们有一个linux应用程序(我们没有源代码)似乎挂起了。两个进程之间的套接字被报告为已建立,内核套接字缓冲区中有一些数据(尽管与通过wmem/rmem配置的16M相差甚远)。套接字的两端似乎卡在sendto()上
以下是使用netstat/lsof和strace进行的一些调查:
主持人A(10.152.20.28)
[root@hosta~]#lsof-n-u df01 | grep 12959 | grep 12u
q 12959 df01 12u IPv4 4398449 TCP 10.1
标签: Linux
handlersleepsignalssigbus
我正在查看一个嵌入式MIPS Linux应用程序的内核转储。GDB正在报告SIGBUS,处理该信号的线程似乎位于nanosleep的系统调用中——更高级别的代码基本上称为sleep(verylongtime);
假设另一个进程没有向应用程序发送该信号,那么是什么导致该线程像这样被唤醒?内核中有什么东西产生了总线错误吗?这可能是由于另一个线程阻止了这些信号造成的吗?(请原谅我的天真,我对信号不太了解)。谢谢。如果si_pid设置为地址,这意味着您的SIGBUS是由程序中的故障引发的。通常,当内核试
好吧,这也许是最简单(或最愚蠢)的问题,但我只是想知道
假设我有一个包含账号和余额的文本文件。我正在编写一个程序,使用输入的账号搜索文件,并用新余额更新同一文本文件中的余额字段。
我发现使用文件流实现这一点非常困难。问题是我试图用一个新的余额字符串覆盖所述文本文件中的余额字符串
因此,如果余额是1000(4位),我可以用另一个4位字符串覆盖它。但是,如果新的余额字符串超过4位,它将覆盖余额字段后的数据(请注意,这是一个简单的文本文件…)。
例如,如果文本文件包含
Acc. No.
我正在尝试这样做,我需要从4个刀片服务器获取备份
所有数据都应存储在/home/backup/esa位置下,该位置包含4个
具有节点名称的目录(如sc-1、sc-2、pl-1、pl-2)。每个
目录应包含各自节点的备份信息
但是我看到“我从哪个节点执行命令,只有数据被保存。”
复制到所有4个目录”。知道为什么会这样吗?我的剧本是这样的:
for node in $(grep "^node" /cluster/etc/cluster.conf | awk '{print $4}');
do ech
我已经编写了一个服务器,它接受辅助端口上的套接字连接,以便将调试信息流式传输到stderr。第二个端口(错误服务端口)一次只能有一个连接,这很方便,因为它允许我使用dup2(2)调用重定向stderr。(见附件)
以下代码在各方面都几乎令人满意。当客户端登录到端口时,stderr流被定向到套接字。当另一个客户端登录时,流再次重定向,第一个客户端停止接收:完全满意
设计中的不足之处在于,当客户端关闭连接时,服务器崩溃,因为它试图write()写入已关闭的套接字
我已经为正常的子进程提供了一个基本的
我在写shell脚本时遇到了一个问题。是否有办法使用用户指定的文本编辑器打开文件?用户选择的编辑器应位于$editor中,但您仍必须选择一个正常的默认编辑器
"${EDITOR:-vi}" file.txt
Ignacio是正确的(尽管可以说,后备方案应该是ed,POSIX要求它存在,尽管它基本上只对老员工有用)
如果您正在考虑使用图形编辑器,xdg open file.txt就是您想要的。注意:xdg open file.xml很可能会在Web浏览器中打开。
所以,试试看
您可能想做更多的回
我已经为GNU/Linux开发了一个使用OpenSSL库的应用程序。该应用程序应该同时在基于Debian和Red Hat的发行版中运行
确保用户系统安装OpenSSL库的最佳策略是什么?对于特定版本的OpenSSL,我应该包含对.deb或.rpm的依赖关系吗?我如何处理使用较旧版本的OpenSSL(如0.9.8)的系统,以及使用1.0.0的较新版本的系统?还是最好静态链接它
谢谢你,Ubuntu使用Debian软件包(.deb),RedHat使用RPM。您至少需要创建两个不同的规范文件来为这两个
我正在尝试编写一个脚本,在单个脚本中执行下面的步骤
例如:
bash-3.00$ isql -Ufw -Pframesa -Dcsmain -w2000
1> select * from UserLogin where UserName ='EPRTUBD'
2> go
UserName Password
我试图执行由zc.buildout自动生成的python脚本,所以我无法控制它们。我的问题是shebang行(#!)对于bash(80个字符的限制)或直接执行(一些我不知道的Linux内核常量)来说太长
这是一个帮助您重现我的问题的示例脚本:
#!/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
我有一个shell脚本,需要在其中检查两个文件是否包含相同的数据。我对很多文件都这样做,在我的脚本中,diff命令似乎是性能瓶颈
这是一句话:
diff -q $dst $new > /dev/null
if ($status) then ...
是否有一种更快的方法来比较文件,也许是一种自定义算法,而不是默认的diff?我相信cmp将在第一个字节差异处停止:
cmp --silent $old $new || echo "files are different"
对于没有不同的文件
我想这可能是一个奇怪的问题,但我有一个小EC2实例,每个月都要花费相当大的一笔钱。但它是每小时收费的,所以我只在需要时打开这个特定实例,完成后关闭它
这个实例的目的是托管一个反击:全球进攻专用服务器,只有当我有一个scrim要玩时,我才打开它
我没有忘记关闭它,也没有忘记充电,也没有忘记编写一个不智能的启动脚本,要求实例在3小时后关机,而是考虑了一个更智能的设计
这是我的想法;实例在感觉到它不再使用时智能地关闭自己,方法是确定UDP 27015上的一定数量的网络活动是否在过去10分钟内没有被记录
我正在阅读Robert Love的“Linux内核开发”,我偶然发现了以下段落:
不(容易)使用浮点
当用户空间进程使用浮点指令时,内核管理从整数模式到浮点模式的转换。内核在使用浮点指令时必须做的事情因体系结构而异,但内核通常会捕获一个陷阱,然后启动从整数模式到浮点模式的转换
与用户空间不同,内核没有对浮点的无缝支持,因为它无法轻松捕获自身。在内核中使用浮点需要手动保存和恢复浮点寄存器,以及其他可能的琐事。简单的回答是:不要这样做!除了极少数情况外,内核中没有浮点操作
我从未听说过这些“整数”和
如果行以另一个字符串开头,如何使用sed替换文件中的字符串
例如,替换此行:
connection = sqlite://keystone:[YOURPASSWORD]@[YOURIP]/keystone
connection = mysql://keystone:password@10.1.1.10/keystone
这一行:
connection = sqlite://keystone:[YOURPASSWORD]@[YOURIP]/keystone
connection = mysq
在:上有一篇文章描述了Linux内核循环缓冲区的实现。我有一些问题:
以下是“制作人”:
问题:
由于这段代码显式地处理内存顺序和原子性,因此spin_lock()的作用是什么
到目前为止,我的理解是ACCESS_一旦停止编译器重新排序,对吗
是否生成_项(项)只是发出与该项关联的所有写入操作
我相信smp_wmb()可以保证product_item(item)中的所有写入都在随后的“发布”写入之前完成。是吗
我获取此代码的页面上的注释似乎暗示smp_wmb()将
通常在更新头部索引后需要,但唤
我是操作系统的新手,
那么,我想知道Linux中的pthread_create(标准化接口)是什么?
它创建了什么类型的线程?用户级线程还是内核级线程?辩护 Linux中的PThreads提供内核级线程,而不是用户级线程
如果您查看pthreads的手册页,这一点很明显:(查找单词Both):
两种线程实现都使用Linux克隆(2)系统调用
在此上下文中,“两者”一词指的是现在不受支持的LinuxThreads实现,以及glibc中较新的NPTL(本机POSIX线程库)
另请参阅以了解Linux
我想写的shell脚本是
下载一个tarball和stdout到tar以解压缩它
同时解析在stderr上找到的http头
将#2处的解析结果设置为变量
对于#1:
我启用了-S选项,该选项显示服务器对stderr的响应,我想为字符串提交哈希解析一点头,并将其设置为名为$rev
$ rev=$(wget -Sq -O /dev/null "https://api.github.com/repos/est/est/tarball/master" 2>&1 | grep "Conten
我的命令是这样的:
echo "12 cats" | sed 's/[0-9]+/Number/g'
(我正在香草Mac中使用sed)
我预计结果是:
Number cats
然而,真正的结果是:
12 cats
有人对此有想法吗?谢谢 +必须反斜杠才能获得其特殊含义
echo "12 cats" | sed 's/[0-9]\+/Number/g'
扩展+修饰符对我很有用:
echo "12 cats" | sed 's/[0-9][0-9]*/Number/g'
另外,-E开关将使
我想使用linux系统调用编写一个非常简单的宏:
%macro hello_macro 1
section .rodata
%%string1: dd "hello: ",0
section .bss
%%string2: resd 1
section .text
;global %%_start1
%%_start1:
mov dword[%%string1],%1 ;mov argument to string
;system call write in stdout
mov e
这是my.bashrc文件的内容:
PATH=/kunden/xxx/rp-hosting/xxx/xxx/bin:$PATH
/kunden/xxx/rp hosting/xxx/xxx/bin目录中有composer的可执行版本
我在/kunden/xxx/rp hosting/xxx/xxx/dev.xxx.de/symfony中放置了一个composer.json文件。但当cd转到该目录并运行composer update时,我得到以下错误:
Composer could not fi
我创建了一个名为“”的文件,有人知道如何删除它吗
似乎是这样?是linux中的一个特殊字符,我使用Redhat作为我的操作系统
我已经试过了
rm ?
rm "?"
rm \?
它们都失败了,我得到的错误表明该文件不存在。使用此rm命令删除名为?的文件:
rm ./\?
或从另一个目录:
rm /path/to/\?
查找文件的索引节点:
ls -li
然后使用inode删除该文件:
find . -inum <inode-number> -exec
我有
为什么这会给出0个匹配项
$ ls -l re*trict
ls: cannot access re*trict: No such file or directory
不过,这是可行的,并提供了8351个匹配项:
$ locate -c 're*trict'
0
$ locate -c re*trict
0
$ locate -c re?trict
0
locate与完整路径名匹配。要将re*trict作为子字符串查找,必须在其前后添加*:
$ locate -c restrict
8
在我发出mpirun命令之后,我想获取这个进程的pid,以便以后可以终止这个进程。如何做到这一点,而不必在mpirun命令末尾添加“&”以将其发送到后台
其他条件是计算机上可能有多个mpirun进程运行。您可以使用“ps”获取pid
ps -A | grep process-name
这种语法在Ubuntu上非常有效,但我不知道它是否适用于其他发行版。它返回(至少)两个不同的行:一个包含当前搜索进程的pid,另一个包含正在搜索的进程的pid。程序PID只是列表的第二列
您可以运行manps或p
我有一个centos vps服务器。我想在我的服务器上安装web浏览器,并从已安装的web浏览器浏览网站。有可能吗。如果可能的话,请帮我分享你的想法。谢谢这样做有几种可能:
安装完整的图形环境,然后
a。使用X-Forwarding并在远程服务器上运行浏览器
b。使用远程桌面/VNC远程连接到服务器
安装代理服务器并代理您的web浏览
安装VPN服务器并将计算机连接到VPN
在最后两个选项中,您将在本地计算机上运行浏览器,但您的网络流量将通过服务器传出,因此您将看起来来自服务器的IP地址
我想在NASM(Linux)中添加两位数。要添加两个简单的数字,我使用以下代码:
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov eax,'3'
sub eax, '0'
mov ebx, '4'
sub ebx, '0'
add eax, ebx
我的代码有一个用户模式映射(通过mmap()设置),在从CPU写入之后,但在通过DMA底层物理内存调度数据之前,我需要刷新该映射。此外,我还需要在数据通过DMA到达底层物理内存之后,但在我尝试用CPU读取之前,使缓存失效
在我看来,“缓存刷新”和“缓存失效”意味着两件不同的事情。大致上,“缓存刷新”意味着将缓存中的内容写入内存(或者简单地说,缓存数据进入内存),而“缓存失效”意味着随后假设所有缓存内容都已过时,以便从该范围读取的任何尝试都将引发从内存的新读取(或者简单地说,内存数据进入缓存)
但
如果编译C文件时向GCC提供了默认选项(-g),如何从Linux上的可执行文件转储debug_loc节?我使用readelflinux实用程序
默认情况下,GCC生成DWARF4格式的DWARF信息,因此如果我通过-g-dwarf2,我可以看到.debug_loc部分,但是如果信息是使用默认选项生成的,因为我在转储中没有看到该部分,那么如何检查该部分?是否使用最新版本的binutils?在Ubuntu 14.04上,我可以用“gcc-g test.c-o test”构建可执行文件
通过“read
我有如下数据(以制表符分隔):
我要做的是删除第3列中每一行的C,标题行除外:
Organ K ClustNo Analysis
LN K200 12 Gene Ontology
LN K200 116 Gene Ontology
CN K200 2 Gene Ontology
sed 's/C//'
这样做不行,因为它会影响其他列和标题行:
Organ K ClustNo Analysis
LN K200 12
Shell/Bash或Perl中是否有一个命令可以重命名文件夹中的所有文件
在中,计数器保持不变,但我也想更换计数器
我要查找的是我的文件夹中具有以下命名约定的文档:
smith_welding_<XXXXXX>.jpg
是否有任何命令可以帮助我执行上述操作?您可以轻松地执行以下操作:
i=0; for image in *.jpg; do mv "$image" "smith_welding_`printf "%.5d"`$i.jpg"; ((i++)); done
输出:
我不知道如何在linux中从命令终端启动mule esb,而不一直调用包装器,这迫使我保持终端的活动状态
我实际上可以使用这个简单的命令(从bin目录):
/骡子
无论如何,如果我需要传递一个参数,如下所示:
/骡子-Denv=产品
它一直以前景模式启动
如何从参数开始实现背景
谢谢 刚刚尝试过:/mule start在后台使用params工作(如果需要)。然后可以停止运行/mule stop。HTH.Mule将由位于Mule\u HOME/bin/Mule的脚本处理。此脚本支持start |
我通常使用升华文本编辑JavaScript文件,在那里我可以使用Ctrl+Shift+7 |/切换注释
现在我正在尝试VSCode,这是一个伟大的项目。但我无法切换每个快捷方式的评论。文件上说:,但这不起作用
有什么建议吗
我正在将Ubuntu 14与Gnome一起使用。您可以使用CTRL+#CTRL+K切换注释,然后使用CTRL+C进行注释,CTRL+K然后使用CTRL+U取消注释。适用于Gnu/Linux Ubuntu12.04 LTS Gnome…Tipp:按F1键并键入您要查找的命令的
我有一个完全修补的15.04安装,并做了do版本更新。这是一个有一个受欢迎的美国主机的虚拟机,我有根,并在这台机器上执行了早期的类似升级,没有任何问题。在更新结束时,有人建议我像往常一样重新启动,所以我只输入了“reboot”,但只收到标题中的消息,并在提示下返回
我可以访问这个容器,所以我想我应该从那里重新启动——这是一个严重的错误:在关闭之后,什么都没有出现,我甚至无法使用SSH。技术支持人员“对MySQL做了些什么”(很抱歉含糊其辞,这就是我所知道的),我现在就回来了。然而,我认为我又回到
使用exec命令运行程序与不运行程序有什么区别
例如,如果我制作了一个脚本文件,如下所示
#script1
python test.py
#script2
exec python test.py
两者似乎返回相同的结果
它们是等效的吗?exec是一个内置的shell,它用新进程替换当前进程的映像。这与调用二进制/可执行文件不同
要查看差异,请执行以下操作:
#script1
python test.py
echo Hello
#script2
exec python test.py
ech
如何同时运行find和cp命令?我试过这个:
find -name "*pdf*" | xargs cp $1 ./
但它不起作用。使用-exec选项:
find ./ -name "*pdf*" -exec cp -t . {} \+
{}将替换为当前正在处理的文件名
从查找的手册页中:
-exec命令{}+
…命令行是通过在末尾附加每个选定的文件名来生成的。。
命令行的构建方式与xargs构建其命令行的方式大致相同
注意使用了-t(目标目录)选项(它是GNU扩展)。我们不能使用-exec
运行htop命令将以如下格式显示内存使用情况:
1.92G/5.83G
问题:我应该如何解释取自/proc/meminfo的值,以便以编程方式计算所使用的内存
我正在寻找类似的东西:这意味着伪代码是可以的,我不需要可以编译的东西,只需要逻辑。htop的源代码是一个可以查找的地方,但我没有幸运地发现为此编写的代码行
$ cat /proc/meminfo
MemTotal: 6110716 kB
MemFree: 2076448 kB
MemAvailable:
我有一个nodemon在开发中的docker容器中运行。我已成功设置了代码更改时的实时重新加载
然而,有时我会在nodemon崩溃的地方编写一些代码。当您键入“rs”(在本地运行时)时,可以手动重新启动Nodemon
问题是,在docker容器中,我无法让它重新启动
我尝试了以下方法,但没有成功:
docker exec-它添加92J rs=>找不到rs
docker exec-it add92j sh-c echo rs=>只需echo rs
我还尝试了docker-attach,然后键入rs
我对编写Makefile几乎是新手,所以很抱歉可能会犯一些小错误。
即使源代码中没有任何更改,我的Makefile也会继续重新编译可执行文件(.out)。
目标对其他对象有一些依赖关系。无论如何,这些对象不会重新编译相对的源文件(就像它应该的那样)。
那么为什么目标重新编译.out文件呢
任何其他建议都将不胜感激
# -*- Makefile -*-
CC:= nvcc
CFLAGS:= -std=c++14 -g -DMEASURES
ALLFLAGS:= $(CFLAGS) -Iinclu
在学习了f#之后,我还想用f#替代shell(bash,sh)脚本。
有没有人有使用f#的经验
是否存在具有以下功能的f#Linux系统库:
ismountpoint(路径)
进程列表
基尔进程
其他系统接口功能
据我所知,Linux没有特定的库,但您可以使用下面的System.Diagnostics来获取进程和终止(小心):
Linux和Windows中都存在一些系统api函数,因此这些函数可以正常工作。对于缺少的部分,我必须围绕Linux系统命令(可执行程序,如mountpoint)使用.
我正在尝试使用linux上柯南中心的boost库配置一个项目。
为了在较小的环境中测试我的问题,我创建了一个项目,您可以对其进行测试
我正在测试
ubuntu 18.04
柯南1.24.0
boost 1.72.0
我的conafile如下所示:
[requires]
boost/1.72.0
[options]
boost:shared=True
[generators]
cmake
[imports]
bin, *.dll -> ./bin
lib, *.dylib* -&
我需要在AWS secrets Manager中存储多个密钥/键值(大约200个密钥),我不想从AWS secrets Manager控制台手动输入每个密钥/键值。尽管我做了一些研究,从AWS文档中发现我可以创建一个JSON文件,在其中我可以写入所有密钥/值,然后将该文件传递给AWS Secrets manager命令:
aws secretsmanager create-secret --name MyTestDatabaseSecret \
--description "My test da
是否可以导出\u SYMBOL()包含kmalloc数组的结构?如果是,我需要记住哪些事情
这是我想做的一个伪代码
struct测试{
INTA;
...
uint64_t*数据;
}
结构测试foo;
出口标志(foo);
...
在module1\u kthread1\u func()中,我有:
int module1\u kthread1\u func(void*foo){
...
foo->data=kmalloc(大小,GFP_内核);
...
foo->data[var]=1243
当选择当前正在进行的工作分支时,GitKraken显示两种类型的文件:“未分级文件”和“分级文件”。很多时候,有大量的文件列在“unstage”下,甚至只有少数文件真正处于源代码控制之下;文件大多未经跟踪
是否可以过滤掉“未跟踪”的文件,只显示跟踪(但修改)的文件?Gitkraken的“未老化文件”区域无法完全关闭未跟踪的文件,但它会尊重您的.gitignore。在repo的根目录下创建一个名为.gitignore的文件,并添加您知道不想跟踪的文件或文件夹的名称
通常,大多数人使用git的方式是
因此,我对Linux的使用相当陌生,我想知道是否有任何方法可以使用findcommando在某个位置找到一个文件,然后通过管道将它打印出来(使用catcommando)您在屏幕上找到的文件的内容
我一直在尝试下面的方法,但没用。有人能帮我吗
find / -name hello.txt -type f 2>>/dev/null | cat hello.txt
这仅打印hello.txt文件的文件位置;
/home/user/exam/hello.txt但是如何打印文件的内容呢。我是
我正试图写一个脚本,发送包含日志消息的电子邮件
首先,我安装了ssmtp,并配置了/etc/ssmtp/ssmtp.conf,如下所示:
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=myname@gmail.com
# The place where the mail g
假设我的二进制文件在一个客户站点上运行,在那里我无法使用ulimit-c启用core dump生成。在这样的现实场景中,工程师如何调试分段错误?有没有其他方法可以调试或识别没有生成核心转储的崩溃。在过去,我曾多次遇到这种限制。必须调查分段故障,或者更一般地说,异常进程终止,并警告核心转储不可用
对于本演练选择的Linux平台,我想到了几个原因:
核心转储生成被完全禁用(使用limits.conf或ulimit)
目标目录(当前工作目录或/proc/sys/kernel/core_pattern
对不起,我的母语不是英语,我会尽力描述我的问题
打开此类型的两个端子
~$sudo unshare-m/bin/bash
并安装usb设备
~#mount/dev/sdb1/mnt/usb
sdb1是我的usb接口
我有两个终点站
在终端1类型中
~#日期| sudo-tee/mnt/usb/test
2号航站楼类型
~#cat/mnt/usb/test
您可以在终端2中对该文件进行cat
我可以使终端2看不到此sdb1 usb设备上的终端1更改吗?
如何做到这一点?
多谢各位
我正在AWS ECS上运行我的tomcat应用程序,当sudeen我的CPU触摸100%时,我面临问题。在执行htop命令后,我发现一个进程kthreaddi正在使用所有CPU,如屏幕截图所示
我尝试了一些Aproach,比如在图像创建期间获取更新,但问题仍然存在
有人能建议我在这里可以实施什么吗
这里是cat/etc/os版本的输出
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux