Вам нужен сценарий постсоединения для wicd. Можно установить его в /etc/wicd/wireless-settings.conf
или /etc/wicd/wired-settings
. Иначе должен использовать wicd-gtk: в странице настроек сети существует кнопка "Scripts".
Иначе должен поместить сценарий в /etc/wicd/scripts/postconnect/
. Затем это должно быть выполнено автоматически после каждого соединения с сетью.
Для получения дополнительной информации посмотрите здесь.
Вы могли сделать что-то как
df -P FILE | awk 'NR==2{print $NF}'
или даже
df -P FILE | awk 'END{print $NF}'
С тех пор awk
разделения на пробеле (пробелах) по умолчанию, Вы не должны указывать -F
и Вы также не должны обрезать пробел с tr
. Наконец, путем определения номера строки интереса (NR==2
) можно также покончить tail
.
На GNU/Linux, если у Вас есть GNU stat
от coreutils 8.6 или выше, Вы могли сделать:
stat -c %m -- "$file"
Иначе:
mount_point_of() {
f=$(readlink -e -- "$1") &&
until mountpoint -q -- "$f"; do
f=${f%/*}; f=${f:-/}
done &&
printf '%s\n' "$f"
}
Ваш подход допустим, но предполагает, что точка монтирования не содержит пространство, %, новую строку или другие непечатаемые символы, можно упростить его немного с более новыми версиями GNU df
(8.21 или выше):
df --output=target FILE | tail -n +2
df
> =8.21.
– terdon♦
12.09.2013, 02:35
С тех пор stat
возвращает поле "Device", мне было любопытно видеть как базовое stat()
вызов библиотеки мог использоваться для получения этой информации программно в POSIX совместимый путь.
Этот отрывок кода C:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
int main (int argc, const char *argv[]) {
struct stat info;
stat(argv[1], &info);
printf("min: %d maj: %d\n",
minor(info.st_dev),
major(info.st_dev)
);
return 0;
}
Даст главный и незначительный идентификатор устройств для устройства, содержащего файл, перечисленный на командной строке (argv[1]
). К сожалению, major()
и minor()
не POSIX, хотя страница справочника утверждает, что они "присутствуют во многих других системах" помимо GNU/linux.
Можно затем получить корреспонденцию между устройством главное/незначительное число и узлом устройства от, например, /proc/diskstats
, и карта это к точкам монтирования от /proc/mounts
, иначе. /etc/mtab
.
Так утилита командной строки, чтобы сделать это было бы довольно просто.
/proc/diskstats
только для блочных устройств, Вы пропустите NFS, proc, предохранитель... На Linux, по крайней мере, различные точки монтирования могут иметь тот же maj+min
– Stéphane Chazelas
11.09.2013, 18:28
st_dev
может не позволить отличать один раздел NFS от другого. Кто бы ни на самом деле хочет записать, что это должно будет взять это во внимание ;)
– goldilocks
11.09.2013, 18:30
Вот еще код C ++, если вы хотите сделать это из C ++ ...
#include <boost/filesystem.hpp>
#include <sys/stat.h>
/// returns true if the path is a mount point
bool Stat::IsMount(const std::string& path)
{
if (path == "") return false;
if (path == "/") return true;
boost::filesystem::path path2(path);
auto parent = path2.parent_path();
struct stat sb_path;
if (lstat(path.c_str(), &sb_path) == -1) return false; // path does not exist
if (!S_ISDIR(sb_path.st_mode)) return false; // path is not a directory
struct stat sb_parent;
if (lstat(parent.string().c_str(), &sb_parent) == -1 ) return false; // parent does not exist
if (sb_path.st_dev == sb_parent.st_dev) return false; // parent and child have same device id
return true;
}
/// returns the path to the mount point that contains the path
std::string Stat::MountPoint(const std::string& path0)
{
// first find the first "real" part of the path, because this file may not exist yet
boost::filesystem::path path(path0);
while(!boost::filesystem::exists(path) )
{
path = path.parent_path();
}
// then look for the mount point
path = boost::filesystem::canonical(path);
while(! IsMount(path.string()) )
{
path = path.parent_path();
}
return path.string();
}
Дополнительные ссылки для программных способов
Для Linux у нас есть findmnt от util-linux, специально созданный для этого
findmnt -n -o TARGET --target /path/to/FILE
Обратите внимание, что некоторая случайная точка монтирования может быть возвращена в случае, если есть несколько монтирований привязки. При использовании df
возникает та же проблема.
-P
правильно? Во всех случаях, самое последнее поле, распечатанноеawk
должен быть диск. – terdon♦ 12.09.2013, 02:34-P
опция, которую просто добавил Gilles. – terdon♦ 12.09.2013, 02:35-P
. Тем не менее, я всегда рекомендую использовать-P
когда Вы анализируете выводdf
, это легче, чем проверка, что это конкретное использование безопасно. – Gilles 'SO- stop being evil' 12.09.2013, 02:37mount | grep " on $(df -P ${FILE} | awk 'END{print $NF}') type" | awk '{print $1}'
– unsynchronized 05.06.2016, 07:43