Кража cookie от веб-браузера является стандартной вещью, когда Вы пишете сценарий очистки и не хотите иметь дело с некоторой сложной аутентификацией веб-сайта в своем сценарии.
Традиционно, браузеры сохранили свои cookie в простом текстовом формате, наследованном Netscape, cookies.txt
формат. Wget имеет опцию --load-cookies
загрузить файл как это.
Современные версии Firefox и Chrome больше не используют этот формат, а скорее базу данных SQLite. Существуют расширения, чтобы заставить их вывести a cookies.txt
файл, такой как Средство экспорта Cookie и экспорт cookie.txt.
Это очень хорошо для сценария для использования техническо-настроенными людьми, но я не сделал бы этого в приложении широкой публики. Вы находитесь в для мира вреда, выясняющего, какой браузер использовать (у этого пользователя есть три профиля Firefox и два профиля Chrome, на какой я должен посмотреть?) и пользователи создания менее общих сердитых браузеров (Opera, Konqueror, Геккон, …). Это также имеет шумный успех на удобстве использования, даже когда это работает: Вы просите, чтобы пользователь сделал что-то в их браузере, прежде чем они смогут использовать Ваше приложение, а не сделать что-то в их браузере (выходящий из сайта или стирающий cookie) как долго, поскольку они продолжают использовать Ваше приложение.
Я все еще считал бы подход разумным, если бы целевой веб-сайт был очень тверд взаимодействовать с. И даже затем, я одобрил бы подавание Вашей заявки, взаимодействуют с ее собственным экземпляром браузера (использующий ее собственный профиль) с платформой автоматизации браузера, такой как Selenium или Watir. Для общего входа в систему OpenID я думаю, лучше вызывать известный браузер и заставлять его выложить учетные данные аутентификации.
Определение, в котором находится столбец имя владельца от сингла ls -l
вывод, не зная, который является, который не возможен. Вы могли попытаться соответствовать записям в каждом столбце с passwd
файл, но нет никакой гарантии, что Вы не соответствовали бы столбцу группы или столбцу имени файла оба, которые могли только содержать имена, в которых Вы находите /etc/passwd
.
Если Вы хотите пойти с ls
, Вы могли запустить программу дважды, однажды как ls -l
и однажды как ls -g
. Последние отбрасывания владелец так согласующими отрезками длинной линии на основе другой информации Вы смогли бы определить имя владельца без спецификации. Это - однако не осуществление, которое я был бы рад сделать в сценарии оболочки удара.
С zsh
, можно определить порядки сортировки и использовать его в globbing спецификаторах как:
zmodload zsh/stat
uid() zstat -A REPLY +uid -- $REPLY
... *(no+uid)
(n
для числового порядка, o
для порядка, +uid
заказать с uid
функция). Идея состоит в том, чтобы иметь функцию, которая принимает имя файла $REPLY
и возвраты что-то в $REPLY
это zsh
виды на.
Так, например, с GNU ls
:
ls -ldU -- *(no+uid)
С GNU только инструменты, эквивалент был бы чем-то как:
find . ! -name . -prune -printf '%U\t%p\0' |
sort -zn |
tr '\0\n' '\n\0' |
cut -f2- |
tr '\0\n' '\n\0' |
xargs -r0 ls -ldU
Не анализировать ls
: использовать stat
stat -c "%U %n" -- * | sort
stat
. Тем является GNU один.
– Stéphane Chazelas
18.04.2013, 21:59
-f
вместо -c
и это только поддерживает %u
(UID) и нет %U
(имя пользователя).
– Lri
19.04.2013, 17:52
stat -f "%Su %N" -- * | sort
должен работать над OS X и *BSD.
– depquid
19.04.2013, 18:40
stat
лучше в этом случае? В моих тестах это все еще не обрабатывает новые строки в именах файлов хорошо.
– depquid
19.04.2013, 18:41
stat
не действительно более безопасно здесь, но это действительно обеспечивает (по-видимому), желаемый вывод. Кроме того, так как по сути трудно проанализировать имя файла от ls -l
вывод, я показываю лучшую технику. Ответ Stephane демонстрирует безопасный способ использовать нулевой байт в качестве разделителя.
– glenn jackman
19.04.2013, 20:26
Так как OP не предусматривает, что конкретные требования мобильности (кроме для использования в Bash), и начиная с парсинга ls, кажется, остаются популярным подходом, и начиная с stat
- основанное решение, кажется, не обрабатывает новые строки в именах файлов немного лучше (кто помещает новые строки в имена файлов, так или иначе?), я собираюсь добавить свое собственное предложение для самого изящного решения:
Я полагаю, что OP на самом деле имел почти лучший ответ. Этого просто нужно оставить, чтобы препятствовать тому, чтобы неожиданное поведение исказило (помните, это - определенное для Bash решение):
\ls -l | sort -k 3
18 символов, только требует ls
и sort
, и никакие циклы. Изящный, легкий понять, и надежный.
Кроме того, как Olivier указал в своем ответе, может быть желательно ограничить sort
только к третьему столбцу, а не целой строке, запускающейся с того столбца:
\ls -l | sort -k 3,3
Я отрекусь от этого ответа, если кто-то может найти меня реализацией ls -l
это не содержит владельца в третьем столбце или способе повредить это решение, которое не повреждает решения, данные в других ответах.
1) Определите, какой столбец является именем:
myls='ls -al'
echo '+' > /tmp/MYOWNFILE.$$ #so file will be of size 2, "+" and newline.
zeuser=$( $myls /tmp/MYOWNFILE.$$ | awk -v myname=$(whoami) '{ for (field=1;field<=NF;field++) { if ($field == myname) { print field ; break } } }' )
zesize=$( $myls /tmp/MYOWNFILE.$$ | awk '{ for (field=1;field<=NF;field++) { if ($field == 2) { print field ; break } } }' )
zename=$( $myls /tmp/MYOWNFILE.$$ | awk -v filename=/tmp/MYOWNFILE.$$ '{ for (field=1;field<=NF;field++) { if ($field == filename) { print field ; break } } }' )
rm /tmp/MYOWNFILE.$$
Это вставило переменную zeuser столбец, показывающий имя пользователя
Я также определяю zesize=column, содержащий размер и zename=column, содержащий имя файла
Я помещу команду ls в переменную, таким образом, строки, определяющие столбец, будут использовать фактическую команду, используемую позже (в случае, если Вы изменяете его, и это изменяет перечисленный столбец (столбцы)),
2) используйте вид для вида на том столбце:
$myls | sort -k${zeuser},${zeuser} #sort ONLY on column of usernames (see last example for bad alternative)
$myls | sort -k${zeuser},${zeuser} -k${zename},${zename} #sort on user, and then on filename
$myls | sort -k${zeuser},${zeuser} -k${zesize},${zesize}nr #sort on user,
# and then on size
#modifiers: 'n'=order Numerically (and not alphabetically),
# 'r'=Reverse order
$myls | sort -k${zeuser} #sort STARTING FROM user column, which is probably not what you want!
#indeed the next column is probably the group, then the size...
#It will be sorting in a not so usefull way (especially as the
# size will be sorted alphabetically instead of numerically)
sort: open failed: 4,3: No such file or directory
Значение $zeuser
3 4
zeuser
присвоение не обрабатывает, когда владелец и названия группы являются тем же?
– depquid
18.04.2013, 22:58
Вот немного одного лайнера, который должен сделать это для Вас:
\ls -l | sort -k$(for i in {1..5}; do field=$(\ls -ld ~ | cut -d' ' -f$i); if [ x$field = x$(whoami) ]; then echo $i; break; fi; done)
Я просто иду через каждое поле в ls -l
выполненный на Вашем корневом каталоге, пока я не нахожу поле, которое соответствует Вашему имени пользователя и замене что число в пойти с -k
опция для sort
.
Я не большая часть эксперта, таким образом, часть этого может быть версией удара или конкретным GNU, но это хорошо работает на моей машине.
Я выбрал 1-5, потому что это должно быть далеко, когда необходимо пойти для нахождения пользователя. Вы могли использовать больше чисел, особенно при сохранении вывода ls -ld ~
в строке вместо того, чтобы звонить каждый раз, и мог, вероятно, оптимизировать еще больше, если бы Вы сохранили результаты в массив и сослались на тот путь. Но это было быстрым и грязным, первое, что пришло на ум, одним видом использования времени ответа.
~
имеет то же имя как имя пользователя, таким образом, $field
затем был бы 3 4
там.
– Stéphane Chazelas
18.04.2013, 23:03
ls
порядок столбцов последователен, затем Вы не можете принять это ls -ld ~
возвратит то, что Вы думаете, что это будет. Что, если пользователь использует alias ls='ls -g --author'
?
– depquid
18.04.2013, 23:29
break
мог быть добавлен для остановки, после того как первое поле соответствия найдено (который должен быть пользователем), и вышел ls
избегать проблем псевдонима. Все еще не прекрасный, но meh, Работы над Моим спасибо Machine©
– Drake Clarris
19.04.2013, 16:18
ls -l | sort -k 3
также "Работы над Моим Machine©", но OP искал решение, которое было более устойчиво/портативно, чем это. номер
– depquid
19.04.2013, 18:19
passwd
файл звучит великолепно – но как достигнуть этого? – erch 18.04.2013, 20:41uid
информация, поскольку я указал в своем комментарии к Вашему вопросу. разность – Anthon 18.04.2013, 20:45