LINUX.ORG.RU

Bash Скрипт.

 , , , ,


1

1

Всем добрый день/вечер/ночь. Не могу решить два пункта по заданию.

Разработать скрипт, который: *выводит имя текущего каталога; *запрашивает имя файла; *если файл не существует, выводит сообщение об ошибке и снова запрашивает имя файла;

*запрашивает имя пользователя; (Не решено) *выводит права данного пользователя к файлу в формате: ЧИТАТЬ/ПИСАТЬ/ВЫПОЛНЯТЬ.(Не решено)

Не могу понять,существует ли поиск по пользователю,точнее как узнать от пользователя 1 какие права у пользователя 2 на файл.

Как перевести буквы (права на файл) rwx..rwx на читать писать выполнять.

Возможно не правильно понял само задание.

Заранее благодарю за помощь.

Не можешь решить - значит, что ты уже что-то написал и чуть-чуть нужно доработать.

Показывай, что ты уже написал и описывал что тебе конкретно не понятно.

Если у тебя ничего вообще не написан - то ты должен написать «сделайте за меня, я лентяй».

Вот тебе запросы в Гугл:

  • linux получить текущую директорию
  • Linux получить имя директории по пути
  • Linux проверить существование файла

И так далее, вперёд.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Гений,я написал два пункта не могу решить.

То что ты написал «Запросы в гугл» которые никак не относятся к пунктам которые не решены. Я специально написал скобках что не могу решить. Я не глупец,который не может залезть в гугл и написать свой вопрос.

Я не прошу решать за меня писать за меня. Хоть какую то подсказку. Причем здесь «сделайте за меня,я лентяй» Не вижу просьбу за меня что либо писать. будь добр нормально читать вопрос.

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

А ты, гений, пробовал думать над алгоритмом решения задачи?

Ты написал:

Разработать скрипт, который: *выводит имя текущего каталога; *запрашивает имя файла; *если файл не существует, выводит сообщение об ошибке и снова запрашивает имя файла;

Тебе нужно:

  • получить имя каталога
  • считать имя файла и проверить его существование
  • если его нет спросить снова имя файла

Имя директории можно получить от текущей рабочей директории, т.е. текущего расположения, вот я тебе и написал запрос в Гугл, он выведет то, что тебе надо.

Тебе ещё нужно узнать как считать строку в Линукс в bash, на это сам составь запрос в Гугл.

Далее проверить наличие файла по имени файла считанного в переменную выше.

И вывести да или нет в начале.

А потом все это завернуть в цикл, в котором будет считывание строки с именем файла в переменную и проверка на наличие файла с именем из переменной.

И далее выход из цикла и вывод сообщения, что файл есть, если файл есть или возвращение в цикл, если файла нет.

Разложи вторую задачу сам.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от Rectangle8989

Я тебе дал подсказку, что, как и для чего гуглить.

Для того, чтобы понимать, что гуглить нужно в начале составить алгоритм, тогда сможешь решить.

Но ты, видимо, даже не пытался составить алгоритм, а пытался делать по примерам, сразу влоб, не думая.

Из тебя делают,не мартышку, а обучают логике и мышлению, составлению алгоритмов.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)

Для более предметного продолжения разговора хотя бы почитайте Кернигана, Пайка «UNIX. Программное окружение».

Infra_HDC ★★★★★
()
Ответ на: комментарий от kostik87

Опять одно и тоже,ты помечаешь те пункты которые я решил. Специально же написал что с моей стороны не решено. В скобках написал отделил эти пункты. Зачем ты мне объясняешь то что я изначально не просил гений. Те пункты я добавил просто чтоб была понятна задача моя.

*запрашивает имя пользователя; (Не решено) *выводит права данного пользователя к файлу в формате: ЧИТАТЬ/ПИСАТЬ/ВЫПОЛНЯТЬ.(Не решено)

Rectangle8989
() автор топика
Ответ на: комментарий от kostik87

Не одной подсказки с твоей стороны не увидел,а только просто умничаешь и не более. Объясняешь то что не просят.

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

Запрос имени пользователя - это просто считывание строки в переменную.

А далее тебе нужно разобраться в системе прав Линукс.

Она простая: права владельца/права группы/права остальных.

Права вида -rwxrwxrwx

r - значение 4 (чтение)
w - значение 2 (запись)
x - значение 1 (выполнение)

Поэтому права -rwxrwxrwx:

  • Владелец может читать, писать, выполнять (просматривать каталог)
  • Группа может читать, писать, выполнять (просматривать каталог)
  • Все остальные могут читать, писать, выполнять (просматривать каталог)

Может быть записана в виде 0777 - это равно -rwxrwxrwx.

Это сделано для удобства наложения битовых масок при определении прав. На схему прав выделяется 3 бита.

Ещё есть acl списки доступа, которые расширяют систему прав доступа в linux, но тебе вряд-ли о ней нужно думать.

Но ты все это мог узнать в Гугл по запросу linux права доступа.

Ну а далее либо парсишь вывод команды ls или stat, либо возможно есть команда для определения прав доступа для пользователя.

Гугли.

Так же тебе нужно знать в каких группах состоит пользователь, имя которого ты считал, так как ты гуглить не умеешь, то подскажу это команда groups.

Если ты парсишь вывод команд, то тебе нужно определить является ли пользователь, имя которого ты считал, владельцем файла, либо он состоит в одной из групп, которой принадлежит файл, либо он относится к остальным.

И в зависимости от этого берешь права.

Но, скорее всего, есть команда для определения прав для пользователя относительно файла, гугли.

Вперёд.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 3)
Ответ на: комментарий от Rectangle8989

Опять одно и тоже,ты помечаешь те пункты которые я решил. Специально же написал что с моей стороны не решено.

Можешь пояснить, зачем нам всем читать, какие пункты задания ты уже якобы выполнил?
И как можно разработать скрипт, который запрашивает имя файла (решено по твоим словам) и не смочь разработать скрипт, который запрашивает имя пользователя (нерешено)?

sigurd ★★★★★
()
Ответ на: комментарий от sigurd

Запускается скрипт Запрашивает имя файла (Вводим имя файла) Файл найден Запрашивает имя пользователя (Вводим имя пользователя) Имя пользователя найдено Как от другого имени пользователя узнать права для файла? Так понятнее или нет?

Я ввел пользователя root,но нахожусь я под пользователем Петя

ведь нету такого синтаксиса для того же stat filename или ls -l filename

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

Как от другого имени пользователя узнать права для файла?

Прочти ещё раз, я тебе подробно расписал как: Bash Скрипт. (комментарий)

Вот выдержка:

Если ты парсишь вывод команд, то тебе нужно определить является ли пользователь, имя которого ты считал, владельцем файла, либо он состоит в одной из групп, которой принадлежит файл, либо он относится к остальным.

Утилита test позволяет проверить.

Но в этом случае её нужно запускать от имени того пользователя, для которого осуществляется проверка прав.

Тут тебе в помощь sudo или su.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от Rectangle8989

Как от другого имени пользователя узнать права для файла?

Почитай, наконец, про систему прав для файла на Линуксе. У файла есть тройка прав: для владельца, для членов группы и для всех остальных. Тебе надо определить в какую из этих 3-х категорий входит введенное имя пользователя и все - задача решена.
Т.е. права на доступ к файлу находятся у самого файла, а не у пользователя и прочитать их может любой командой ls -l

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

Ему это уже всё расписано выше, он просто ленится думать.

Есть утилита test, которая позволяет проверить есть ли у пользователя, от имени которого она запущена право на которое идёт проверка.

Можно использовать её, через sudo или su, ну либо парсить вывод команд ls или stat.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Ему это уже всё расписано выше, он просто ленится думать.

С самого начала видно, что он хочет получить готовый ответ и продолжать не думать дальше.
И потом, обычно тестовые задания дают для закрепления изученного материала, а здесь полный ноль знаний и нежелание ничего почитать по теме!

sigurd ★★★★★
()
Ответ на: комментарий от sigurd

Вы наверно лучше знаете меня,что я хочу,а что не хочу. Вы сами у себя в голове накрутили «Что я жду готового ответа»,ведь Я не просил вас о написаний мне кода или чего либо похожего. Для вас я всех лентяй,я уже это понял. Я надеюсь вам легче стало от всех выше сказано слов.

Cудимых не судите,да не будете судимы сами.

Rectangle8989
() автор топика
Ответ на: комментарий от massimus

Я не грубил,не в коем случаи,я не знаю вас их поэтому и грубить не имею права.

Просто как оно выходит,люди сами у себя в голове додумывают что я их прошу за меня все написать. И пишут мне информацию которую я сам в силе прочесть в гугле,не более.

Задание,я то выполнил,но все равно получается что я лентяй и полный ноль.

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

Cудимых не судите,да не будете судимы сами.

не бросайте жемчуга вашего перед свиньями, чтобы они не попрали его ногами своими и, обратившись, не растерзали вас.

Оставь этот религиозный диспут для соответствующего форума. Тут больше подходит «грешно смеяться над убогими».

sigurd ★★★★★
()
Ответ на: комментарий от Rectangle8989

Просто как оно выходит,люди сами у себя в голове додумывают что я их прошу за меня все написать. И пишут мне информацию которую я сам в силе прочесть в гугле,не более.

Смотри, ты написал, что не можешь решить задание.

Вот это:

*запрашивает имя пользователя; (Не решено) *выводит права данного пользователя к файлу в формате: ЧИТАТЬ/ПИСАТЬ/ВЫПОЛНЯТЬ.(Не решено)

Тебе я написал:

Запрос имени пользователя - это просто считывание строки в переменную.

Ты написал, что сделал предыдущее задание, в котором есть вот эта часть:

  • выводит имя текущего каталога;
  • запрашивает имя файла;

То следовательно знаешь как считать имя пользователя.

Теперь вот к этой части второго задания:

  • выводит права данного пользователя к файлу в формате: ЧИТАТЬ/ПИСАТЬ/ВЫПОЛНЯТЬ.

Я тебе дал комментарий по системе прав в Linux: Bash Скрипт. (комментарий)

Можешь решать таким способом.

А можешь использовать утилиту test.

Тебе нужно просто открыть документацию по ней, т.е. набрать

man test

Или открыть её в гугл.

В ней ты можешь найти описание параметров:

man test
...
       -r FILE
              FILE exists and read permission is granted
       -w FILE
              FILE exists and write permission is granted

       -x FILE
              FILE exists and execute (or search) permission is granted

Но она проверяет права того пользователя, от имени которого она вызывается.

Для того, что бы проверить права другого пользователя тебе нужно вызвать эту программу от его имени.

Я тебе написал:

Утилита test позволяет проверить.

Но в этом случае её нужно запускать от имени того пользователя, для которого осуществляется проверка прав.

Тут тебе в помощь sudo или su.

Т.е. с помощью команды sudo или su ты можешь сделать вызов некоторой команды от имени другого пользователя. Но в начале ты должен быть пользователем root. Т.е. от root можно вызввать su или sudo с указанием запуска некоторой команды от имени другого пользователя.

Понимаешь, в чём суть, если тебе не понятны эти пояснения, то получается ты просишь всё же просто написать за тебя решение.

Ты не показываешь никакого написанного тобой кода, с вопросами. Почему мой код не работает или как мне тут исправить. Ты пишешь, что и так всё это нашёл в гугл = ну так сделай.

Я и другие участники форума не понимают, что в твоих задачах может быть тебе не понятно. Они элементарны и с учётом предоставленных ссылок лего решаются.

Вот тебе пример с утилитой test:

sudo -u user test -w /etc/fstab && echo 'Может писать' || echo 'Не может писать'
sudo -u user test -r /etc/fstab && echo 'Может читать' || echo 'Не может читать'
sudo -u user test -x /etc/fstab && echo 'Может выполнять' || echo 'Не может выполнять'

В этом примере от пользователя root посредством утилиты sudo от имени пользователя user вызывается утилита test и делаются проверки прав доступа к файлу /etc/fstab на запись, чтение и выполнение.

Вот действующие права для файла /etc/fstab

# stat /etc/fstab
  File: /etc/fstab
  Size: 807             Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 279658      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Этот пример сам перепиши под свою задачу.

Если тебе нужна помощь, то задавай конкретные вопросы и показывай код.

Но вообще, ссылок, что тебе дали более чем достаточно.

Хватит лениться иди работай.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Мне иногда кажется костик что ты уже стар чтоб читать.

Из всей полезной информации тут только в последнеем твоем комментарий и то уже не понадобилась.

Задание,я то выполнил,но все равно получается что я лентяй и полный ноль.

Rectangle8989
() автор топика
Ответ на: комментарий от sigurd

