标签: linux

构建环境隔离和文件系统差异

好的,所以在试图追踪第n次各种软件的依赖关系并复制各种人为所有不同的linux发行版做的工作后,我想知道是否有更好的方法来捆绑各种软件到.rpm或.deb文件中以便于分发.

我目前为此做的设置是各种工具的frankenstein怪物,但主要是Vagrant和libguestfs,它们是在Fedora中运行的源代码构建的,因为没有任何发行版实际发布它virt-diff.以下是我目前遵循的步骤:

  1. 使用Vagrant框或通过Live CD创建一个OS来启动基本操作系统.
  2. 导出.vmdk并调用它base-image.
  3. 旋转上一张图像的精确副本并前往城镇:使用包管理器或其他方法下载,编译和安装我需要的所有部分.再一次,导出.vmdk并调用它non-base-image.
  4. 使两个基本映像可用于具有libguestfs的Fedora来宾操作系统.
  5. 使用virt-diff差异比较两个图像和转储数据文件调用diff.
  6. 运行几个ruby脚本按摩diff到另一种格式,其中包含我需要的信息,没有任何废话,我不喜欢的东西/var.
  7. 运行另一个脚本以guestfish使用一堆copy-out命令生成脚本.
  8. 运行guestfish脚本.
  9. 运行另一个脚本以重新生成符号链接,diff因为guestfish无法执行此操作.
  10. 将生成的文件夹结构转换为.deb或.rpm文件并发送.

我想知道是否有更好的方法来做到这一点.你认为会有,但我还没弄清楚.

linux debian build rpm isolation

8
推荐指数
1
解决办法
657
查看次数

GIT:无法推送(奇怪的配置问题)

我正在全新安装Linux Mint.

尝试从任何存储库推送时,我收到以下错误:

error: Malformed value for push.default: simple
error: Must be one of nothing, matching, tracking or current.
fatal: bad config file line 8 in /home/leng/.gitconfig
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我肯定有一个支持简单推送行为的版本.

输出git --versiongit version 1.8.3.2.

内容~/.gitconfig:

[user]
    name = My Name
    email = MyEmail@website.com
[color]
    ui = true
[push]
    default = simple
Run Code Online (Sandbox Code Playgroud)

这是令人毛骨悚然的地方.

如果我改变行为matching(或nothing,tracking或者current,对于这个问题),然后尝试推,我得到完全相同的错误消息.怎么可能?是以某种方式缓存配置?我甚至尝试重启.我甚至尝试从系统中彻底清除GIT(并删除~/.gitconfig)然后重新安装它.

如果我[push]从.gitconfig文件中完全删除该部分(或者如果我完全删除该文件),那么尝试推送,然后我得到:

Git 2.0 from …
Run Code Online (Sandbox Code Playgroud)

linux git linux-mint

8
推荐指数
1
解决办法
3782
查看次数

将stdout和stderr恢复为默认值

在shell脚本中,我们可以使用exec命令将默认输入更改为File,如下所示:

  exec 1>outputfile
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在同一个脚本中将stdout描述符'1'恢复为默认值(终端).我们怎样才能做到这一点?

linux shell redirect stdout exec

8
推荐指数
1
解决办法
3136
查看次数

mmap或malloc是否分配RAM?

我知道这可能是一个愚蠢的问题,但我一直在寻找一段时间,但无法找到明确的答案.如果我使用mmapmalloc(在C中,在Linux机器上)任何一个在RAM中分配空间?例如,如果我有2GB的RAM并且想要使用所有可用的RAM,我可以使用malloc/memset组合mmap,或者是否有另一种我不知道的选项?

我想编写一系列可以同时运行的简单程序,并保持进程中使用的所有RAM强制使用交换,并且频繁地交换页面.我已经尝试过以下程序,但这并不是我想要的.它确实分配内存(RAM?),并强制使用交换(如果有足够的实例正在运行),但是当我调用时sleep不会只是锁定内存被使用(因此实际上没有任何内容与其他内容进行交换)过程?),或者我误解了什么.

