Предположения: вы хотите разделить папку, содержащую тысячи файлов общим размером более 700 МБ, на отдельные каталоги по 700 МБ каждый, готовые для записи на несколько компакт-дисков.
В Linux вы можете использовать сценарий вроде dsplit или dirsplit - часть genisoimage (в Debian / Ubuntu). Если вы предпочитаете Windows / Wine, вы можете использовать такое приложение, как Folder Axe .
# Create 2000 files of 1MB (sparse) each.
mkdir allimages && cd $_
for i in {1..2000}
do
dd if=/dev/zero of=image$i.jpg bs=1 count=0 seek=1M
done
Теперь у меня есть 2000 файлов (2 ГБ), которые я хочу разделить на 3 каталога.
$ ls -la | tail
-rw-rw-r-- 1 cmihai cmihai 1048576 Dec 4 12:54 image992.jpg
-rw-rw-r-- 1 cmihai cmihai 1048576 Dec 4 12:54 image993.jpg
Установить дирсплит. В ubuntu он включен в пакет genisoimage
.
$ apt-cache search dirsplit
genisoimage - Creates ISO-9660 CD-ROM filesystem images
$ sudo apt-get install genisoimage
# Get usage / help
dirsplit -H
# Dry run (get list of changes):
dirsplit --no-act --size 700M --expmode 1 allimages/
# Actual run:
$ dirsplit --size 700M --expmode 1 allimages/
Building file list, please wait...
Calculating, please wait...
....................
Calculated, using 3 volumes.
Wasted: 105254 Byte (estimated, check mkisofs -print-size ...)
# List of files per directory can be found in catalog files you can use with mkisofs.
$ ls
allimages vol_1.list vol_2.list vol_3.lis
Примечание: по умолчанию файлы жестко привязаны к источнику
$ wget https://raw.githubusercontent.com/mayanez/dsplit/master/dsplit.py
$ python dsplit.py -s 700 -v allimages/ out/
Volume 01:
allimages/: 700 files (700.00 MB).
Total: 700.00 MB (700 files, 1 dirs)
Volume 02:
allimages/: 700 files (700.00 MB).
Total: 700.00 MB (700 files, 1 dirs)
Volume 03:
allimages/: 600 files (600.00 MB).
Total: 600.00 MB (600 files, 1 dirs)
dsplit
/ dirsplit
обрабатывает разреженные файлы, жесткие и программные ссылки.Что касается вашего вопроса:
However, how does ssh handle the possibility of two machines on the local network having the same username? Is there a flag to differentiate between user bob on machine A vs a different user bob on machine B, or does ssh throw an error?
Каждая система Linux по умолчанию управляет своими пользователями, группами и паролями локально в 3 файлах.
/etc/password
$ head -4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
user1:x:1001:1001::/home/user1:/bin/bash
/etc/shadow
$ head -4 /etc/shadow
root:$1$jmJYUghS$AxysSW9MzG6AmmweysZsi1::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
user1:!!:17717:0:99999:7:::
/etc/group
$ head -4 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
user1:x:1001:
В этих файлах находятся фактические числа. Вы можете увидеть их в этой строке из файла /etc/password
:
user1:x:1001:1001::/home/user1:/bin/bash
Что соответствует идентификатору пользователя (UID )и идентификатору группы (GID )из 1001 и 1001. Если бы мы перечислили домашний каталог этого user1
, вы увидите эти там тоже такие же цифры:
$ ls -lnd /home/user1
drwx------ 4 1001 1001 4096 Jul 12 00:05 /home/user1
ПРИМЕЧАНИЕ.:В приведенной выше команде мы указываем ls
отображать номера, в противном случае по умолчанию отображаются имена:
$ ls -ld /home/user1
drwx------ 4 user1 user1 4096 Jul 12 00:05 /home/user1
Когда вы ssh
переходите на другой сервер и включаете пользователя для входа в систему как:
$ ssh user1@server1.mydom.com
вы выполняете аутентификацию по локально сохраненным на этом сервере «подробным сведениям» о данном пользователе. С SSH это немного сложнее, так как вы обычно будете использовать пару закрытый/открытый ключ для входа на сервер через ssh
.
$ ls -l ~/.ssh/id_rsa*
-rw------- 1 root root 1675 Jul 21 00:50 /root/.ssh/id_rsa
-rw-r--r-- 1 root root 394 Jul 21 00:50 /root/.ssh/id_rsa.pub
В этом сценарии, когда вы ssh
отправляете «секреты» на удаленный сервер, используя приватную часть пары ключей SSH пользователя, на сервере находится общедоступная часть пары ключей, которую сервер можно использовать, чтобы подтвердить, что вы на самом деле тот, за кого себя выдаете.
Вот, например, часть вашего закрытого ключа:
мой ноутбук$ ssh-keygen -l -f ~/.ssh/id_rsa
2048 SHA256:HvNN38AS9H7tIHaaE+51lqv6bgL7AmyDdqHIZIyBimg root@centos7 (RSA)
Если мы рассмотрим клиент, в котором этот пользователь может ssh
использовать пару ключей:
$ ssh-keygen -l -f ~user1/.ssh/authorized_keys
2048 SHA256:HvNN38AS9H7tIHaaE+51lqv6bgL7AmyDdqHIZIyBimg root@centos7 (RSA)
Обратите внимание на совпадение ключей.
Я думаю, что комментарий Гордона Дэвиссона правильно указывает на ваше непонимание:
I think there's a fundamental misunderstanding here: ssh never uses the username to decide which computer to connect to. It simply connects to a specified destination IP address (maybe specified via a name) and TCP port number; that might get redirected by a NAT router to a local computer, but if so that's done based on the IP and port numbers, not the username.
И это на 100% верно для стандартных инсталляций SSH :если вы подключаетесь к bob@example.com
, он не будет искать другие хосты для имени пользователя.
Однако возможно, что example.com
может перенаправить соединение на другой компьютер. Я иногда видел системы, которые позволяют ssh
сначала подключиться, а затем перенаправить на основе имени пользователя. Однако это не стандартное поведение SSH, и цель будет полностью зависеть от правил перенаправления, установленных на сервере.