A problémám, hogy a yum search kimenetén nem látom, hogy melyik csomag telepített, és melyik nem. (az apt és ha jól rémlik a pacman is tudja)
A yum list availabe és yum list installed használata elég kényelmetlen és lassú. főleg sok találat esetén.
Keresgéltem a man oldalak között, de nem találtam semmi célrevezetőt.
Van valakinek ötlete?
- 5451 megtekintés
Hozzászólások
Egy-egy csomagra szokott ez kelleni. Akkor kijelölöm a csomagnevet, clipboardra teszem, majd
rpm -q csomagnév
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
rpm -qa | grep substring
- A hozzászóláshoz be kell jelentkezni
Csak nem ez volt a kérdés, hiszen a yum search-csel a fel nem telepített dolgok között is keres repóból. Amúgy amit írtál, így egyszerűbb:
rpm -qa \*substring\*
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Itt egy konkrét példa, így érthetőbb mi a problémám.
Mondjuk nem megfelőlen működik a va-api. Csomagkezelőben megnézném, hogy milyen csomagok vannak vele kapcsolatban felrakva, és milyen csomagok érhetők el a tárolóban. Csakhogy ehhez két külön parancs szükséges, mert a sima yum search kilistáz mindent, és nem jelöli meg, hogy melyik csomag van már telepítve. Így utólag kell szemmel összevetnem, hogy mi hiányzik.
Ráadásul ha nem tudom a csomag nevét, és keresnem kell a leírásban is, meg vagyok lőve, mert lehet kapok több száz sort, és mazsolázzam ki hogy akkor ez fent van, vagy nincs fent.
Ezzel szemben ha csak annyi történne, hogy a kimenetben vastagon, vagy más szinnel lenne szedve az installált csomag, minden problémám megoldódna.
- A hozzászóláshoz be kell jelentkezni
Értem a problémád, mert már nekem is jól jött volna. Ha nagyon fáj, írj rá shell scriptet! Különben csak a gondolkodáshoz kell, ha valaminek az okát keresed, hiszen ha telepítésnél megadsz olyan csomagnevet, ami már fel van telepítve, abból nem lesz baj.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nézd, mit csináltam Neked! Nagyon gány, így éjszaka erre tellett:
yum search all rpm | cut -d: -f1 | grep '^[A-Za-z0-9]' | sort |\ xargs rpm -q | sed 's/^/+ /; s/^+ package / /; s/ is not installed//'
Itt az rpm nevű szövegre keresünk. Felsorolja a találatokat, + jelet tesz azok elé, amik már telepítve vannak.
Az egész egy sor lenne, de akkor az első sor végén lévő backslash nem kell.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Köszönöm!
Nem értek semmilyen script programozáshoz (sajnos) így ez nagy segítség volt.
Abban tudnál még segíteni, hogy hogyan lehetne ezt kényelmesen használni?
#!/bin/bash
read a
yum search all $a | cut -d: -f1 | grep '^[A-Za-z0-9]' | sort | xargs rpm -q | sed 's/^/+ /; s/^+ package / /; s/ is not installed//'
tőlem ennyire tellett, aliasoltam, így már egész jó, de az lenne a legjobb, ha egy entert se kellene ütnöm. Hogyan kérhetném be az $a változót, még a script futtatása előtt? (tehát a parancs mellé írva, ahogyan a "gyári" yum is teszi)
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
if [ $# -gt 0 ] ; then
yum search all $1 | cut -d: -f1 | grep '^[A-Za-z0-9]' | sort | xargs rpm -q | sed 's/^/+ /; s/^+ package / /; s/ is not installed//'
else
echo "Valamit keresu:nk, nem?"
fi
ahol a script paraméterében adod meg, amit keresel.
- A hozzászóláshoz be kell jelentkezni
Azt ugyan nem írtad, hogy milyen rendszeren, de szerintem a következő megoldás univerzális lesz. Egyszerű, mint a faék...
yum list all > /rpmlista
CentOS 5.x-ön fájl tartalma kb így néz ki:
Installed Packages
MAKEDEV.i386 3.23-1.2 installed
SysVinit.i386 2.86-17.el5 installed
acl.i386 2.2.39-8.el5 installed
[...]
Available Packages
2hash.i386 0.2-1.el5.rf rpmforge
389-admin.i386 1.1.29-1.el5 epel
389-admin-console.noarch 1.1.8-1.el5 epel
389-admin-console-doc.noarch 1.1.8-1.el5 epel
[...]
CentOS 6.x-on így néz ki néhány sor:
Installed Packages
ConsoleKit.x86_64 0.4.1-3.el6 @anaconda-CentOS-201207061011.x86_64/6.3
ConsoleKit-libs.x86_64 0.4.1-3.el6 @anaconda-CentOS-201207061011.x86_64/6.3
GeoIP.x86_64 1.4.8-1.el6 @epel
MAKEDEV.x86_64 3.24-6.el6 @anaconda-CentOS-201207061011.x86_64/6.3
MySQL-python.x86_64 1.2.3-0.3.c1.1.el6 @base
[...]
Available Packages
2hash.x86_64 0.2-1.el6.rf rpmforge
2ping.noarch 2.0-2.el6 epel
389-admin.i686 1.1.35-1.el6 epel
389-admin.x86_64 1.1.35-1.el6 epel
[...]
A fentiekből látszik, hogy ezen
/rpmlista
fájl tartalma már könnyebben feldolgozható.
---
Lehet, hogy kívül szőke vagyok, de belül sötét, oké?!
- A hozzászóláshoz be kell jelentkezni
Tessék, már színes:
#!/bin/bash
yum search "$@" | cut -d: -f1 | grep '^[A-Za-z0-9].*\.' | sort | xargs rpm -q |\
sed '
s/.*/: & -/
s/^: package //
s/ is not installed -//
s/^: /\\x1b[33;1m/
s/ -$/\\x1b[m/
s/.*/'$"'&'"'/' | xargs -n1 echo -e
exit 0
Héjprogramozás nem nehéz, barátkozz vele! ;)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Köszönöm mindenkinek, segítettetek maradéktalanul megoldani a gondomat, és rámutattatok milyen irányba lenne érdemes továbbképeznem magamat :) (shell programozás)
- A hozzászóláshoz be kell jelentkezni
A scriptet yumsearch
névvel illettem, s ugyanúgy, mint eddig, az első paraméter lehet az all
kulcsszó, de el is hagyhatod igény szerint. A kimenetben félkövér sárga, ami már fel van telepítve, sima szövegszínű, ami nincs.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Írtam neked egy olyan változatot is, amely megtartja a yum kimenetében a rövid csomagleírásokat:
#!/bin/bash
while read; do
package="`awk 'BEGIN {FS=\" *:\"} /^[0-9A-Za-z].*\./ {print \$1}' <<<\"$REPLY\"`"
if [ ! -z "$package" ] && rpm --quiet -q "$package"; then
echo -e "${REPLY/$package/\\x1b[33;1m$package\\x1b[m}"
else
echo "$REPLY"
fi
done < <(yum search "$@")
exit 0
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
na ez tényleg jó :)
+1
--
A legértékesebb idő a pillanat amelyben élsz.
https://sites.google.com/site/jupiter2005ster/
- A hozzászóláshoz be kell jelentkezni
köszi. mondjuk ha ennyire mélyen bele akarok menni, akkor általában már nyitok valamilyen grafikus csomagkezelőt, már ha van.
Közben pont kellett ez egy másik debianos gépen, és kiderült hogy ezt a funkciót az apt még sem tudja :) Legalábbis a stable debian nem. De valahol láttam, az biztos.
- A hozzászóláshoz be kell jelentkezni
Most írom tiszta awk scriptre az egészet. Annyi a változás, hogy a csomagok rendezetten jelennek meg, ott lesz a rövid leírás hozzájuk, a telepített sárga, a nem telepített fehér. Tulajdonképpen készen vagyok, csak még töprengek valamin. Ha meglesz, bemásolom ide.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
érdemes lenne a scriptednek valamilyen nagyobb porondot keríteni, mint a hup egy eldugott fóruma, mert nem hiszem hogy ez az igény csak kettőnknél merült fel :)
Sok mindenkinek jól jöhetne.
Azt hogy hova lenne érdemes posztolnod, nem tudom. magyar részről sysadmin.hu halott, a hu.fedoracommunity.org 403-at dob, más magyar red hat-kapcsolatú oldalról meg nem tudok.
Esetleg feldobhatnád a planet.fedoraproject.org-ra. Már ha akarod. Én betettem hasznos dolgokat tartalmazó ládikámba. :)
- A hozzászóláshoz be kell jelentkezni
Ezt inkább a yum-ban kellene implementálni, logikailag odatartozik, ott volna természetes ez a működés. Szóval feature request kellene.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
akár, de ehhez már végképp nem értek.
Laikusként azt mondanám hogy minimum egy beolvasztásra kész patchet kellene küldeni a yum kartbanartó(i)nak, hogy érdemben foglalkozzon a kérdéssel. Aztán ha el is készül, az új feature eltűnik egy unalmas changelogban. És senki nem fog tudni róla, még ha szüksége is lenne rá (feltételezem hogy alapértelmezetten kikapcsolva marad)
- A hozzászóláshoz be kell jelentkezni
Debianos gépen aptitude search csomagnév ez szépen rak a csomagnév elé egy i betűt ha telepítve van.
- A hozzászóláshoz be kell jelentkezni
Na, tessék, az awk-s változat, amelyben megmaradnak a leírások, és betűrendben rendezetten listáz:
#!/bin/awk -f
BEGIN {
if (ARGC < 2) {
print("Missing parameter") >"/dev/stderr";
exit(1);
}
installed = "33";
regexp = "^[[:alnum:]].*\\.";
FS = " *:";
cmd = "yum search"
for (i = 1; i < ARGC; i++) cmd = cmd " " ARGV[i];
orig_rs = RS;
RS = "";
cmd | getline;
p = 1;
len = split($0, list, "\n");
for (l = 1; l <= len; l++) {
split(list[l], ln);
if (ln[1] ~ regexp) packages[p++] = ln[1];
}
RS = orig_rs;
p = asort(packages);
for (i = 1; i <= p; i++) {
package = packages[i];
found = 0;
color = system("rpm --quiet -q " package) ? "" : installed ";";
for (j = 1; j <= length(list); j++) {
line = list[j];
split(line, ln);
if (ln[1] == package) {
found = 1;
printf("\x1b[%s1m%s\x1b[m%s\n", color, package, substr(line, length(package)+1));
continue;
}
if (found) {
if (line ~ regexp) break;
print(line);
}
}
}
}
Az a sor, amelyben a printf() van, csak itt a hozzászólásban törik új sorba - akinél nem fér ki -, valójában nem.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
A yum magában miért nem volt jó?
Pl. ha így keresel:
yum list installed *string*
kilistáz minden telepített csomagot amiben szerepel a "string"
Ha pedig ezt használod:
yum list available *string*
Akkor kilistáz mindent amiben szerepel a "string", de azokat a talalálatokat, amik telepítve vannak, megjelöli más szinnel.
-Mr-
- A hozzászóláshoz be kell jelentkezni
A yum magában miért nem volt jó?
Mert nem ez volt a feladat. Amit írsz, arra az rpm -qa \*substring\*
alakot szoktam használni.
A yum search
illetve yum search all
akkor jó, ha nem tudod, mit keresel, csak sejtésed van róla. Az utóbbi a csomagleírásokban is keres. Lesz egy rakás találat, de jó volna látni, ezek közül mi van telepítve, s mi nincs.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Közben rájöttem :)
Módosítottam is a hozzászólásomat, csak már nem engedte elmenteni mert válaszoltál rá.
Tanulság: inkább megyek aludni :)
-Mr-
- A hozzászóláshoz be kell jelentkezni
Például nézd a VoIP kifejezéssel!
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni