Согласно ifconfig man:
Эта программа устарела! Для замены проверьте ip addr и ip link. Для статистики используйте ссылку ip -s.Таким образом, используя команду ip:
$ ip -s link
Мы можем получить сетевую статистику:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
173654497900 26078946 0 0 0 0
TX: bytes packets errors dropped carrier collsns
173654497900 26078946 0 0 0 0
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 12:34:56:78:90:00 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
3650412438854 399476618 0 2551849 0 0
TX: bytes packets errors dropped carrier collsns
617437624480 321390259 0 0 0 0
Или
$ ip -s -h link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 addrgenmode eui64
RX: bytes packets errors dropped overrun mcast
174G 26.1M 0 0 0 0
TX: bytes packets errors dropped carrier collsns
174G 26.1M 0 0 0 0 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 12:34:56:78:90:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 addrgenmode eui64
RX: bytes packets errors dropped overrun mcast
3.65T 399M 0 2.55M 0 0
TX: bytes packets errors dropped carrier collsns
617G 321M 0 0 0 0
Пока это сценарий оболочки sh (Dash или эквивалентный), нет, нет никакой внешней разницы.
Проблема в .run не гарантирует, что это так. Он может быть двоичным. Это может быть Bash или Python или PHP или что-то еще; все они имеют хэширование скрипта. Если вы слепо пропустите его через sh, кто знает, что может случиться. Вероятно, это ошибка, но он может случайно запустить вредоносный код до того, как до него дойдет.
По chmod ding it (чтобы включить бит разрешения выполнения), а затем запустив его ./script.run, вы даете это лучшая возможная возможность работы. Если это скрипт оболочки, его хеш-бэнг будет правильно проанализирован, и если он будет бинарным исполняемым файлом, он будет запускаться изначально.
Эти два метода часто действуют одинаково, но очень разные.
sh ./script запускает команду sh с аргументом ./script, который, случается, выполняет данный скрипт .. даже если сценарий на самом деле не скрипт sh (плохой)
./script выполняет данный файл. Он делает это, ища строку «shebang», чтобы определить, какую команду запускать. Если unspecified, он использует sh (это два метода действуют одинаково иногда), но часто задается другой интерпретатор.
Например, если filename содержит следующее:
[ f1].. тогда две команды очень разные:
$ sh script
script: line 3: print: command not found
$ chmod +x script
$ ./script
This is a Python script!
Если нет линии shebang, то они одинаковы:
$ cat script
echo "This is an sh script"
$ sh ./script
This is an sh script
$ ./script
This is an sh script
Важным отличием является то, что ваша линия hashbang имеет параметры. Например, если скрипт начинается с
#!/bin/bash -e
... и вы запускаете его извне с помощью sh или bash, эта строка будет интерпретироваться как комментарий и игнорироваться, поэтому (выход при сбое) не будет обработан. Итак, учитывая следующий скрипт:
#!/bin/bash -e
echo Hello
false
echo goodbye
Вывод для ./script будет просто «Hello», но выход для sh script будет Hello, а затем goodbye, который был вероятно, не предназначено.
Это, кстати, почему вы всегда должны использовать отдельный оператор set -e (в любом случае это хорошая идея - чаще всего, если есть проблема с средним скриптом, вы не хотел бы, чтобы его игнорировали).
Нет
[sudo] chmod +x ./<scrupt>.run делает исполняемый файл сценария, поэтому вы можете запустить его с помощью ./<script>.run. С помощью [sudo] sh ./<script>.run вы можете запустить его, даже если он не является исполняемым.