вид ls произведенный пользователями

Кража 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 я думаю, лучше вызывать известный браузер и заставлять его выложить учетные данные аутентификации.

3
18.04.2013, 21:07
6 ответов

Определение, в котором находится столбец имя владельца от сингла ls -l вывод, не зная, который является, который не возможен. Вы могли попытаться соответствовать записям в каждом столбце с passwd файл, но нет никакой гарантии, что Вы не соответствовали бы столбцу группы или столбцу имени файла оба, которые могли только содержать имена, в которых Вы находите /etc/passwd.

Если Вы хотите пойти с ls, Вы могли запустить программу дважды, однажды как ls -l и однажды как ls -g. Последние отбрасывания владелец так согласующими отрезками длинной линии на основе другой информации Вы смогли бы определить имя владельца без спецификации. Это - однако не осуществление, которое я был бы рад сделать в сценарии оболочки удара.

3
27.01.2020, 21:09
  • 1
    'Соответствие passwd файл звучит великолепно – но как достигнуть этого? –  erch 18.04.2013, 20:41
  • 2
    @cellar.dweller, если бы это работало бы, я сделал бы это на своем предпочтительном языке программирования, но с некоторым выводом Вы никогда не можете быть уверены, какой столбец имена владельца и не имена файлов или groupnames. Это прилагает усилие, бесполезное, по моему скромному мнению. Лучше запустите с uid информация, поскольку я указал в своем комментарии к Вашему вопросу. разность –  Anthon 18.04.2013, 20:45
  • 3
    Там мог бы прибыть время, когда я смогу кодировать в C, но в настоящий момент мне посчастливилось прожить ведьма основные команды и опции, но спасибо :) –  erch 18.04.2013, 20:52
  • 4
    Большинство библиотечных функций C также доступно в в некоторой форме в Python, Ruby или Perl. Это является несколько более прощающим, чем C, чтобы сделать подобные вещи. –  Anthon 18.04.2013, 21:01
  • 5
    Прощение хорошо для Pro, который, возможно, наблюдал за чем-то [oopsie!], но сделал хорошее задание для 99% того, что они сделали ИЛИ закончили тем, что дали свою лучшую попытку дать 99%. Но затем я приветствую 'не прощение', потому что, если IT основан на математике, должно быть 'право' или 'неправильно' и как можно меньше промежуточно. Я принимаю строгие правила, пока они там для работы так правильно, как каждый может сделать. Все остальное сбивает с толку - специально для Newbs. Это мог бы просто быть я... –  erch 19.04.2013, 03:08

С 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
3
27.01.2020, 21:09
  • 1
    я забыл упоминать, что я работаю в Bash [и обновил свой вопрос]. Я пытаюсь придерживаться его долгое время отсюда на так вещах, не становятся более сложными. [Я люблю выбор, который я имею с Linux и не хочу быть неблагодарным, но для newb все это, к чему возможности могут стать очень.] –  erch 18.04.2013, 20:37

Не анализировать ls: использовать stat

stat -c "%U %n" -- * | sort
3
27.01.2020, 21:09
  • 1
    Обратите внимание, что существует несколько реализаций stat. Тем является GNU один. –  Stéphane Chazelas 18.04.2013, 21:59
  • 2
    OS X -f вместо -c и это только поддерживает %u (UID) и нет %U (имя пользователя). –  Lri 19.04.2013, 17:52
  • 3
    @LauriRanta stat -f "%Su %N" -- * | sort должен работать над OS X и *BSD. –  depquid 19.04.2013, 18:40
  • 4
    @Glenn, Почему stat лучше в этом случае? В моих тестах это все еще не обрабатывает новые строки в именах файлов хорошо. –  depquid 19.04.2013, 18:41
  • 5
    в именах файлов являются действительно патологическим пограничным случаем: никакие ориентированные на строку инструменты не смогут обработать это. 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 это не содержит владельца в третьем столбце или способе повредить это решение, которое не повреждает решения, данные в других ответах.

2
27.01.2020, 21:09

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)
1
27.01.2020, 21:09
  • 1
    awk сделан для ясности, не tersity... Я уверен, что гуру там предложит намного более опрятный/короче способ –  Olivier Dulac 18.04.2013, 22:39
  • 2
    я получаю эту ошибку на шаге № 2: sort: open failed: 4,3: No such file or directory Значение $zeuser 3 4 zeuser присвоение не обрабатывает, когда владелец и названия группы являются тем же? –  depquid 18.04.2013, 22:58
  • 3
    @depquid:Я не понимаю: мои 1) часть заботятся о нахождении столбцов с помощью команды myls. Присвойте myls=the_command_you'll_actually_use, и он будет определять столбцы для той фактической команды (быть этим псевдоним или что-либо), и затем виды будут использовать те найденные значения. –  Olivier Dulac 18.04.2013, 23:49
  • 4
    @depquid: Я отредактировал для повреждения, как только соответствие происходит (но если Вам будет нужна группа, то это станет немного более трудным, где необходимо будет взять последнее (=1st если только 1 число, возвращенное или 2-е если 2 числа, возвращенные в случае, если user=group)) –  Olivier Dulac 18.04.2013, 23:53
  • 5
    Извините, я пропустил значение редактирования, где Вы добавили $myls. –  depquid 19.04.2013, 19:07

Вот немного одного лайнера, который должен сделать это для Вас:

\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 ~ в строке вместо того, чтобы звонить каждый раз, и мог, вероятно, оптимизировать еще больше, если бы Вы сохранили результаты в массив и сослались на тот путь. Но это было быстрым и грязным, первое, что пришло на ум, одним видом использования времени ответа.

0
27.01.2020, 21:09
  • 1
    Во многих системах, группе ~ имеет то же имя как имя пользователя, таким образом, $field затем был бы 3 4 там. –  Stéphane Chazelas 18.04.2013, 23:03
  • 2
    Это неправильно по причинам, приведенным в ответе Anthon. Если Вы не можете предположить что ls порядок столбцов последователен, затем Вы не можете принять это ls -ld ~ возвратит то, что Вы думаете, что это будет. Что, если пользователь использует alias ls='ls -g --author'? –  depquid 18.04.2013, 23:29
  • 3
    Хорошо это было быстрое и грязное решение - так часто, что я делаю в Linux при занятии решением как это. Я не думал о группе - A break мог быть добавлен для остановки, после того как первое поле соответствия найдено (который должен быть пользователем), и вышел ls избегать проблем псевдонима. Все еще не прекрасный, но meh, Работы над Моим спасибо Machine© –  Drake Clarris 19.04.2013, 16:18
  • 4
    ls -l | sort -k 3 также "Работы над Моим Machine©", но OP искал решение, которое было более устойчиво/портативно, чем это. номер –  depquid 19.04.2013, 18:19

Теги

Похожие вопросы