В чем может быть проблема с SCP, если команда ls не отображает файлы?

Какова причина того, что команда `ls` не отображает файлы в папке `foo` после их копирования с помощью `scp`, пока я не перезайду в эту папку с помощью команд `cd ...` и `cd foo`?
  • 1 ноября 2024 г. 14:33
Ответы на вопрос 3
Проблема, с которой вы сталкиваетесь, может быть связана с тем, что команда `scp` копирует файлы в каталог `foo`, но текущая сессия оболочки не обновляет информацию о файлах в этом каталоге. Это может происходить по нескольким причинам:

1. **Кэширование информации о файлах**: Иногда терминал не обновляет отображение содержимого папки автоматически, и вам нужно вручную обновить представление с помощью команды `cd` и повторного входа в каталог.

2. **Файловая система**: В некоторых файловых системах информация о содержимом каталога может обновляться не сразу. Это может зависеть от настроек файловой системы или других факторов.

3. **Состояние терминала**: Возможно, ваша текущая сессия терминала по каким-то причинам не распознает изменения, внесенные в файловую систему извне.

4. **Права доступа**: Проверьте, есть ли у вас необходимые права доступа для отображения файлов в каталоге. Если права доступа были изменены, это может повлиять на видимость файлов.

Чтобы убедиться, что проблема не связана с одним из вышеуказанных факторов, попробуйте выполнить следующие команды после копирования файлов:

- Выполните `ls` в каталоге, чтобы проверить наличие файлов.
- Перейдите обратно на уровень выше и выполните `cd foo` снова, чтобы обновить состояние оболочки.
- Используйте команды `ls -l` или `ls -a`, чтобы получить более подробную информацию о файлах и скрытых файлах в каталоге.

Если проблема сохраняется, возможно, стоит проверить активные процессы, работающие с файловой системой, или исследовать возможные конфликты с правами доступа.
scp тут ни при чём, да и ls тоже. Так работает практически любой шелл в линуксе. Он запоминает текущую папку не (только) по имени, но и по её фактическому расположению на диске. А при удалении и создании новой одноимённой папки фактическое положение меняется. 

Точно такого же эффекта можно добиться и без scp. Просто удалив папку и создав на её месте новую (собственно именно это и произошло).

Вместо cd ..; cd foo можно сделать cd . .

/tmp/q$ ls -l
total 0
-rw-rw-r-- 1 lynn lynn 0 nov  1 16:01 2
$ rm -r ../q
$ mkdir ../q
$ touch ../q/3
$ ls -l
total 0
$ cd .
$ ls -l
total 0
-rw-rw-r-- 1 lynn lynn 0 nov  1 16:04 3
ssh [email protected] "rm -r /srv/foo/*"
Похожие вопросы