chmod 600 ~/.ssh/id_rsa; chmod 600 ~/.ssh/id_rsa.pub
(т.е. chmod u=rw,go= ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
) верны.
chmod 644 ~/.ssh/id_rsa.pub
(т.е. chmod a=r,u+w ~/.ssh/id_rsa. pub
) также будет правильным, но chmod 644 ~/.ssh/id_rsa
(т.е. chmod a=r,u+w ~/.ssh/id_rsa
) - нет. Ваш открытый ключ может быть открытым, главное, чтобы ваш закрытый ключ был закрытым.
Также сам каталог .ssh
должен быть доступен для записи только вам: chmod 700 ~/.ssh
или chmod u=rwx,go= ~/.ssh
. Вам, конечно, нужно иметь возможность читать его и получать доступ к файлам в нем (разрешение execute). Непосредственно вреда от того, что другие могут его читать, нет, но и пользы тоже.
Вам не нужен sudo
. Не используйте sudo
для работы с собственными файлами, это может привести только к ошибкам.
Ошибка с .ICEauthority
не связана с командами chmod
, которые вы показываете. Либо это совпадение, либо вы выполняли какие-то другие команды, которые вы нам не показываете.
Опция -1
(цифра «один», не ниже -регистр «L» )будет перечислять по одному файлу в строке без какой-либо другой информации:
ls -1 -- *.tar.gz
Если вам нужны только имена файлов, вы можете использоватьprintf
:
printf '%s\n' *.tar.gz
... оболочка расширит подстановочный знак *.tar.gz
до имен файлов, затем printf
напечатает их, за каждым из которых следует новая строка. Этот вывод будет немного отличаться от выводаls
в случае имен файлов со встроенными в них символами новой строки :
$ touch file{1,2}.tar.gz
$ touch file$'\n'3.tar.gz
$ ls -1 -- *.tar.gz
file1.tar.gz
file2.tar.gz
file?3.tar.gz
$ printf '%s\n' *.tar.gz
file1.tar.gz
file2.tar.gz
file
3.tar.gz
Чуть более окольный и извилистый способ:
for i in *.tar.gz; do
echo "$i"
done
РЕДАКТИРОВАТЬ :добавлены кавычки для обработки странных имен файлов
Или сGNU find
:
find -name "*.tar.gz" -printf '%P\n'
В отличие от ls
с *
он будет искать .tar.gz
файлы рекурсивно:
$ find -name "*.tar.gz" -printf '%P\n'
file1.tar.gz
dir/file3.tar.gz
file2.tar.gz
ls
ведет себя иначе, когда его вывод передается по конвейеру. Например:
ls # outputs filenames in columns
ls | cat # passes one filename per line to the cat command
Итак, если вы хотите просмотреть все свои *.tar.gz
файлы, по одному в строке, вы можете сделать это:
ls *.tar.gz | cat
Но что, если вы не хотите передавать свой вывод по конвейеру? То есть есть ли способ заставить ls
выводить имена файлов по одному в строку без конвейерной обработки вывода?
Да, с помощью переключателя -1
. (Это тире с цифрой 1. )Таким образом, вы можете использовать эти команды:
ls -1 # shows all (non-hidden) files, one per line
ls -1 *.tar.gz # shows only *.tar.gz files, one per line