- SO файлы
- Linux Kernel Library: ядро Linux в форм-факторе so или dll
- Первичное знакомство
- Попробуем что-нибудь написать
- Усложняем эксперимент
- Настраиваем параметры сборки LKL
- Позвольте, а где обещанные готовые программки?
- Немного про кросс-платформенность
- Como usar o comando ls no Linux
- O Comando ls no Linux
- Como usar o comando ls
- Listando arquivos em um diretório específico
- Listar arquivos no diretório raiz
- Listar arquivos no diretório pai
- Listar arquivos no diretório pessoal
- Listar apenas diretórios (sem arquivos)
- Listar arquivos com subdiretórios
- Listar arquivos recursivamente
- Listar arquivos com seu tamanho
- Listar arquivos com informações detalhadas
- Listar arquivos com tamanho legível
- Listar arquivos ocultos
- Tubulação ls com Comando Grep
- Classificar arquivos por hora e data
- Classificar arquivos por tamanho
- Listar arquivos e enviar saída para um arquivo
- Exibindo o conteúdo de um diretório com o comando ls
SO файлы
Объясните пожалуйста что такое SO файлы? это некий аналог DLL или совсем их другой оперы?
> это некий аналог DLL
Собственно, это и есть динамически подгружаемые библиотеки.
Почитайте man ld.so, довольно интересно.
сложно набрать в яндексе разделяемые библиотеки линукс?
разделяемый обьект,
может быть как аналогом .DLL
так и «плагином», открываемым из программы через dlopen() функцию
в отличие от Dynamically Loadable Library
> в отличие от Dynamically Loadable Library
в оффтопике тоже можно реализовать плагинную систему на основе dll.
> в отличие от Dynamically Loadable Library
жаль разработчики qt этого не знают, а то у них все плагины в виде .dll … 😉
dll можно вручную загрузить.
там .so открываемые через dlopen()
в винде нет .so и dlopen(), насколько я помню 😉
Зато есть LoadLibrary() и LoadLibraryEx(), если склероз меня не подводит.
dll открываются через LoadLibrary
>Dynamically Loadable Library
Dynamic-Link Libraries. Хотя бы иногда надо читать MSDN.
в отличие от Dynamically Loadable Library
Неужели есть принципиальные отличия между SO и DLL?
разве что во внутренней архитектуре. а так принцип действия один и тот же;
те в линуксе может существовать два варианта библтиотек — DLL и SO ?
те в линуксе может существовать два варианта библтиотек — DLL и SO ?
Так dll же мастдайные аналоги so, как вы их в линуксе без wine’а использовать собираетесь?
ну как писалось выше в qt то они используются. просто пишу тут кое что для андроида используя jni и тут есть эти so файлы.
Итак: в линуксе библитета это SO файл, а в винде — DLL? Я правильно понял?
Источник
Linux Kernel Library: ядро Linux в форм-факторе so или dll
Когда-то читал статью о выборе файловых систем «чтоб везде-везде работало». В ней в очередной раз увидел жалобы, что Ext4 замечательная файловая система, но на Windows есть только кривые неточные проприетарные драйверы. Но отмотаем ленту ещё на пару лет назад: тогда на Хабре (а в те времена — Гиктаймсе) пролетала новость про LibOS — попытку превратить Linux kernel в обычную библиотеку пользовательского режима. Упор там делался на вынос сетевого стека в user space. Как-то раз я решил поглядеть, а жив ли вообще проект, и в их блоге увидел ссылку на своего рода конкурента — проект Linux Kernel Library (LKL). По сути, это порт ядра, так сказать, на аппаратную архитектуру «библиотека пользовательского режима POSIX / Win32».
Чем интересна LKL? Во-первых тем, что она живёт и здравствует, пусть и не в основной кодовой базе ядра. Во-вторых, это более-менее честная поддержка «архитектуры», автоматически делающая доступной бОльшую часть ядра. Более того, прямо в комплекте идут утилиты-примеры: cptofs / cpfromfs , fs2tar , lklfuse . В этой статье мы протестируем LKL на хостовом Linux, заглянем в файл с образом Ext4 (Btrfs, XFS. ) без рута и виртуалок и коротко обсудим, как её можно попробовать на Windows.
DISCLAIMER 1: Захотите попробовать — делайте бекапы. Если вы захотите проделать такое с разделом с важными данными — на свой страх и риск. Впрочем, здесь хотя бы драйверы будут реально родные.
DISCLAIMER 2: Уважайте лицензии. Вероятно, линковка с LKL делает вашу программу GPL’ной.
Первичное знакомство
Репозиторий LKL (lkl/linux на GitHub) представляет из себя форк обычного Linux kernel, в котором добавлена поддержка ещё одной архитектуры, в основном мы будет видеть это в каталогах arch/lkl и tools/lkl . Сделаем клон репозитория и попробуем собрать по инструкции. Для экспериментов я буду использовать shallow clone, который содержит не всю историю репозитория, а лишь указанное количество последних коммитов:
Пришлось чуточку поправить исходник, но в итоге получилась библиотека tools/lkl/lib/liblkl.so (а ещё — статическая tools/lkl/liblkl.a ):
А где же системные вызовы, спросите вы. Без паники, они спрятаны за общей точкой входа lkl_syscall . Это такой аналог функции syscall для LKL. В реальной же ситуации в большинстве случаев вы будете использовать типизированные обёртки lkl_sys_ . Также мы видим всякие функции для настройки «ядра», добавления в него виртуальных устройств, а также обёртки над «сложными» системными вызовами, в обычной системе предоставляемые libc. Например, есть такой системный вызов getdents , но… «These are not the interfaces you are interested in.» — с порога говорит нам man-страница. В обычных же случаях предполагается использовать стандартную библиотечную функцию readdir (3) , но не путайте её с readdir (2) — древним системным вызовом, который на x86_64 даже не реализован. В случае же работы с LKL вам потребуются обёртки lkl_opendir / lkl_readdir / lkl_closedir .
Попробуем что-нибудь написать
Напоминаю, уважайте лицензии. Сам Linux kernel распространяется под GPL2, будет ли программа, дёргающая за относительно публичные интерфейсы LKL считаться производной работой — я не знаю.
Что же, давайте попробуем слинковаться с библиотекой. Предполагается, что переменной $LKL присвоен путь до репозитория со скомпилированной LKL.
Можно даже видеть по timestamp’ам, что ядро не просто «выплюнуло» в консоль этот текст, а красиво постепенно грузилось как настоящее .
Усложняем эксперимент
Давайте теперь попробуем как-то по-настоящему использовать эту библиотеку — всё-таки целое ядро ОС! Попробуем чисто в user space прочитать файл с Ext4-раздела. Причём «родным» драйвером! За основу возьмём tools/lkl/cptofs.c и реализуем только самое необходимое (для наглядности):
Обратите внимание на переименованные define’ы с префиксами LKL_ (например, LKL_O_RDONLY ): на Linux-хосте они, скорее всего, совпадают с теми, что без префиксов, а вот на других системах — не факт.
Ух ты, работает! А что-нибудь более экзотическое?
Ой! Хотя, постойте, мы же, наверное, просто не включили в наше ядро-библиотеку поддержку SquashFS!
Настраиваем параметры сборки LKL
Для себя я выработал такую последовательность команд, которая работает для LKL — возможно, её можно сократить вплоть до традиционного make defconfig , make menuconfig , make .
В данном случае, правда, даже перекомпилировать read-file.c едва ли было нужно — библиотека-то динамическая.
Позвольте, а где обещанные готовые программки?
И действительно, в каталоге tools/lkl лежат cptofs.c , fs2tar.c и ещё много интересного, но оно не собирается! Порывшись в Makefile’ах я обнаружил, что есть некий Makefile.autoconf , который ищет требуемые заголовочные файлы, и Makefile.conf , куда это всё записывается.
Так-с, кто-то хочет libarchive , кто-то libfuse — ну что же, поставим libarchive-dev , libfuse-dev (в случае Ubuntu) и пересоберём. Всё равно не получается… А если удалить Makefile.conf … Опа, собралось!
Итак, что же теперь у нас есть? Теперь в каталоге tools/lkl у нас есть cptofs , fs2tar и lklfuse .
Для начала скопируем cptofs под именем cpfromfs :
Как говорится, «Как вы яхту назовёте. ». Запускаем.
Хмм… Надо посмотреть… Впрочем, для интерактивного использования оно всё равно неудобно, поскольку каждый раз приходится ждать около секунды, пока ядро загрузится. Зато fs2tar работает без проблем:
Но самая интересная программа здесь на мой взгляд — это lklfuse :
По-моему, впечатляет: можно без рута (но тут зависит от настроек системы) подмонтировать файловую систему через FUSE, поработать с ней, отмонтировать — а потом подключить к хостовому ядру (уже с рутом) и продолжить, как ни в чём не бывало.
Мало того, что lklfuse позволяет обычному пользователю подмонтировать раздел с помощью штатного драйвера ядра. Хостовое ядро вообще не обязано быть собрано с поддержкой этой ФС. Да что уж там, не удивлюсь, если это всё точно так же заведётся на OS X.
Немного про кросс-платформенность
А что же с доступом к линуксовым ФС из других операционных систем? На OS X, думаю, будет попроще: всё-таки она полноценный UNIX, да и поддержка FUSE, вроде, есть. Так что есть надежда, что оно заведётся с ходу. Если нет, я бы посмотрел в сторону проверки того, везде ли в системные вызовы LKL передаются константы с префиксами LKL_ , а не их хостовые аналоги.
С Windows несколько сложнее: во-первых, там банально может не быть некоторых привычных в мире UNIX библиотек (например, для разбора аргументов командной строки). Во-вторых, нужно понять, как подмонтироваться к хостовому дереву файловых систем. Самое простое было бы — так же через FUSE. Говорят, когда-то был некий Dokan, сейчас тоже что-то есть, но нужно гуглить. Главное, что сама LKL на Windows собирается, нужно только учесть, что ей требуется 64-битный тип long для работы в 64-битном режиме, поэтому не каждый компилятор подойдёт (по крайней мере, так написано в текущем readme проекта).
Источник
Como usar o comando ls no Linux
Obter informações detalhadas relacionadas aos arquivos em seu armazenamento é complicado se você não sabe como usar o comando ls. Aqui, discutiremos tudo associado ao comando ls no Linux, junto com alguns vários sinalizadores usados com ele.
O Comando ls no Linux
O comando ls é usado para listar todos os arquivos e pastas presentes em seu diretório de trabalho atual. Você também pode obter uma variedade de informações sobre os arquivos usando o mesmo comando. Uma vez que já está incluído no pacote de utilitários básicos GNU, você não precisa instalar nenhum pacote adicional em seu sistema para usá-lo.
Você também pode encadear ls com outros comandos bash. Por exemplo, canalizar uma instrução grep com ls permitirá que você pesquise e filtre o diretório para arquivos específicos.
Como usar o comando ls
A sintaxe básica do comando ls é:
Um dos usos mais simples do comando é listar todos os arquivos e pastas em seu diretório de trabalho atual.
Se você executar a instrução mencionada anteriormente no diretório raiz do seu sistema, verá uma saída semelhante a esta.
Listando arquivos em um diretório específico
Para listar arquivos que pertencem a uma pasta diferente (não ao diretório de trabalho atual), você terá que passar o caminho do diretório junto com o nome do comando.
Para obter a lista de todos os arquivos presentes no diretório / boot :
A saída agora mostrará os arquivos e pastas presentes no nome do diretório fornecido.
Usar o sinalizador -F com o comando adicionará um caractere / no final de cada diretório.
Você também pode passar vários diretórios, separando os nomes dos caminhos com um caractere de espaço .
Listar arquivos no diretório raiz
O diretório raiz contém todos os outros diretórios e arquivos em seu sistema. É a pasta mais alta na hierarquia de diretórios do seu computador. Um diretório raiz geralmente é denotado pelo caractere / .
Não importa em qual diretório você está no momento de inserir o comando, o comando mencionado acima produzirá uma saída que lista todas as subpastas e arquivos presentes no diretório raiz.
Listar arquivos no diretório pai
Um diretório pai no Linux é um diretório acima do diretório atual. Vamos pegar / usr / bin como exemplo. Aqui, / bin é seu diretório de trabalho atual e / usr é o diretório pai.
Para obter uma lista de todos os arquivos em um diretório pai:
Adicionar outro … levará você ao diretório pai do diretório pai. Por exemplo, / var / log / old é seu diretório de trabalho atual. ls .. listará as pastas presentes no diretório / log enquanto ls ../ .. fornecerá uma lista de todos os arquivos e pastas contidos no diretório / var .
Listar arquivos no diretório pessoal
O diretório inicial no Linux é denotado pelo caractere
. Portanto, para listar o conteúdo disponível em seu diretório inicial:
Listar apenas diretórios (sem arquivos)
Se por algum motivo você quiser listar apenas as pastas presentes em um diretório, use o sinalizador -d com o comando ls padrão.
Listar arquivos com subdiretórios
O uso do caractere * com o comando ls fornecerá a você uma lista de todos os arquivos e pastas no diretório de trabalho atual, junto com os subdiretórios também.
Listar arquivos recursivamente
Usar o sinalizador -R com o comando padrão listará todos os arquivos e pastas presentes dentro de um diretório até o último nível.
Observe que você também pode passar o caminho do diretório junto com o sinalizador recursivo. Isso significa que ls / usr / home -R é um comando válido.
Listar arquivos com seu tamanho
Para obter os nomes de todos os arquivos junto com seus tamanhos, use o sinalizador -s com o comando.
Listar arquivos com informações detalhadas
O sinalizador -l permite obter uma lista do conteúdo de um diretório do Linux com uma descrição detalhada de cada entrada. As seguintes informações estão incluídas na saída:
- Permissões de arquivo e pasta
- Número de links
- Proprietário de conteúdo
- Dono do grupo
- Tamanho do conteúdo
- Nome do arquivo
- Data e hora da última modificação
A primeira coluna é reservada para as permissões de arquivo e pasta. O primeiro caractere denota o tipo de arquivo e os próximos nove caracteres denotam as permissões do arquivo.
Os vários tipos de arquivos que você costuma encontrar:
- Arquivos normais (-)
- Bloquear arquivos especiais (b)
- Arquivos especiais de caracteres (c)
- Diretório (d)
- Link simbólico (l)
- Arquivo de rede (n)
- FIFO (p)
- Tomadas)
Por falar em permissões de arquivo, os seguintes caracteres são usados na saída.
Vamos tomar d rw-r – r– como exemplo. O primeiro caractere informa que a entrada é um diretório. Os dois caracteres a seguir indicam que o usuário atual tem permissões de leitura e gravação. O restante dos caracteres fornece informações sobre as permissões de arquivo para outros usuários.
Listar arquivos com tamanho legível
O comando -s fornece um valor numérico associado a cada entrada. E, como é óbvio, você não saberia qual é o significado desse valor. Portanto, para listar os arquivos e seus tamanhos de maneira legível, use o sinalizador -lh junto com o comando.
Especificadores de tamanho para bytes (B), megabytes (MB), gigabytes (GB) e terabytes (TB) são usados na saída.
Listar arquivos ocultos
O comando ls padrão não inclui arquivos ocultos na saída. Para listar o conteúdo definido como oculto pelo usuário, passe o sinalizador -a com o comando ls.
Tubulação ls com Comando Grep
O comando grep é usado para combinar padrões que seguem uma expressão regular específica. Você pode encadear este comando com ls para pesquisar arquivos presentes em seu sistema. No seu diretório raiz, digite:
Isso listará todos os arquivos e pastas que começam com l caractere. Você também pode filtrar seus arquivos de acordo com suas extensões usando grep.
Classificar arquivos por hora e data
Para listar todos os arquivos e classificá-los de acordo com a hora e data de criação / modificação, use o sinalizador -t junto com ls.
Classificar arquivos por tamanho
O sinalizador -S permitirá que você classifique os arquivos e pastas de acordo com seu tamanho.
Por padrão, os arquivos serão classificados em ordem decrescente (o maior arquivo primeiro). No entanto, você pode reverter facilmente esse comportamento adicionando r com o sinalizador -S .
Listar arquivos e enviar saída para um arquivo
Usando o caractere > , você pode enviar a saída do comando ls para qualquer arquivo.
Posteriormente, você pode ler o conteúdo do arquivo recém-criado digitando cat ls-output.txt em seu terminal.
Exibindo o conteúdo de um diretório com o comando ls
O comando ls é um dos comandos mais poderosos fornecidos aos usuários do Linux. Para obter o máximo de seus comandos no terminal, você pode tentar aprender os comandos de encadeamento juntos. Você pode até canalizar o comando mv para mover arquivos com ls.
A dica número um para se familiarizar com o Linux é memorizar alguns comandos básicos. Isso certamente irá ajudá-lo a se tornar muito mais eficiente e rápido ao usar seu sistema.
Источник