Вот именно что грешно и поэтому вы пытаетесь себя как-то тут проявить что вы лучше всех тут. Лет 28 вам,а строите себя не понятно что.

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

Мне иногда кажется костик что ты уже стар чтоб читать.

Я прочитал твоё нытьё, что тебе не нужны ссылки на документацию. Но примеров написанного тобой кода и что конкретно у тебя не получается я не увидел.

А тебе здесь никто не обещал писать готовое решение.

Плати деньги - напишем.

Да и заодно, неплохо бы было перевести деньги за помощь в направлении что нужно гуглить.

Но это я прощу.

Из всей полезной информации тут только в последнеем твоем комментарий

Т.е. про систему прав доступа, про утилиту test, про su и sudo тебе было неполезно? Ну значит ты глуп и тебе нужны были конкретные ответы.

Пойми ты, тебя учат использовать голову, а не повторять готовые решения. Чтобы что-то решить, нужно почитать документацию, справку, погуглить.

От тебя так никто и не увидел здесь куска кода, я вообще сомневаюсь, что ты хоть что-то сам написал. Да мне и всё равно.

уже не понадобилась.

Если написал сам - хорошо, значит что-то в голове есть, но думается, что тебе на другом форуме просто готовый ответ написали.

kostik87 ★★★★★
()
Ответ на: комментарий от Rectangle8989

Вот именно что грешно и поэтому вы пытаетесь себя как-то тут проявить что вы лучше всех тут. Лет 28 вам,а строите себя не понятно что.

Мне - не грешно, так как я не верю в этот религиозный дурман!
Поэтому могу судить кого захочу, говорить недоумку, что он дебил и прочее.
А вот и не угадал с возрастом! И очень сильно! И это закономерно - ты уже продемонстрировал свой «могучий» интеллект.

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 4)
Ответ на: комментарий от sigurd

Мужик даже если ты младше или старше,судить ты меня никак не можешь. Ты до сих пор мне что-то выписываешь,значит тебя что-то задевает. Тебе пора спать ложится.

Цитата никак не относится к религий,гений. Можешь не отвечать уже,ты бесполезный человек в обществе.

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

ведь нету такого синтаксиса для того же stat filename или ls -l filename

Нет. И не должно быть. Потому что проверка прав до исполнения это серьёзный недостаток алгоритма. Проверка должны выполняться во время исполнения.

Aceler ★★★★★
()
Ответ на: комментарий от kostik87

Та причем здесь готовое решение? Я его просил или что?

Ты даже не видя мой код,выписываешь мне что я ничего делаю и жду лично от тебя решение. Да боже,костик я делаю задание наперед,мне в первые потребовалась помощь на форуме,потому что для себя я информацию в гугле по началу не нашел.

Теперь постараюсь вообще не пользоваться такими форумами,потому что таких индивидумов куча. Который сами же себе накрутили что их просят и делают обязанных решить ту или иную задачку.

Ну значит ты глуп и тебе нужны были конкретные ответы.

Ты говоришь что я глуп,ты оприори не знаешь меня не знаешь моего имени,как ты можешь меня судить и говорить такие вещи? Я уверен и тебе больше 25 лет,я думал в таком возрасте люди по-другому мыслят и думают что говорят.

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

Цитата никак не относится к религий,гений.

Погугли, все приведенные цитаты имеют прямое отношение к религии. Для идиотов поясню - это цитаты из Библии. Ты продолжаешь демонстрировать свое невежество и неумение искать информацию!

Можешь не отвечать уже,ты бесполезный человек в обществе.

Ты свою «полезность» для общества уже продемонстрировал - тупое малолетнее быдло, неспособное самостоятельно учиться!

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

Видишь тебе задевает это,говорю же ты бесполезный человек.

Даже трудно назвать человеком:)

Ты свою «полезность» для общества уже продемонстрировал - тупое малолетнее быдло!

Мой тебе совет,займись чем-то и желательно полезным,а то уже мозги реально атрофировались. Да и наверно слов таких не знаешь,но если что загугли что-то новое узнаешь.

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

,мне в первые потребовалась помощь на форуме,потому что для себя я информацию в гугле по началу не нашел.

Что бы люди не думали, что ты ничего делаешь - выкладывай сюда свой код и говори, я написал уже вот это, вижу алгоритм так, но не понимаю как сделать дальше.

