Linux проверить исполняемый файл

How find out which process is using a file in Linux?

You can use the fuser command, which is part of the psmisc package, like:

You will receive a list of processes using the file.

You can use different flags with it, in order to receive a more detailed output.

You can find more info in the fuser’s Wikipedia article, or in the man pages.

@khris, might be that not all fuser implementations are the same, or works the same way. Even if -i is defined in POSIX, the particular implementation you are using does not necessarily has the same options as the ones described in the Wikipedia article. For example, I’m using AIX right now, and the fuser available in this system does not have the -i option either.

For some reason, neither fuser nor lsof were working for me on a virtualbox guest. This answer saved me.

@jim’s answer is correct — fuser is what you want.

Additionally (or alternately), you can use lsof to get more information including the username, in case you need permission (without having to run an additional command) to kill the process. (THough of course, if killing the process is what you want, fuser can do that with its -k option. You can have fuser use other signals with the -s option — check the man page for details.)

For example, with a tail -F /etc/passwd running in one window:

ghoti@pc:~$ lsof | grep passwd tail 12470 ghoti 3r REG 251,0 2037 51515911 /etc/passwd 

Note that you can also use lsof to find out what processes are using particular sockets. An excellent tool to have in your arsenal.

Источник

Как проверить, является ли файл исполняемым, с помощью команды file в Bash?

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

Формулировка, использованная в задании, следующая:

Команду file следует использовать для общего определения типа файла аргумента и, в частности, является ли файл исполняемым типом или нет. Выходные данные команды файла будут включать специальное ключевое слово «исполняемый», если файл является исполняемым типом.

Далее в вопросе говорится:

  1. Используйте файл и найдите в выходных данных ключевое слово «исполняемый», чтобы определить, является ли файл исполняемым типом или нет.

Мне пока не удалось найти какую-либо документацию, объясняющую, как это сделать. Когда я тестирую это на bash-скрипте в CentOS8, он возвращает это как результат:

Читайте также:  Установка vnc server linux mint

Edit1 / found_the_answer_edit: Я попытался использовать идею ti7 об использовании тестового сценария, и он получил тот же результат, что и они. Это заставило меня задуматься. Сценарии для моих заданий должны быть отформатированы. В частности, чтобы получить признание наших скриптов, мы должны иметь:

#START SCRIPT #username `` at the beginning of the file and: 
at the end of it. I deleted these bits in my validate.sh file and when I tested it again with the file command I got the same output that I got from the test script. So the answer is that there isn't anything special. File just can't deal with a file that doesn't start with "#!/bin/bash" 

2 ответа

Ваш сценарий validate.sh , вероятно, не исполняемый, как это определяет file ! Вероятно, это потому, что на нем неправильный заголовок

% cat test.sh #!/bin/bash echo "foo" % file test.sh test.sh: Bourne-Again shell script text executable, ASCII text 

Как только это будет решено, вы можете проверить ключевое слово executable в ответе, возможно, с помощью grep

% file test.sh | grep -q executable ; echo $? 0 % touch test-empty.sh % file test-empty.sh | grep -q executable ; echo $? 1 

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