例如,如果我运行了3次,那么我将使用前两个实例中的2GB(全部)RAM,然后第三个实例会将前两个实例中的一个(RAM)和当前实例交换到RAM中吗?或者实例#3是否只使用磁盘或虚拟内存运行?

这提出了另一点,我是否需要分配足够的内存来使用所有可用的虚拟内存以及要使用的交换分区?

最后,将mmap(或任何其他C函数.地狱,甚至是另一种语言,如果适用)更好地做到这一点?

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

#define MB(size) ( (size) * 1024 * 1024)
#define GB(size) ( (size) * 1024 * 1024 * 1024)


int main(){
    char *p;
    p = (char *)malloc(MB(512));
    memset(p, 'T', MB(512));
    printf(".5 GB allocated...\n");

    char *q;
    q = (char *)malloc(MB(512));
    memset(q, 'T', MB(512));
    printf("1 GB allocated...\n");
    printf("Sleeping...\n");

    sleep(300);
}
Run Code Online (Sandbox Code Playgroud)

**编辑:我正在为我的操作系统使用CentOS 6.4(带有3.6.0内核),如果这有帮助的话.

c linux memory malloc mmap

8
推荐指数
2
解决办法
7095
查看次数

如何找到另一个文件中缺少的行

在Linux上我有一个文件,如下所示 .txt

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

第二个文件如下 .txt

1
2
3
6
Run Code Online (Sandbox Code Playgroud)

我想知道A.txt里面是什么,但不知道B.txt里面是什么,即它应该打印值4

我想在Linux上这样做.

linux awk grep sed

8
推荐指数
3
解决办法
1万
查看次数

如何从另一个文件中的一个文件中查找单词?

在一个文本文件中,我有150个单词.我有另一个文本文件,大约有100,000行.

如何检查属于第一个文件的每个单词是否在第二个文件中?

我想过使用grep,但我无法找到如何用它来阅读原文中的每个单词.

有什么方法可以使用awk吗?或另一种解决方案

我试过这个shell脚本,但它几乎匹配每一行:

#!/usr/bin/env sh
cat words.txt | while read line; do  
    if grep -F "$FILENAME" text.txt
    then
        echo "Se encontró $line"
    fi
done
Run Code Online (Sandbox Code Playgroud)

我发现的另一种方式是:

fgrep -w -o -f "words.txt" "text.txt"
Run Code Online (Sandbox Code Playgroud)

linux shell awk grep text-manipulation

8
推荐指数
1
解决办法
9204
查看次数

Linux - 奇怪的Python输出

当我输入错误或在控制台中输入错误时,会出现以下消息:

Traceback (most recent call last):
  File "/usr/lib/python3.3/site.py", line 629, in <module>
    main()

  File "/usr/lib/python3.3/site.py", line 614, in main
    known_paths = addusersitepackages(known_paths)

  File "/usr/lib/python3.3/site.py", line 284, in addusersitepackages
    user_site = getusersitepackages()

  File "/usr/lib/python3.3/site.py", line 260, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE

  File "/usr/lib/python3.3/site.py", line 250, in getuserbase
    USER_BASE = get_config_var('userbase')

  File "/usr/lib/python3.3/sysconfig.py", line 610, in get_config_var
    return get_config_vars().get(name)

  File "/usr/lib/python3.3/sysconfig.py", line 560, in get_config_vars
    _init_posix(_CONFIG_VARS)

  File "/usr/lib/python3.3/sysconfig.py", line 432, in _init_posix
    from _sysconfigdata import build_time_vars …
Run Code Online (Sandbox Code Playgroud)

python linux

8
推荐指数
1
解决办法
3121
查看次数

如果跑步,则新贵停止

我有一个Jenkins工作来停止节点应用程序,部署代码并启动应用程序.

使用Upstart脚本完成启动/停止.

我用 initctl stop node-App

