О .file и./каталоге беспорядках

Вы видите, на сколько имущество выделяются путем взгляда /proc/sys/kernel/pty/nr, однако это не обязательно будет то, сколько людей зарегистрировано.

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

6
27.01.2019, 01:33
6 ответов
[115332] Вероятно, вы запутались, потому что эти файлы не имеют расширений (окончания типа [115808].txt[115809]), которые необходимы для определения содержимого файла в Windows. [12200]В Linux большинство программ не полагаются на расширение файла, чтобы определить, какой программой его открыть, а вместо этого смотрят на его первые несколько байт ([115810] "волшебные байты"[115811]), которые обычно раскрывают тип файла.[12201]Благодаря этому расширения файла часто могут быть опущены, и вы столкнетесь с множеством текстовых файлов [115812]README[115813] и скриптов [115814] configure[115815]. [115337]
21
27.01.2020, 20:20
[115310] Ваши 2 примера совершенно не связаны друг с другом, поэтому я буду обращаться к ним как к таковым. [12190] [12191]. /configure[12192]Это shell-нотация, означающая выполнение файла с именем [115768]configure[115769] в текущей рабочей директории.[12193]Обычно, когда вы хотите запустить программу, такую как [115770]/bin/ls[115771], вы просто вызываете ее как [115772]ls[115773]. Вам не нужно указывать путь. Это работает, потому что в вашем shell'е есть переменная с именем [115774]$PATH[115775], которая имеет список мест для поиска, когда вводится неквалифицированная команда. Так что [115776]$PATH[115777] будет содержать [115778]/bin[115779], и когда вы запускаете [115780]ls[115781], он ищет его в [115782]/bin[115783], и выполняет его.[12194]Теперь, когда вы хотите запустить программу, которой нет в [115784]$PATH[115785], вы должны квалифицировать этот путь. Если в настоящее время вы находитесь в [115786]/home/johndoe[115787], и у вас есть программа/скрипт с именем [115788]configure[115789] в этом каталоге, вы можете либо запустить ее как [115790]/home/johndoe/configure[115791], либо [115792]./configure[115793]. Так как вы уже находитесь в этом каталоге, нотация [115794]./[115795] короче.[12195] [12196]nano /something/something2[12197] В этом случае вы просто передаете аргумент в [115796]nano[115797]. Больше это не имеет значения. [12198]nano[115799] - это редактор. Поэтому вы просто передаете [115800]/что-то/что2[115801] в качестве аргумента в [115802]nano[115803]. Это зависит от того, что он хочет сделать с этим аргументом. Редактор может посмотреть на этот аргумент и сказать: "О, это файл, давайте откроем его", а может сказать: "О, это каталог, давайте перечислим содержимое и позволим пользователю выбрать файл". Или это может привести к ошибке :-)[12199]Смысл в том, что в то время как [115804]nano[115805] может разумно определить, что такое [115806]/что-то/что-то2[115807], это полностью зависит от nano. Другой редактор или программа могут реагировать совершенно по-другому. [115331]
10
27.01.2020, 20:20
[115342]В мире unix есть файлы, а есть каталоги. И больше ничего. Все файлы редактируются, выбор подходящей программы остается за пользователем.[12209]./configure[12210]Здесь три части: . которая ссылается на текущий каталог, / которая разделяет каталоги, и [115848]configure[115849], которая является именем файла (должно быть, так как не заканчивается на /.[12211]configure[115851] - это соглашение unix, а не правило. Большинство пакетов программ содержат этот сценарий для настройки компилятора. Есть достаточно незначительные различия между системами, что это должно быть сделано локально. Я могу набрать [115852]./configure[115853], затем [115854]make[115855], затем [115856]make install[115857] на многих стандартных пакетах, не беспокоясь о README.[12212]/something/something2[12213]отличается от ./something/something2 тем, что начинается с верхней части файловой системы, а не с текущего каталога.[12214]Другие вещи, которые вам нужно знать:[12215].../configure[115859] запустит (или чаще не найдет) файл с именем configure в родительском каталоге (две точки)[12216].configure[115861] запустит скрытый файл (начинается с точки, без косой черты)[12217]пример:[12218]mv это то, что[115863] переименует файл, но останется в той же папке. если [115864]что[115865] уже существует, то он будет заменен. Нет вопроса "вы уверены".[12219]mv это ./что[115867] является тем же самым[12220]mv что[115869] переименовывает и перемещает новый файл в одну папку[12221]mv это .что[115871] переименовывает файл, как и раньше. Он все еще находится в той же самой папке, но теперь имеет ведущую точку, поэтому он исчезает из пользовательского интерфейса и обычных списков папок. [115872]mv .that[115873] восстанавливает его видимость.[12222]Предупреждение[12223]rm /something/something2[115875] удаляет один файл с именем [115876]something2[115877] в папке верхнего уровня [115878]something[115879]. Если [115880]something2[115881] является каталогом, это возвращает ошибку.[12224]rm -r /something/something2[115883] удаляет [115884]something2[115885] в папке верхнего уровня [115886] something[115887]. Если [115888]что-то2[115889] является каталогом, то удаляется каталог и ВСЕ СОДЕРЖАНИЯ. Опять же, никакие "вы уверены"[12225]rm -r / something/something2[115891] (обратите внимание на пробел) не удаляет каталог верхнего уровня и все содержимое. Другими словами, каждый файл в вашей системе. Это не удастся по ряду причин, но приведет к путанице. Когда все удаляется, он ищет [115892]что-то/что-то2[115893] в текущей папке (без лидирующего слэша) и также удаляет это.[115377].
2
27.01.2020, 20:20
[115384]Я только что написал это в качестве комментария, но я думаю, что это также может помочь ответить на ваш вопрос для [115898]./configure[115899] части. [12230]Существует важная разница между Windows и linux в том, что касается поиска команды для выполнения.[12231]В Windows, текущий каталог всегда рассматривается первым в PATH w/o, фактически находящемся там.[12232]В linux (ну по крайней мере, bash) текущий каталог не находится в PATH, если только вы явно не поместили его туда. [12233]Когда вы набираете имя в командной строке Windows, например [115900]zip[115901], он сначала ищет текущую директорию для этой команды (используя некоторые специфические правила о расширениях для определения того, что является исполняемым файлом, на который на самом деле может ссылаться [115902]zip[115903]), если он находит соответствующий исполняемый файл, он выполняет его, в противном случае он просматривает каждую директорию, перечисленную в переменной окружения PATH. [12234]В типичной командной строке оболочки linux, ввод команды работает аналогично EXCEPT, что имя без компонента пути можно найти, только посмотрев в каталогах, перечисленных в переменной окружения PATH. Кроме того, как было сказано в другом ответе, linux не заботится о расширениях для определения типа файла, так что если вы не наберете расширение как часть имени, оно не будет найдено, поэтому многие файлы не имеют расширений). [12235]Это означает, что в оболочке linux, если вы наберете [115904]configure[115905] путь будет искать исполняемый файл с именем configure[115906], но если текущий каталог не находится в этом пути, файл [115907]configure` в этом каталоге не будет найден и не будет выполнен.[12236]Так как у вас часто бывают файлы, которые вы хотите выполнить в каталоге, который не находится в этом пути, вы можете запустить его, указав ему компонент пути в командной строке. Так как [115908].[115909] относится к текущей директории, вы можете использовать относительный путь для настройки в текущей директории, набрав [115910]./configure[115911]. Если вы хотите запустить команду [115912] configure[115913], которая была в подкаталоге [115914] build[115915] текущей директории, вы набираете [115916] build/configure[115917].[12238] Вы можете добавить текущую директорию (как [115918].[115919]) к вашему пути в linux, но это считается плохой идеей, смотрите [115920] Безопасно ли добавлять . к моему PATH? Почему? [12239]
0
27.01.2020, 20:20
[116423]Я всегда использую "ls -la" для составления списка каталогов. Вся необходимая мне информация находится в выводе, -la означает "list all"[12149]из прав, которые вы можете увидеть, является ли это каталог, потому что там написано 'd'. Вы также можете использовать команду 'file', чтобы показать информацию о файле или каталоге, это использует 'magic', о котором n.st написал ... альтернативно я использую 'tab' completion' после того, как я набрал первые буквы файла или каталога. Так что если я набираю 'cd dow' и нажимаю TAB, он завершает его до 'cd downloads', только если это каталог, а если я набираю 'nano conf', он завершает его до 'nano configure'... Командная строка Windows имеет похожую функцию.[12150]The . означает этот каталог и ... означает один каталог вверх.[12151]Configure имеет исполняемый бит 'x' в разрешениях и может быть запущена. Но так как этот каталог не находится в PATH по умолчанию, вы должны указать, где найти конфигурацию, которая находится в каталоге 'this'. Поэтому ./configure означает выполнение этого сценария в этом каталоге.[12152]Если вы запустите nano в каталоге, он откроет nano, но предупредит вас "это каталог" ... для vi он просто покажет вам структуру каталога.[12153]Есть также скрытые файлы, которые начинаются с точки, в моем примере .aptitude - это файл, который показывает только "a" в 'ls -la'[116434].
0
27.01.2020, 20:20
[116473]Добро пожаловать на Темную Сторону, г-н Джаниква ;-).[12167]Ответы на ваши вопросы один за другим:[12168]. /configure[12169]То, что люди называют "командами" в Linux или UNIX - это обычно два вида вещей:[12170]либо конструкция [117035]shell[117036] (a [117037]builtin[117038], функция [117039]shell[117040], [117041]alias[117042]),[117043]. и всё такое [12171] или [117044] исполняемый[117045] файл[12172] Чтобы предоставить вам некоторый контекст здесь, то, что люди называют [116860]shell[116861], обычно является программой, чья задача состоит в том, чтобы принять некоторый ввод, а затем попытаться интерпретировать этот ввод, и после этого действовать соответственно (выполнить его, если это исполняемый файл, и т.д.). [12173] Когда вы вводите некоторый текст в оболочку, а затем нажимаете enter, примерно следующее происходит: [12174] Оболочка принимает входные данные, создавая лексические маркеры, соответствующие вводимым данным. Например, учтите, что вы вводите [117046]gcc hello_world.c[117047] в оболочку. В результате появятся следующие лексемы [117048]gcc[117049] и [117050]hello_world.c[12175]После токенирования, оболочка попытается понять, что такое первая лексемена (в нашем случае [117052]gcc[117053]). Сначала он увидит, является ли это [117054]shell конструкцией[117055] (функция, псевдоним или сборка) или это [117056]абсолютный путь[117057] (местоположение относительно каталога [117058]root[117059]) к исполняемому файлу (что-то вроде [117060]/usr/bin/gcc[117061])[12176], если это ни то, ни другое из вышеперечисленного, оболочка начнет поиск каталогов, перечисленных в переменной окружения [117062]PATH[117063], чтобы посмотреть, может ли она найти файл с таким же именем. Если находит, то обычно выполняется [4], а остальные лексемы передаются в качестве аргументов. Если нет, то обычно выводится сообщение об ошибке вида this[5]:[116869]. [116488] [116489] [116870] [23:25:59] nlightnfotis@mars : [~] $ lelos bash: lelos: команда не найдена...[12178]Теперь вы, как пользователь, обычно работаете в определенном дереве каталогов в файловой системе, известном как папка вашего пользователя [116872]home[116873], обычно обозначаемом как [116874]~[116875]. Обычно Вы, как пользователь, на самом деле пишете программу или скрипт оболочки (последовательность команд оболочки, которые обрабатываются не интерактивно). [12179] Теперь, предполагая, что Вы напишете программу на языке c и скомпилируете ее в исполняемом файле [116876]hello[116877], у Вас есть два способа ее выполнения. Первый - переместить или скопировать ее в каталог, который находится в [116878]$PATH[116879] (или добавить текущую папку в [116880]$PATH[116881], но из соображений безопасности это плохая идея) [116882] или [116883], выполняя ее прямо из той папки, которой Вы являетесь. Для последнего вы используете [116884]dot slash[116885] (./), чтобы предшествовать командам, которые вы хотите, чтобы оболочка выполняла, и искать их в папке, в которой вы в данный момент находитесь. [12180]nano /something/something2 [12181] Это что-то2 в файле? Похоже на каталог, я не... понимаешь, как это можно редактировать? То же самое с ./configure. Что это такое означает?[12182]В мире UNIX универсальная абстракция над всем - это абстракция файла. Это означает, что все (или почти все, что имеет значение), даже если это изображение, текстовый файл или даже устройство, обычно может быть [116890]read()[116891] или [116892]write()[116893] любой программой, которая этого хочет. Что касается операционной системы, это может быть что угодно, но для приложения, работающего в пользовательском пространстве, оно будет представлено в виде последовательности байт, которая зависит от того, как приложение будет представлять или манипулировать.[12183]Хороший первый способ понять, что такое что-то, это использовать команду [116894]ls[116895], используя флаг [116896]-l[116897] тоже. Это даст результат, аналогичный этому:[12184]В результате вы получите несколько столбцов, первый из которых соответствует разрезам, Вторая - количество жёстких ссылок, третья - владелец файла, четвёртая - группа файлов, следующая - размер файла, за ней следует время модификации и последнее, но не менее важное, имя файла.[12185]Чтобы легко понять, является ли что-то каталогом, вы заметите в его разрешениях первую букву, которая будет [116898]d[116899]. Это сигнализирует о том, что объект является каталогом.[12186]Если вы все еще видите файл и не уверены в его природе, вы можете воспользоваться утилитой userspace, называемой [116900]file[116901], которая пытается классифицировать файл по тому, что известно как его [116902]магическое число[116903], обычно некоторые байты хранятся в начале или рядом с ним. Например, запуск [116904]файла[116905] на этом bzip2 файле приводит к:[12187]Для текстового файла вывод аналогичен:[12188]Не стесняйтесь экспериментировать с файлом [116906]и разными типами файлов.[12189]Теперь, чтобы ответить конкретно на ваш [12190]вопрос, я не понимаю, как его можно редактировать?[12191]вопрос, ответ очень прост. Как я уже упоминал ранее, все представляет собой последовательность байт. Вы просто меняете эти байты. [12192]Если это текстовый файл, вы открываете его с помощью текстового редактора, меняете букву, а затем сохраняете. Это соответствует тому, что ваш текстовый редактор находит смещение в файле, в котором находится этот символ, и меняет его байты на байты, которые представляют новый символ.[12193]Что касается двоичных (т.е. не текстовых) файлов, то ответ на этот вопрос довольно прост: Опять-таки вы используете какую-то программу, либо часть программы, разработанную специально для работы с таким типом файлов, либо вы просто используете шестнадцатеричный редактор (или просто обычный текстовый редактор) для его редактирования. Например, вы можете использовать [116910]vim[116911], текстовый редактор, чтобы редактировать двоичный файл, такой как [116912]python[116913], как этот: [116914]vim /usr/bin/python[116915]. В результате получится экран, подобный этому:[12194]Много странных символов в нем, это всего лишь простые байты, которым не хватает репрезентабельного символа в ASCII. Для входа в шестнадцатеричный вид в vim, просто введите, находясь внутри него [116917]:%!xxd[116918]. Вам покажут экран вроде этого:[12195]Затем перейдите к редактированию файла, сохраните ([116920]:wq[116921]), а затем выйдите из шестнадцатиричного вида, набрав [116922]:%!xxd -r[116923]. [116924]Просто будьте осторожны, чтобы не выбросить важный бинарный файл во время экспериментов, или проводите эксперименты внутри виртуальной машины, и все будет хорошо.[12196]Другой полезный инструмент, который вы можете использовать для [116926]просмотра[116927] байтов любого файла - это [116928]hexdump[116929]. На самом деле, попробуйте создать пустые файлы или файлы всего с несколькими символами, [116930]hexdump -C[116931] их, и посмотрите на вывод и ASCII таблицу на минуту просветления : )[12197]Если вы хотите увидеть (ассемблерный) код, соответствующий этим байтам (когда мы говорим об исполняемом файле), вы можете также использовать другой инструмент, названный [116932]objdump[116933] для их изучения, также как и [116934]objdump -d /usr/bin/python[116935]. На моем экране он производит так:[12198]Надеюсь, все это было полезно, и может быть исходный текст с вами :)[12199]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[12200]Сноски:[12201]Специфические механизмы, лежащие в основе двух вызовов системы UNIX, известные как [116941]fork()[116942] и [116943]exec()[116944]. В коде оболочка [116945]fork()[116946] сама по себе создает дочерний процесс, который затем продолжает вызывать [116947]exec()[116948] с первым маркером в качестве первого аргумента, чтобы заменить его основной образ (код) на двоичный, на который он ссылается [116949]exec()[116950]. [12202]Рабочий код для этого выглядит следующим образом (выгружен немного вниз, чтобы быть как можно более простым):[12203]Хорошо, все объяснение оболочки было немного упрощенным, так как есть больше вещей, которые делает оболочка, например, парсинг, потому что команда, данная ей, может быть больше, чем простой исполняемый файл с некоторыми аргументами, и включать перенаправления вывода, труб и т.д., которые следуют специальным курсам действий, но все же общее описание того, что делает оболочка, является довольно точным. Для небольшой и работающей оболочки посмотрите реализацию оболочки [116951]xv6[12204]
0
27.01.2020, 20:20

Теги

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