2009-05-12 22 views
63

Soy nuevo en Linux, y estoy empezando a aprender bash. Estoy usando Ubuntu 9.04 y me gustaría agregar repositorios a /etc/apt/sources.list desde la línea de comandos. Básicamente, me gustaría hacer esto:¿Cómo puedo agregar texto a /etc/apt/sources.list desde la línea de comando?

sudo echo "[some repository]" >> /etc/apt/sources.list 

Sin embargo, incluso cuando se utiliza sudo, me sale este error:

bash: /etc/apt/sources.list: Permission denied 

¿Cómo evitar este error?

+0

Es necesario mencionar 2 cosas: 1) ¿Está usted en la lista de sudoers, y es el que figura correctamente? 2) ¿Cuáles son los permisos de su archivo /etc/apt/sources.list? – sykora

Respuesta

1

En Karmic, puede usar el comando add-apt-repository, al menos para PPA.

Por ejemplo:

sudo add-apt-repository ppa:docky 
+0

complemento -apt-repositorio no está en la base, para conseguir que se ejecute: 'apt-get install software-properties-common' – notpeter

+0

Y ahora parece que esté disponible en sistemas basados ​​en Debian, por lo que es probablemente la forma correcta de hacerlo. – Wilf

122
echo "[some repository]" | sudo tee -a /etc/apt/sources.list 

El comando tee se llama como el superusuario a través de sudo y el argumento -a dice camiseta para anexar el archivo en lugar de sobreescribirlo.

Su comando original falló, ya que la redirección de IO con >> se realizará como usuario normal, solo su eco se ejecutó con sudo.

Llamar a un subnivel sudo como

sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list' 

obras, también como se ha señalado por otros.

+0

Gracias por su respuesta, para referencia futura, ¿a dónde pertenecería? ¿O quiere decir que no pertenece en absoluto a este sitio? –

+1

@Matthew Como en realidad no está relacionado con la programación, probablemente sería una mejor opción en serverfault.com una vez que esté abierto para todos. Actualmente es BETA (http://serverfault.com/beta-access) – lothar

+4

he encontrado este útil como un programador de la instalación de algunas dependencias; Definitivamente creo que esto debería estar en StackOverflow. – williampli

3

Una manera de resolver esto es hacer el cambio de dirección en un subnivel:

sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list' 

De esta manera, el proceso sh es ejecutada bajo sudo y por lo tanto tiene los privilegios necesarios para abrir la salida redirigida a /etc/apt/sources.list.

8

El shell procesa ">", "<", ">>" etc. antes de ejecutar comandos. Entonces, el problema es que "sudo >>/etc/foo" intenta abrir/etc/foo para anexar antes de obtener privilegios.

Una forma de solucionar esto es usar sudo para poner en marcha otra línea de comandos para hacer lo que desee, por ejemplo:

sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list' 

O, alternativamente:

echo "[some repository]" | sudo sh -c 'cat >> /etc/apt/sources.list' 

Un enfoque más sencillo puede ser simplemente utilizar sudo para ejecutar un editor en/etc/file :)

7

mejor utilizar un archivo separado en /etc/apt/sources.list.d como se explica en este other answer.

Tenga en cuenta que el nombre de archivo DEBE terminar en .list o se ignorará.

+0

Su comentario debe ser parte de su respuesta, por lo que le sugiero que edite este último. – tzot

0

Si tuviera que iniciar sesión como su (si tiene el privilegio) el mismo comando funcionará bien ...

su 
echo "[some repository]" >> /etc/apt/sources.list 

Si usted no es el superusuario, entonces vaya con la respuesta de Lothar.

Si lo haces de esta manera, asegúrese de salir de su manera que no se está ejecutando programas innecesarios como root (superusuario)

+1

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. – cpburnz

+0

Traté de mejorar la respuesta, no estoy seguro de cómo no proporciona una respuesta. Sería útil saber más acerca de por qué llegaste a esta conclusión – Shapeshifter

+0

Tu respuesta fue solo un comentario para mí en lugar de responder la pregunta porque tu pregunta básicamente decía usar la respuesta de Lothar, y si el OP ya era un súper usuario, no habrían encontrado este problema (malentendido de sudo con redirección de E/S). – cpburnz

3

siguiente funciona para mí

sudo echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | sudo tee -a /etc/apt/sources.list.d/10gen.list 
+0

también está trabajando para mí .. –

0

Aquí está la solución sin utilizar tuberías , sólo simple edición en contexto:

sudo ex +'$put = \"[some repository]\"' -cwq /etc/apt/sources.list 

El ex es equivalente a vi -e.

-1

primero abrir o crear el archivo que desea editar por el siguiente comando

1- sudo nano file_name

2- edit the file after it opens

3- ctrl+x

4- press 'Y' to say yes

y ya está.

Cuestiones relacionadas