如果作业正在运行,这很有效.但是如果应用程序已经死亡或处于停止状态,则输出为initctl: Unknown instance:

这会导致Jenkins作业失败,而不会继续执行后续步骤.

有没有办法在发出启动命令之前检查作业是否已启动?或者詹金斯有没有办法不考虑错误并且失败了?

linux bash upstart jenkins

8
推荐指数
1
解决办法
2015
查看次数

找到正在运行的进程的PID并将其存储为数组

我正在尝试编写一个bash脚本来查找正在运行的进程的PID然后发出kill命令.我有部分工作,但我面临的问题是可能有多个进程在运行.我想对找到的每个PID发出一个kill命令.

我认为我需要将每个PID放入一个数组中,但是如何做到这一点却不知所措.

到目前为止我所拥有的:

pid=$(ps -fe | grep '[p]rocess' | awk '{print $2}')
if [[ -n $pid ]]; then
    echo $pid
    #kill $pid
else
echo "Does not exist"
fi
Run Code Online (Sandbox Code Playgroud)

这将做什么是在一行返回所有PID,但我无法弄清楚如何将其拆分为数组.

linux arrays bash

8
推荐指数
1
解决办法
2万
查看次数

使用ssh从github部署到linux服务器但是Permission denied(publickey).PHP脚本

我试图在我的共享Linux服务器上使用部署php脚本,使用他们的web-hooks功能从github.com获取一个私人仓库,这是第一次使用ssh.

本质上:每次我提交github web-hook发送一个post请求到我的php文件,我想用它来发出一个简单的git pull命令,从而保持我的服务器和github同步并意味着我有一个体面的工作流程,将帮助我停止在生产服务器上编辑内容.

我正在使用终端进行ssh连接.

我使用ssh去我的服务器并创建我的私人仓库的克隆,这很有用.

因此,我可以ssh到我的服务器并发出一个git pull完美的工作.但当然我想自动化这个过程.如果我可以让这个工作,我想对其他几个回购做同样的事情.

我已经关注创建密钥并将其添加到github.com上我的帐户部分github指南,我可以看到密钥存在于我的主机上的/.ssh/文件夹中.私钥有chmod 600,公钥是644.我删除了这些,重新创建了新密钥,并在github上删除/重新添加了几次公钥.ssh keys

我目前有这些键:

  1024 03:c4:16:45:40:77:a4:94:a4:... /home/username/.ssh/id_dsa (DSA)
  2048 b3:62:87:e0:4b:39:aa:06:97... /home/username/.ssh/id_github (RSA)
Run Code Online (Sandbox Code Playgroud)

我有一个带有以下内容的/.ssh/config文件(希望github使用基于此SO答案的id_github密钥:

 # Default GitHub
Host github_server
HostName github.com
user git
ForwardAgent yes
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_github
Run Code Online (Sandbox Code Playgroud)

我已更新我的.git/config以将命令更改为 git@github_server:username/repo

我已经使用了将密钥复制到authorized_keys

 cat id_github.pub >> authorized_keys
Run Code Online (Sandbox Code Playgroud)

但是当我提交时,我收到一封电子邮件说permissions denied (publickey)(我的php脚本会发送成功/失败的电子邮件,并且基于此回购:

这使用了一个简单git pullshell_exec函数,我已添加2>&1到最后进行调试.

我将命令更改为(尝试为用户添加密钥)

  `ssh-add …
Run Code Online (Sandbox Code Playgroud)

php linux git ssh github

8
推荐指数
1
解决办法
1185
查看次数

标签 统计

linux ×10

awk ×2

bash ×2

git ×2

grep ×2

shell ×2

arrays ×1

build ×1

c ×1

debian ×1

exec ×1

github ×1

isolation ×1

jenkins ×1

linux-mint ×1

malloc ×1

memory ×1

mmap ×1

php ×1

python ×1

redirect ×1

rpm ×1

sed ×1

ssh ×1

stdout ×1

text-manipulation ×1

upstart ×1