Обратите внимание, что команда тестовой команды на самом деле [ или [[ с небольшими отличиями

[[ -x "validate.sh" ]] && echo "executable" || echo "not executable" 

Вы можете проверить права доступа к нему с помощью ls , в котором перечислены файлы в каталоге и, при необходимости, их свойства.

Вы можете сделать свой скрипт исполняемым с помощью chmod (тривиально, chmod +x )

Не уверен, действительно ли это bash, работающий в Windows, и, возможно, WSL. Если это так, файл фактически вернет, что данный исполняемый файл Windows является исполняемым.

file write.exe write.exe: PE32+ executable (GUI) x86-64, for MS Windows 

Имея это в виду, вы можете перейти к grep и протестировать результат, т.е.

file write.exe | grep -q executable && echo "Executable" || echo "Not executable" Executable 

Источник

Linux. Где находиться данные в файле, является ли он исполняемый или нет?

Здравствуйте, на сколько я понял в Linux, в каждом файле есть выделенная память на 16 бит, где первые 4 бита — кодируется запись о типе файла, 3 бита — какие-то свойства исполняемости файла, и последние 9 бит — права доступа. Делятся по три группы, с битами отвечающими за чтение, запись, или исполнение, т. е. rwx rwx r-x.
Мне нужно в своей программе узнать является ли он исполняемый или нет. Как я понимаю есть два способа:
1) Системный вызов stat, и прочитать в структуре права доступа.
2) Самому найти эти 16 бит, но где они будут находиться в файле? И можно ли их будет прочитать системными вызовами open и lseek?

Они не в файле — они в описании файла в файловой таблице.
Так что или кури маны по своей файловой системе — или stat.

Читайте также:  Lenovo yoga linux mint

не знаю подойдет ли, но тупой вариант в лоб

ls -ld file_name | cut -c 4,7,10

выдаст только биты исполнения

а вообще вопрос не совсем корректен узнать исполняемый ли это файл можно с помощью
file file_name
строчка «executable» подскажет

а то что ты проверяешь просто права на исполнение файла

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

Источник

Как проверить, существует ли файл или каталог в Bash

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

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

Команда test принимает одну из следующих синтаксических форм:

test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 

Если вы хотите, чтобы ваш сценарий был переносимым, вам следует предпочесть старую команду test [ , которая доступна во всех оболочках POSIX. Новая обновленная версия тестовой команды [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

Проверьте, существует ли файл

При проверке существования файла наиболее часто используются операторы FILE -e и -f . Первый проверит, существует ли файл независимо от типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (а не каталогом или устройством).

Наиболее удобочитаемый вариант при проверке существования файла — использование команды test в сочетании с оператором if . Любой из приведенных ниже фрагментов проверит, существует ли файл /etc/resolv.conf :

FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exists." fi 
FILE=/etc/resolv.conf if [ -f "$FILE" ]; then echo "$FILE exists." fi 
FILE=/etc/resolv.conf if [[ -f "$FILE" ]]; then echo "$FILE exists." fi 

Если вы хотите выполнить другое действие в зависимости от того, существует файл или нет, просто используйте конструкцию if / then:

FILE=/etc/resolv.conf if [ -f "$FILE" ]; then echo "$FILE exists." else echo "$FILE does not exist." fi 

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

Вы также можете использовать команду test без оператора if. Команда после оператора && будет выполнена только в том случае, если статус выхода тестовой команды — истина,

test -f /etc/resolv.conf && echo "$FILE exists." 
[ -f /etc/resolv.conf ] && echo "$FILE exists." 
[[ -f /etc/resolv.conf ]] && echo "$FILE exists." 

Если вы хотите запустить серию команд после оператора && просто заключите команды в фигурные скобки, разделенные ; или && :

[ -f /etc/resolv.conf ] &&  echo "$FILE exist."; cp "$FILE" /tmp/; > 

Напротив && , оператор после || Оператор будет выполняться только в том случае, если статус выхода тестовой команды false .

[ -f /etc/resolv.conf ] && echo "$FILE exist." || echo "$FILE does not exist." 

Проверить, существует ли каталог

Операторы -d позволяют вам проверить, является ли файл каталогом или нет.

Например, чтобы проверить, существует ли каталог /etc/docker вы должны использовать:

FILE=/etc/docker if [ -d "$FILE" ]; then echo "$FILE is a directory." fi 
[ -d /etc/docker ] && echo "$FILE is a directory." 

Вы также можете использовать двойные скобки [[ вместо одинарной [ .

Проверьте, не существует ли файла

Как и во многих других языках, тестовое выражение может быть отменено с помощью ! (восклицательный знак) оператор логического НЕ:

FILE=/etc/docker if [ ! -f "$FILE" ]; then echo "$FILE does not exist." fi 
[ ! -f /etc/docker ] && echo "$FILE does not exist." 

Проверьте, существует ли несколько файлов

Вместо использования сложных вложенных конструкций if / else вы можете использовать -a (или && с [[ ), чтобы проверить, существует ли несколько файлов:

if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then echo "Both files exist." fi 
if [[ -f /etc/resolv.conf && -f /etc/hosts ]]; then echo "Both files exist." fi 

Эквивалентные варианты без использования оператора IF:

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "Both files exist." 
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "Both files exist." 

Операторы проверки файлов

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

  • -b FILE — Истина, если ФАЙЛ существует и является специальным блочным файлом.
  • -c FILE — Истина, если ФАЙЛ существует и является файлом специальных символов.
  • -d FILE — Истина, если ФАЙЛ существует и является каталогом.
  • -e FILE — Истина, если ФАЙЛ существует и является файлом, независимо от типа (узел, каталог, сокет и т. д.).
  • -f FILE — Истина, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).
  • -G FILE — Истина, если ФАЙЛ существует и имеет ту же группу, что и пользователь, выполняющий команду.
  • -h FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -g FILE — Истина, если ФАЙЛ существует и для него установлен флаг set-group-id ( sgid ).
  • -k FILE — Истина, если ФАЙЛ существует и для него установлен флаг липкого бита.
  • -L FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -O FILE — Истина, если ФАЙЛ существует и принадлежит пользователю, выполняющему команду.
  • -p FILE — Истина, если ФАЙЛ существует и является каналом.
  • -r FILE — Истинно, если ФАЙЛ существует и доступен для чтения.
  • -S FILE — Истина, если ФАЙЛ существует и является сокетом.
  • -s FILE — Истина, если ФАЙЛ существует и имеет ненулевой размер.
  • -u FILE — Истинно, если ФАЙЛ существует и установлен флаг set-user-id ( suid ).
  • -w FILE — Истина, если ФАЙЛ существует и доступен для записи.
  • -x FILE — Истина, если ФАЙЛ существует и является исполняемым.

Выводы

В этом руководстве мы показали вам, как проверить, существует ли файл или каталог в Bash.

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

Источник

Оцените статью
Adblock
detector