我知道我可以研究
/etc/apt/sources.list
和/etc/apt/sources.list.d
,但是我正在寻找一种生成脚本的方法,该脚本可以在新系统上执行所有apt-add-repository
命令(可以获取所有键)。 有什么想法吗?
#1 楼
您可以使用以下内容显示所有内容:grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*
#2 楼
感谢您的指导。经过一点清理,我得到了一个脚本,其中列出了PPA,但没有列出任何其他存储库: #! /bin/sh
# listppa Script to get all the PPA installed on a system ready to share for reininstall
for APT in `find /etc/apt/ -name \*.list`; do
grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
USER=`echo $ENTRY | cut -d/ -f4`
PPA=`echo $ENTRY | cut -d/ -f5`
echo sudo apt-add-repository ppa:$USER/$PPA
done
done
使用
listppa > installppa.sh
调用它时,您会得到一个脚本,可以在新计算机上复制以重新安装所有PPA。 > #! /bin/sh
# Script to get all the PPA installed on a system
for APT in `find /etc/apt/ -name \*.list`; do
grep -Po "(?<=^deb\s).*?(?=#|$)" $APT | while read ENTRY ; do
HOST=`echo $ENTRY | cut -d/ -f3`
USER=`echo $ENTRY | cut -d/ -f4`
PPA=`echo $ENTRY | cut -d/ -f5`
#echo sudo apt-add-repository ppa:$USER/$PPA
if [ "ppa.launchpad.net" = "$HOST" ]; then
echo sudo apt-add-repository ppa:$USER/$PPA
else
echo sudo apt-add-repository \'${ENTRY}\'
fi
done
done
这应该可以解决问题。我需要一个有关超级用户的问题,以找出正确的正则表达式。
评论
在您的grep -o示例中,[a-z0-9 \-]中的\`没有达到您的期望。它实际上与文字反斜杠匹配。当它位于[]列表的开头或结尾时,无需转义-。实际上,您无法逃脱它!..在这种情况下,\`(可能)不会引起问题,因为您(希望)在deb条目中不会遇到反斜杠。
– Peter.O
2012年9月7日在3:51
请注意,PPA名称可能包含点,因此我想您要将正则表达式更改为http://ppa.launchpad.net/[a-z0-9-]\+/[a-z0-9.-]\+
– kynan
2013年1月7日10:28
不,您想将正则表达式更改为[[:graph:]]而不是[a-z ... blah.anything],因为它将与任何字母数字+标点符号匹配-这就是PPA名称的组成。
– MichalH
2015年8月25日在13:11
我想如果没有在ppa:$ USER / $ PPA表格中给出,则应该在每个存储库行的开头包含deb word。
– jarno
16年11月26日在17:07
@stwissel您使用过find和grep的任何特定原因?您可以轻松地执行shell解析的glob,并将其传递给grep。 grep -Po“(?<= ^ deb \ s)。*?(?=#| $)” /etc/apt/{sources.list,sources.list.d/*.list} |同时阅读ENTRY;回显$ ENTRY;完成注意,按照本文的说明,每个条目的文件名都来自此,因此您需要从结果开始到第一个冒号进行修整,但是使用cut并不是很难。如果您不希望同一来源的多个条目(例如,如果您安装了Google Chrome Stable / Beta / Dev),则可能还希望通过uniq传递它。
–dragon788
17年7月17日在19:21
#3 楼
让我感到惊讶的是,尚未发布将所有启用的二进制软件源以及在其中指定的文件一起获得的最简单但最有效的方法:在所有已处理的文件中,这将打印从deb
开始的每一行。 它实际上仅搜索将由
deb-src
解析的所有*.list
文件,但例如。没有用于备份的apt
文件或其他带有非法名称的文件。文件和目录,不仅是*.list.save
和`/etc/apt/sources.list.d/*),还可以使用以下文件:grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d/
除非有文件那不应该在那里,输出将是相同的。 br />
如果您想要更漂亮的输出,让我们通过
/etc/apt/sources.list*
将其通过管道传输: grep -r --include '*.list' '^deb ' /etc/apt/sources.list*
评论
按照公认的答案,OP似乎希望PPA以ppa:
–muru
16 Mar 4 '16 at 9:02
该问题实际上要求生成一个安装/启用所有存储库的脚本。但问题标题仅与列出它们有关。同样,得分第二高的答案也只列出了它们,但是列出的太多了。
–Byte Commander♦
16 Mar 4 '16 at 9:11
很好,但是我已经投票了。 :D
–muru
16 Mar 4 '16 at 9:44
您可以对grep使用`-h`选项来省略文件名。
– jarno
19年4月9日在22:39
#4 楼
运行以下命令:apt-cache policy | grep http | awk '{print }' | sort -u
源
评论
在仿生中,这会打印诸如“ mirrors.nic.funet.fi/ubuntubionic-security/main”之类的行
– jarno
19年4月7日在19:07
注意:apt-cache策略将仅在运行apt-get update后显示存储库。如果您刚刚添加了带有add-apt-repository的存储库,则在运行apt-get update之前,它不会与apt-cache策略一起显示
– Wisbucky
19年4月10日在21:25
每个@wisbucky:sudo apt更新> / dev / null 2>&1 && sudo apt-cache策略| grep http | awk'{print $ 2 $ 3}'|排序-u效果很好。 gist.github.com/bmatthewshea/229da822f1f02157bff192a2e4a8ffd1
– bshea
19年6月23日在13:25
#5 楼
我使用此命令列出所有已配置的软件源(存储库),包括当前禁用的软件源:当然可以将其合并到脚本中,但是您可能希望将
/etc/apt/sources.list.d/*
缩小到/etc/apt/sources.list.d/*.list
,以便仅获取当前启用的软件源。评论
Thx的反馈。 cat会按原样列出文件,因此我需要手动对其进行编辑以生成脚本(如问题中所述)。存储库的挑战:如果仅从/ etc / apt复制文件,则不会获得存储库密钥。这就是为什么我想要一个脚本来为我们获取它们的原因
–stwissel
2012年6月12日上午11:29
#6 楼
所以,做一些挖掘,我们得到AptPkg::Class
。所有perl
软件包的列表。您可能会用它生成AptPkg::Class::PkgFile
命令。#7 楼
这是我的脚本“list-apt-repositories
”,其中列出了“ /etc/sources.list"
”和“ /etc/sources.list.d/*.list
”中的所有存储库。您可以添加--ppa-only
以仅显示PPA。PPA将自动转换为ppa:USER/REPO
格式。相关部分是
list_sources
和list_ppa
函数中的5行,其余的只是将其包装在方便的shell脚本中的样板。list-apt-repositories
: #!/bin/sh
usage () {
cat >&2 <<USAGE
make-apt-repository-install-script
[--ppa-only]
Options:
--ppa-only only list PPAs
USAGE
exit
}
list_sources () {
grep -E '^deb\s' /etc/apt/sources.list /etc/apt/sources.list.d/*.list |\
cut -f2- -d: |\
cut -f2 -d' ' |\
sed -re 's#http://ppa\.launchpad\.net/([^/]+)/([^/]+)(.*?)$#ppa:/#g'
}
list_ppa () {
list_sources | grep '^ppa:'
}
generate=list_sources
while test -n ""
do
case "" in
-h|--help) usage 1;;
--ppa-only) generate=list_ppa;;
*)
printf -- "Unknown argument ''\n" >&2
usage 2
;;
esac
shift
done
$generate
并制作安装脚本,将其传递到另一个脚本“
-y
”。生成的脚本支持--yes
/ add-apt-repository(1)
参数为非交互式使用(请参阅make-apt-repository-install-script
)。#!/bin/sh
if test -n ""
then
cat >&2 <<USAGE
Usage: xargs
< PATH_TO_LIST_OF_REPOS
list-apt-repositories [--ppa-only] | q4312079q
No options recognized.
Reads list of repositories from stdin and generates a script to install them
using \`add-apt-repository(1)\`. The script is printed to stdout.
The generated script supports an optional
\`-y\` or \`--yes\` argument which causes the \`add-apt-repository\` commands
to be run with the \`--yes\` flag.
USAGE
exit 1
fi
cat <<INSTALL_SCRIPT
#!/bin/sh
y=
case "$1" in
-y|--yes) y=$1;;
'') y=;;
*)
printf '%s\n' "Unknown option '$1'" "Usage: $0 [{-y|--yes}]" >&2
exit 1
;;
esac
INSTALL_SCRIPT
xargs -d'\n' printf "add-apt-repository $y '%s'\n"
:q4312079q
同样,重要的是最后一行的q4312079q命令,其余部分是样板。
#8 楼
https://repogen.simplylinux.ch/将为您提供适用于您的Ubuntu版本的所有PPA的列表。这是没有源文件且没有三星打印机ppa的生成列表:#------------------------------------------------------------------------------#
# OFFICIAL UBUNTU REPOS #
#------------------------------------------------------------------------------#
###### Ubuntu Main Repos
deb http://us.archive.ubuntu.com/ubuntu/ yakkety main restricted universe multiverse
###### Ubuntu Update Repos
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-security main restricted universe multiverse
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-updates main restricted universe multiverse
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-proposed main restricted universe multiverse
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-backports main restricted universe multiverse
###### Ubuntu Partner Repo
deb http://archive.canonical.com/ubuntu yakkety partner
#------------------------------------------------------------------------------#
# UNOFFICIAL UBUNTU REPOS #
#------------------------------------------------------------------------------#
###### 3rd Party Binary Repos
#### Flacon PPA - http://kde-apps.org/content/show.php?content=113388
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F2A61FE5
deb http://ppa.launchpad.net/flacon/ppa/ubuntu yakkety main
#### Gimp PPA - https://launchpad.net/~otto-kesselgulasch/+archive/gimp
## Run this command: sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 614C4B38
deb http://ppa.launchpad.net/otto-kesselgulasch/gimp/ubuntu yakkety main
#### Google Chrome Browser - http://www.google.com/linuxrepositories/
## Run this command: wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
#### Google Earth - http://www.google.com/linuxrepositories/
## Run this command: wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb [arch=amd64] http://dl.google.com/linux/earth/deb/ stable main
#### Highly Explosive PPA - https://launchpad.net/~dhor/+archive/myway
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93330B78
deb http://ppa.launchpad.net/dhor/myway/ubuntu yakkety main
#### JDownloader PPA - https://launchpad.net/~jd-team
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A68F637
deb http://ppa.launchpad.net/jd-team/jdownloader/ubuntu yakkety main
#### Lazarus - http://www.lazarus.freepascal.org/
## Run this command: gpg --keyserver hkp://pgp.mit.edu:11371 --recv-keys 6A11800F && gpg --export --armor 0F7992B0 | sudo apt-key add -
deb http://www.hu.freepascal.org/lazarus/ lazarus-stable universe
#### LibreOffice PPA - http://www.documentfoundation.org/download/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1378B444
deb http://ppa.launchpad.net/libreoffice/ppa/ubuntu yakkety main
#### MEGA Sync Client - https://mega.co.nz/
deb http://mega.nz/linux/MEGAsync/xUbuntu_16.10/ ./
#### MKVToolnix - http://www.bunkus.org/videotools/mkvtoolnix/
## Run this command: wget -q http://www.bunkus.org/gpg-pub-moritzbunkus.txt -O- | sudo apt-key add -
deb http://www.bunkus.org/ubuntu/yakkety/ ./
#### Mozilla Daily Build Team PPA - http://edge.launchpad.net/~ubuntu-mozilla-daily/+archive/ppa
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 247510BE
deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu yakkety main
#### muCommander - http://www.mucommander.com/
## Run this command: sudo wget -O - http://apt.mucommander.com/apt.key | sudo apt-key add -
deb http://apt.mucommander.com stable main non-free contrib
#### Opera - http://www.opera.com/
## Run this command: sudo wget -O - http://deb.opera.com/archive.key | sudo apt-key add -
deb http://deb.opera.com/opera/ stable non-free
#### Oracle Java (JDK) Installer PPA - http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
deb http://ppa.launchpad.net/webupd8team/java/ubuntu yakkety main
#### PlayDeb - http://www.playdeb.net/
## Run this command: wget -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
deb http://archive.getdeb.net/ubuntu yakkety-getdeb games
#### SABnzbd PPA - http://sabnzbd.org/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4BB9F05F
deb http://ppa.launchpad.net/jcfp/ppa/ubuntu yakkety main
#### SimpleScreenRecorder PPA - http://www.maartenbaert.be/simplescreenrecorder/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 283EC8CD
deb http://ppa.launchpad.net/maarten-baert/simplescreenrecorder/ubuntu yakkety main
#### Steam for Linux - http://store.steampowered.com/about/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F24AEA9FB05498B7
deb [arch=i386] http://repo.steampowered.com/steam/ precise steam
#### Syncthing - https://syncthing.net/
## Run this command: curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
deb http://apt.syncthing.net/ syncthing release
#### Tor: anonymity online - https://www.torproject.org
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 886DDD89
deb http://deb.torproject.org/torproject.org yakkety main
#### Unsettings PPA - http://www.florian-diesch.de/software/unsettings/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0FEB6DD9
deb http://ppa.launchpad.net/diesch/testing/ubuntu yakkety main
#### VirtualBox - http://www.virtualbox.org
## Run this command: wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox_2016.asc -O- | sudo apt-key add -
deb http://download.virtualbox.org/virtualbox/debian yakkety contrib
#### Webmin - http://www.webmin.com
## Run this command: wget http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add -
deb http://download.webmin.com/download/repository sarge contrib
#### WebUpd8 PPA - http://www.webupd8.org/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4C9D234C
deb http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu yakkety main
#### Xorg Edgers PPA - https://launchpad.net/~xorg-edgers
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8844C542
deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu yakkety main
here is a generated list without source files and no samsung printer ppa
#### Yuuguu - http://yuuguu.com
deb http://update.yuuguu.com/repositories/apt hardy multiverse
#9 楼
要添加它,请将ppa.launchpad.net行添加为ppa:$ USER / $ PPA。从* .list文件中以全行添加其他存储库。没有重复行。#!/bin/bash # My ~/bin/mk_repositories_restore_script mkdir -p ~/bin x=~/bin/restore_repositories echo \#\!/bin/bash > $x chmod u+x $x ( for APT in $( find /etc/apt/ -name \*.list ) do sed -n -e '/^deb /{ /ppa\.launchpad/s/\(.*\/\/[^\/]*.\)\([^ \t]*\)\(.*$\)/sudo apt-add-repository ppa:/p; /ppa\.launchpad/!s/\(deb[ \t]*\)\(.*$\)/sudo apt-add-repository /p; }' $APT done ) | sort | uniq | tee -a ~/bin/restore_repositories
#10 楼
这是一个衬纸:find /etc/apt/sources.list* -type f -iname "*.list" -exec grep -viE '(^#|^$)' {} \; -print | column -tx
deb http://archive.ubuntu.com/ubuntu bionic main restricted
deb http://archive.ubuntu.com/ubuntu bionic-updates main restricted
deb http://archive.ubuntu.com/ubuntu bionic universe
deb http://archive.ubuntu.com/ubuntu bionic-updates universe
deb http://archive.ubuntu.com/ubuntu bionic multiverse
deb http://archive.ubuntu.com/ubuntu bionic-updates multiverse
deb http://archive.ubuntu.com/ubuntu bionic-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
/etc/apt/sources.list
deb https://nginx.org/packages/ubuntu/ bionic nginx
deb-src https://nginx.org/packages/ubuntu/ bionic nginx
/etc/apt/sources.list.d/nginx.list
评论
那不会输出shell脚本-请参阅问题
–stwissel
19/12/18在11:49
#11 楼
谢谢BobDodds!如果有人感兴趣,我已经对您的代码做了一些更新(希望您不介意)。 .list.d)。
#!/bin/bash
# My ~/bin/mk_repositories_restore_script
mkdir -p ~/bin
x=~/bin/restore_repositories
echo \#\!/bin/bash > $x
chmod u+x $x
(
for APT in $( find /etc/apt/ -name \*.list )
do sed -n -e '/^deb /{
/ppa\.launchpad/s/\(.*\/\/[^\/]*.\)\([^ \t]*\)\(.*\/ubuntu.*$\)/ppa:/p;
}' $APT
done
) | sort | uniq | tee -a ~/bin/restore_repositories
#12 楼
sed -r -e '/^deb /!d' -e 's/^([^#]*).*//' -e 's/deb http:\/\/ppa.launchpad.net\/(.+)\/ubuntu .*/ppa:/' -e "s/.*/sudo add-apt-repository '&'/" /etc/apt/sources.list /etc/apt/sources.list.d/*
但是,它不会生成命令来启用可能的源存储库(deb-src)。
#13 楼
为了列出存储库,我将提供一个简短的方法,类似于一些已经发布的方法,还使用正则表达式过滤掉注释:^ [^#](“在行首,没有注释行”):grep ^[^#] /etc/apt/sources.list /etc/apt/sources.list.d/*
#14 楼
安装ppa-purge
apt install ppa-purge
然后按制表符完成获取ppa列表...
ppa-purge -o
(按两次Tab键)评论
这有点倒退。您如何建议OP收集外壳完成输出以进行存储或处理?另外,根据其手册页,ppa-purge没有-o标志。 -1
–大卫·福斯特(David Foerster)
18年8月24日在9:04
评论
那么egrep -v'^#| ^ * $'/etc/apt/sources.list /etc/apt/sources.list.d/*删除注释掉的行和空白行怎么办?
–user25656
2012-6-10 13:22
您能否解释一下grep中grep之后的^用法^ /etc/apt/sources.list /etc/apt/sources.list.d/*?
–user25656
2012年6月10日下午13:25
@ vasa1脱字号^和美元符号$是元字符,分别与行的开头和结尾处的空字符串匹配。
– wojox
2012年6月11日14:22
我使用grep ^ [^#] ...-它会自动隐藏所有注释掉的源
–罗斯·艾肯
13-10-30在22:36
如果您不打算过滤掉任何内容,只运行cat /etc/apt/sources.list /etc/apt/sources.list.d/*会更简单吗?
– jbo5112
13年11月25日在16:28