Можно использовать следующий код:
java YourApp "$1"
И запустить код следующим образом:
./app.sh your_argument
-121--249943-
Первый; Есть ли причина, по которой нужно использовать symlinks, а не обычные hardlinks? Мне трудно понять необходимость symlinks с относительными путями. Вот как я бы решил эту проблему:
Я думаю, что версия Debian (Ubuntu) fdupes может заменить дубликаты на жесткие
ссылки с помощью параметра -L
, но у меня нет установки Debian для проверки
это.
Если у вас нет версии с опцией -L
, вы можете использовать этот крошечный сценарий bash, который я нашел на commandlinefu .
Обратите внимание, что этот синтаксис будет работать только в bash.
fdupes -r -1 path | while read line; do master=""; for file in ${line[*]}; do if [ "x${master}" == "x" ]; then master=$file; else ln -f "${master}" "${file}"; fi; done; done
Приведенная выше команда найдет все дублированные файлы в «path» и заменит их на
жесткие ссылки. Вы можете проверить это, запустив ls -ilR
и посмотрев на inode
номер. Вот пример с десятью идентичными файлами:
$ ls -ilR
total 20
3094308 -rw------- 1 username group 5 Sep 14 17:21 file
3094311 -rw------- 1 username group 5 Sep 14 17:21 file2
3094312 -rw------- 1 username group 5 Sep 14 17:21 file3
3094313 -rw------- 1 username group 5 Sep 14 17:21 file4
3094314 -rw------- 1 username group 5 Sep 14 17:21 file5
3094315 drwx------ 1 username group 48 Sep 14 17:22 subdirectory
./subdirectory:
total 20
3094316 -rw------- 1 username group 5 Sep 14 17:22 file
3094332 -rw------- 1 username group 5 Sep 14 17:22 file2
3094345 -rw------- 1 username group 5 Sep 14 17:22 file3
3094346 -rw------- 1 username group 5 Sep 14 17:22 file4
3094347 -rw------- 1 username group 5 Sep 14 17:22 file5
Все файлы имеют отдельные номера inode, что делает их отдельными файлами. Теперь можно выполнить дедупликацию:
$ fdupes -r -1 . | while read line; do j="0"; for file in ${line[*]}; do if [ "$j" == "0" ]; then j="1"; else ln -f ${line// .*/} $file; fi; done; done
$ ls -ilR
.:
total 20
3094308 -rw------- 10 username group 5 Sep 14 17:21 file
3094308 -rw------- 10 username group 5 Sep 14 17:21 file2
3094308 -rw------- 10 username group 5 Sep 14 17:21 file3
3094308 -rw------- 10 username group 5 Sep 14 17:21 file4
3094308 -rw------- 10 username group 5 Sep 14 17:21 file5
3094315 drwx------ 1 username group 48 Sep 14 17:24 subdirectory
./subdirectory:
total 20
3094308 -rw------- 10 username group 5 Sep 14 17:21 file
3094308 -rw------- 10 username group 5 Sep 14 17:21 file2
3094308 -rw------- 10 username group 5 Sep 14 17:21 file3
3094308 -rw------- 10 username group 5 Sep 14 17:21 file4
3094308 -rw------- 10 username group 5 Sep 14 17:21 file5
Все файлы теперь имеют одинаковый номер inode, что означает, что все они указывают на одно и то же физические данные на диске.
Надеюсь, это решит вашу проблему или, по крайней мере, направит вас в правильном направлении!
-121--27778-
Установка монетного двора с /домашним
на твердотельный накопитель. Определите UUID раздела /home
на жестком диске. Добавьте строку к /etc/fstab
, чтобы установить этот диск на проход позже /
.
Итак, я смог решить свою проблему, как я предлагал в конце своего вопроса, но я также пришел к выводу, что избегание виртуальных доменов может быть правильным путем.
Первое, первоначально предложенное решение: удалить ссылки на a.com
из файла virtual
.
virtual
-------
#postmaster@a.com postmaster
#@a.com userA
postmaster@b.com postmaster
@b.com userB
postmaster@c.org postmaster
@c.org userC
После того, как я это сделал, виртуальные переводы для b.com
и c.org
выдали userB@a.com и userC@a.com, как и ожидалось, а поскольку a. com
является одной из записей mydestination
, postfix/local послушно доставил почту пользователяB на /var/mail/userB
и пользователяC на /var/mail/userC
.
Конечно, как я и опасался в своем первоначальном вопросе, он все равно делает вывод, что a.com - это конечный домашний домен всех этих пользователей, что кажется мне странным. Очевидным решением, в таком случае, является не использовать виртуальные домены вообще - весь смысл виртуальных доменов в том, чтобы принимать почту для адресов, которые не являются реальными пользователями Unix в системе. Но поскольку все мои универсальные пользователи являются реальными пользователями Unix в системе, я должен просто использовать локальные псевдонимы:
/etc/aliases
------------
admin: postmaster
www: postmaster
@a.com: userA
@b.com: userB
@c.com: userC
Я все еще могу иметь универсальные адреса без использования виртуальных
доменов вообще.
Технически это не ответ, но, возможно, это лучшее, что вы получите. Я несколько лет работал с большим количеством карт sendmail. Ваша лучшая ставка - разбить ее на части, упростить. Сделайте так, чтобы карта включала только один из ваших доменов, заставьте wildcard работать для этого домена, и стройте оттуда.
Используйте диагностические флаги sendmail, например, флаг sendmail -bv.