Obtendrá este comportamiento si el modo de archivo del directorio de inicio del usuario en el host de destino no está configurado correctamente. ¡No es solo el modo del directorio.ssh lo que debe configurarse correctamente!
ssh al host y proporcione su contraseña para iniciar sesión, luego
chmod 755 ~
logout
Luego ssh nuevamente y suponiendo que todo lo demás esté configurado correctamente (vea las otras respuestas ), debería poder iniciar sesión.
Así es como se ve cuando el directorio de inicio está completamente abierto (777 ). Tenga en cuenta que no prueba la clave rsa:
ssh -v user@host
...
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/iwoolf/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/iwoolf/.ssh/id_dsa
debug1: Trying private key: /home/iwoolf/.ssh/id_ecdsa
debug1: Trying private key: /home/iwoolf/.ssh/id_ed25519
debug1: Next authentication method: password
...
Luego, con los permisos del directorio de inicio configurados correctamente (755):
ssh -v user@host
...
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/iwoolf/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
Чистыйsed
:
sed 'H;1h;$!d;G' file.txt
Все строки собираются в области удержания, а затем добавляются к последней строке:
H
добавляет текущую строку в область хранения. К сожалению, это приведет к началу пробела с новой строки, поэтому 1h
для первой строки пробел перезаписывается этой строкой без предшествующей новой строки $!d
означает, что если это не(!
)последняя строка ($
), d
удалить строку, потому что мы не хотим ее печатать G
выполняется только для последней строки, так как для остальных строк d
перестали обрабатываться. Теперь все строки (от первой до последней ), которые мы собрали в области удержания, добавляются к текущей (последней )строке с помощью команды G
, и все это печатается в конце скрипта. Попробуйте это,
tail -n1 file | xargs -I '{}' sed '1i{}' file
tail -n1
напечатает последнюю строку файла xargs -I
передаст хвостовой вывод в sed sed '1i
вставит контекст в первую строку если выходные данные выглядят как файл, добавьте параметр -i
в sed для встроенного редактирования
Другой sed
альтернативой может быть:
sed '$!d; r infile' infile
удалить все строки, кроме последней, прочитать следующую и вывести весь файл.
Сed
:
$ printf '$t0\n,p\n' | ed -s file
f
a
b
c
d
e
f
Команда t
в ed
переносит/копирует строку из адресуемой строки (здесь $
для последней строки )после строки, адресованной ее аргументом (здесь 0
, т.е. вставить перед первой строкой ). Команда ,p
распечатывает содержимое буфера редактирования (, измените его на w
, чтобы записать результат обратно в файл ).
GNU awk:
awk 'ENDFILE { if(NR==FNR) print } NR!=FNR' infile{,}
Портативный awk:
awk 'NR!=FNR && !f { f=1; print p } NR!=FNR; { p=$0 }' infile{,}
Переверните файл, запомните первую строку и напечатайте ее после последней строки , затем повторно -переверните файл:
tac file | awk 'FNR == 1 {last=$0} {print} END {print last}' | tac
# or
tac file | sed -n '1h; p; ${x;p}' | tac
Попытался выполнить команду sed, указанную ниже, и она тоже сработала
команда
k=`sed -n '$p' filename `
sed '1i '$k'' filename
выход
f
a
b
c
d
e
f