Поищи по форуму буквально последний месяц, может 3 недели на форуме стали появляться подобные твоей темы, явно от студентов, по крайней мере от учащихся. С очень простыми вопросами, которые гуглятся за пару минут.

Видимо, в вузах проходит промежуточная аттестация, да я в курсе, что это и сам работал и работаю в вузе.

И тоже, ни один из них не предоставил ни одного фрагмента кода.

Если ты действительно сам написал часть - молодец. Но твоя тема выглядит точно так же как и темы тех учеников, которые не могут написать простой код.

Теперь постараюсь вообще не пользоваться такими форумами,потому что таких индивидумов куча.

Не пользуйся. А если придёшь за помощью, то кроме самого задания показывай и код, который уже написал и описывай как ты сам понимаешь дальнейший ход решения задачи, вот тогда помогут.

А так, ты выглядишь как студент, который не ходил на лекции, практики, ничего не делал и теперь пришёл, чтобы ему решили задачу и он получил аттестацию.

Ты говоришь что я глуп,ты оприори не знаешь меня не знаешь моего имени,как ты можешь меня судить и говорить такие вещи?

Тут я возможно погорячился, но сам посуди, кода ты не предоставил, не изложил то, как ты видишь решение твоей задачи, не написал что именно ты не понимаешь. В общем, выглядишь как студент, который ничего не делал и просит сделать за него.

Я уверен и тебе больше 25 лет,я думал в таком возрасте люди по-другому мыслят и думают что говорят.

В моём никнейм указан год моего рождения, можешь понять сколько мне лет.

Ну и повторю ещё раз, если ты хочешь именно помощи в решении, то тебе нужно показать код, который ты уже написал, описать алгоритм решения дальше, как ты его видишь и задать конкретный вопрос, что именно тебе не понятно.

Вот пример одной из тем: Напишите сценарий позволяющий вывести N строк файла начиная с заданной строки.

Но ему там написали решение.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от Rectangle8989

Мой тебе совет,займись чем-то и желательно полезным,а то уже мозги реально атрофировались. Да и наверно слов таких не знаешь,но если что загугли что-то новое узнаешь.

Тупой баранчик - ты уже погуглил цитаты из Библии? Понял, что обосрался прилюдно?

sigurd ★★★★★
()
Ответ на: комментарий от kostik87

Костик,с этого и можно было начать изначально и прочесть мой вопрос. И тогда не возникал бы между нами конфликта как такого.

Я не просил решение,мне было достаточно одной подсказки.

Я может не прав что не изложил свой код,я опять же говорю первый раз пользуюсь такими вещами,потому что до этого всегда получалось брать информацию из предложенной мне методички и все.

Но я учту что код нужно свой излагать,но я его специально не изложил что понять хотя бы алгоритм просто в самом терминале,а не сразу приступить к написанию скрипта.

Rectangle8989
() автор топика
Ответ на: комментарий от sigurd

Интересно получается,я уже и обосрался. А ты однако весельчак Игорек:)

Буду по умнее,просто еще раз констатирую факт что ты бесполезное существо. Пж не отвечай. Иди куда шел.

Rectangle8989
() автор топика
Ответ на: комментарий от Rectangle8989

Цитата никак не относится к религий,гений.

Вот тут ты и обосрался!

Cудимых не судите,да не будете судимы сами.

Для идиотов - это твоя цитата из Евангелия от Матфея. Она относится к религии или нет? Раз ты заговорил цитатами из Библии - я тебе ответил такой-же цитатой из Библии:

не бросайте жемчуга вашего перед свиньями, чтобы они не попрали его ногами своими и, обратившись, не растерзали вас.

И с чего ты взял, что мне нужны советы от малолетнего необразованного быдла - «иди спать», «не отвечай», «иди куда шел»?

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 3)
Ответ на: комментарий от Rectangle8989

Ну не знаю, может для вас норм подобное отношение, но для меня выглядит как грубость:

Гений,я написал два пункта не могу решить.
Опять одно и тоже,ты помечаешь те пункты которые я решил

То, что вы умный, только манов не читали, и так все поняли.

Я про уважение. Вам помочь пытаются. Относитесь несколько более уважительно к тем, кто пытается помочь, пожалуйста.

massimus ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.