A network card can appear in ip link and still fail when an old runbook says to use ifup eth0. The ifup command in Linux only works when your system has an interface definition that its network stack understands, usually in /etc/network/interfaces or a distribution-specific compatibility layer. That makes ifup valuable for maintaining Debian-style servers, Alpine systems, openSUSE wicked setups, and legacy scripts, but it is not the universal replacement for NetworkManager, systemd-networkd, or the ip command.
Use ifup when the interface is already defined for an ifupdown-style manager. Use nmcli, networkctl, wicked, or ip link set when those tools own the interface instead. Keeping that boundary clear helps you bring a link up without fighting the active network manager.
Understand the ifup Command
ifup reads saved interface configuration and applies it. It is different from low-level commands such as ip link set eth0 up, which only changes the administrative link state and does not read your persistent address, route, DNS, bridge, VLAN, or hook-script configuration.
ifup Command Scope
The Debian ifup manual page defines ifup, ifdown, and ifquery as tools for configuring, deconfiguring, and parsing interface configuration. Debian’s implementation uses /etc/network/interfaces by default, keeps state under /run/network, and calls lower-level utilities such as ip to do the actual link and address work.
| Tool | Best Fit | Example Pattern |
|---|---|---|
ifup | Bring up an interface already defined for ifupdown, ifupdown-ng, wicked compatibility, or older network scripts | sudo ifup eth0 |
ifquery | Check what ifup can see before changing an interface | ifquery -l |
ip | Inspect or temporarily change link, address, route, and neighbor state | ip -br link show |
nmcli | Activate a NetworkManager connection profile | sudo nmcli connection up "Wired connection 1" |
networkctl | Control links managed by systemd-networkd | sudo networkctl up eth0 |
wicked | Control openSUSE wicked network configuration | sudo wicked ifup eth0 |
Do not run multiple network managers against the same interface. If NetworkManager, systemd-networkd, wicked, or ifupdown all try to own one link, the interface can bounce, lose routes, or return confusing stale-state errors.
ifup Command Syntax
Common Debian-style syntax takes either -a for automatic interfaces or one or more configured interface names:
ifup [options] -a
ifup [options] interface_name [interface_name ...]
The related commands use the same configuration database:
ifdown [options] interface_name
ifquery [options] interface_name
The interfaces manual page documents the file format that Debian-style ifup reads. A minimal static interface stanza looks like this:
auto eth0
iface eth0 inet static
address 192.0.2.10/24
gateway 192.0.2.1
The 192.0.2.0/24 range is reserved for documentation examples. Replace the interface name, address, prefix, and gateway with values from your network.
ifup Command Quick Reference
| Task | Command Pattern | What It Does |
|---|---|---|
| List interfaces known to ifupdown | ifquery -l | Prints interfaces marked for automatic startup in the active configuration. |
| Inspect one configured interface | ifquery eth0 | Shows parsed options for the named interface. |
| Bring up one interface | sudo ifup eth0 | Applies the saved configuration for eth0. |
| Bring up automatic interfaces | sudo ifup -a | Processes interfaces marked with auto. |
| Bring up hotplug class interfaces | sudo ifup --allow=hotplug eth0 | Acts only on interfaces listed in an allow-hotplug line. |
| Preview actions without changing the interface | ifup --no-act --interfaces=./interfaces.example eth0 | Prints commands that would run for a test configuration file. |
| Show commands before execution | sudo ifup --verbose eth0 | Useful when debugging hook scripts or route setup. |
| Force a stale-state retry | sudo ifup --force eth0 | Runs even when ifupdown state and real link state disagree. |
| Bring an interface down | sudo ifdown eth0 | Runs the matching deconfiguration path for eth0. |
Install the ifup Command
ifup is not guaranteed to be present on modern Linux installations. Ubuntu 26.04, for example, exposes the classic ifupdown package and related compatibility packages as optional universe packages, while NetworkManager is the normal desktop connection manager. Install ifup only when you are maintaining a system that actually uses an ifupdown-style configuration.
| Distribution Family | Current ifup Status | Use This Approach |
|---|---|---|
| Debian and Ubuntu | ifupdown provides ifup, ifdown, and ifquery; Ubuntu publishes the package from universe, and many modern installs omit it by default. | Install ifupdown only for /etc/network/interfaces workflows. |
| Alpine Linux | Alpine documents ifupdown-ng as part of alpine-base. | Use ifupdown-ng and Alpine’s /etc/network/interfaces model. |
| openSUSE and SLES | The openSUSE wicked manual documents the wicked ifup command. | Prefer wicked ifup and wicked configuration files. |
| Fedora | Fedora removed legacy network-scripts in Fedora 41, including legacy ifup/ifdown support. | Use nmcli connection up or networkctl up. |
| RHEL-family systems | RHEL 8 deprecated legacy network scripts; RHEL 9 release notes say the initscripts package is not installed by default, so ifup and ifdown are unavailable. | Use NetworkManager first; install NetworkManager-initscripts-updown only when a required script needs an ifup wrapper. |
| Arch Linux | Arch normally uses NetworkManager, systemd-networkd, netctl, or another selected manager. | Use the manager you enabled rather than adding Debian-style ifupdown habits. |
On Debian or Ubuntu systems that intentionally use /etc/network/interfaces, install the classic package with APT:
sudo apt update
sudo apt install ifupdown
On Ubuntu, ifupdown comes from the universe component. If APT cannot locate it on a minimal image, enable Universe on Ubuntu, then rerun sudo apt update.
On Alpine systems where ifupdown-ng is missing from a customized image, add it with APK:
apk add ifupdown-ng
On openSUSE systems using wicked, make sure wicked is installed before expecting the wicked-flavored ifup tooling:
sudo zypper install wicked
Check whether your shell or a standard admin path can resolve ifup:
for path in "$(command -v ifup 2>/dev/null)" /usr/sbin/ifup /sbin/ifup; do
[ -x "$path" ] && printf '%s\n' "$path" && break
done
A Debian-style install commonly returns:
/usr/sbin/ifup
Use the returned path when you check the implementation before trusting option behavior. A Debian or Ubuntu classic package usually uses this path:
/usr/sbin/ifup --version
The current Ubuntu 26.04 ifupdown package reports this first line:
ifup version 0.8.43ubuntu3
Use Practical ifup Command Examples
Find the Interface Name Before ifup
Modern interface names usually look like enp0s3, ens18, or wlp2s0, not always eth0. Start with the kernel’s link list:
ip -br link show
A typical brief link listing looks like this:
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> enp0s3 UP 08:00:27:6b:d6:84 <BROADCAST,MULTICAST,UP,LOWER_UP>
The first column is the name you would use with ifup only if that same name appears in the ifupdown configuration. Older instructions may also mention the ifconfig command in Linux, but ip is the normal inspection tool on current systems.
List Interfaces Known to ifup
ifquery shows what the ifupdown parser can see. This is the quickest way to separate a real kernel interface from an interface that ifup can actually manage:
ifquery -l
A small /etc/network/interfaces file with loopback and one Ethernet stanza might return:
lo eth0
If ip -br link show lists enp0s3 but ifquery -l lists only lo, then ifup enp0s3 has no saved stanza to apply.
Bring Up a Specific Interface with ifup
Use an interface name that already has an iface stanza:
sudo ifup eth0
A successful classic ifup run often prints nothing. Verify the result with the kernel’s address view:
ip -br addr show eth0
For a static test interface, the important fields are the interface state and expected address:
eth0 UP 192.0.2.10/24
If the interface stays DOWN, check link carrier, the configured interface name, the active network manager, and any hook scripts that run before address assignment.
Bring Up Automatic Interfaces with ifup
The -a option processes every interface marked with auto in the active configuration:
sudo ifup -a
Be careful with
sudo ifup -aover SSH. A bad route, gateway, bridge, VLAN, or hook script can interrupt the same connection you are using to repair the host. Prefer console access, out-of-band management, or--no-actfirst on remote servers.
Use ifquery -l first when you need to see which interfaces -a will consider:
ifquery -l
Use ifup with allow-hotplug Interfaces
The allow-hotplug class is common for interfaces that should start when the kernel detects the device. Bring up a hotplug-listed interface with --allow=hotplug:
sudo ifup --allow=hotplug eth0
Use ifquery to list matching hotplug entries before changing anything:
ifquery -l --allow=hotplug
The command prints only interfaces that belong to the allow-hotplug class in the parsed interfaces file.
Preview ifup Actions with --no-act
--no-act is the safest first pass when you are testing a new stanza. Create a disposable test configuration in /tmp:
mkdir -p /tmp/ifup-example/state
cat > /tmp/ifup-example/interfaces <<'EOF'
auto eth9
iface eth9 inet static
address 192.0.2.10/24
gateway 192.0.2.1
EOF
Preview the actions without applying them:
ifup --no-act --interfaces=/tmp/ifup-example/interfaces --state-dir=/tmp/ifup-example/state eth9
Classic ifupdown from Ubuntu 26.04 printed this dry-run plan from the disposable file:
run-parts --exit-on-error /etc/network/if-pre-up.d ip addr add 192.0.2.10/255.255.255.0 broadcast 192.0.2.255 dev eth9 label eth9 ip link set dev eth9 up ip route add default via 192.0.2.1 dev eth9 onlink run-parts --exit-on-error /etc/network/if-up.d
The dry run shows the major phases: pre-up hooks, address assignment, link activation, default route, and post-up hooks. It does not prove the real interface exists or that the route will work, but it catches many syntax and expansion problems before a live change.
The cleanup command removes only the disposable
/tmp/ifup-exampledirectory created in this section. Do not change the path unless you are certain it points to your own test files.
rm -rf /tmp/ifup-example
test ! -e /tmp/ifup-example && echo "ifup example removed"
Successful cleanup returns:
ifup example removed
Show Verbose ifup Output
--verbose prints commands as they run. Use it when the interface exists, the stanza is correct, and you need to see where the bring-up sequence stops:
sudo ifup --verbose eth0
Verbose mode is especially useful when pre-up, up, post-up, or hook scripts under /etc/network/if-up.d/ are involved.
Use a Logical Interface Name
Debian-style ifup can apply a logical interface definition to a physical interface. This pattern appears on older laptops, roaming profiles, and server templates:
sudo ifup eth0=home
The physical interface is eth0, while home is the logical stanza name. Keep these profile-style configurations simple, and verify the parsed result before applying it:
ifquery eth0=home
Use Advanced ifup Command Options
Use an Alternate Interfaces File
The --interfaces option is useful for testing a copied configuration file before changing /etc/network/interfaces:
ifquery --interfaces=./interfaces.test eth0
ifup --no-act --interfaces=./interfaces.test eth0
Use this as a parser and dry-run check. A successful dry run does not make DNS, firewall, switch, VLAN, DHCP, or gateway reachability correct.
Exclude One Interface from ifup -a
--exclude keeps a matching interface out of a bulk -a run:
sudo ifup -a --exclude=eth1
This is useful when one interface is unstable or intentionally disconnected, but you still need to bring up the rest of the automatic set.
Skip Hook Scripts During ifup Testing
--no-scripts skips scripts under /etc/network/if-*.d/. Use it only as a troubleshooting branch, not as your normal startup command, because those scripts may set routes, firewall state, VPN hooks, monitoring tags, or resolver updates:
sudo ifup --no-scripts eth0
If --no-scripts succeeds but normal ifup eth0 fails, inspect scripts in these directories:
ls -1 /etc/network/if-pre-up.d/
ls -1 /etc/network/if-up.d/
Review custom scripts carefully before disabling them. Some are package-owned and expected by the network stack.
Force ifup When State Is Stale
The ifupdown state file can disagree with reality when another tool changed the interface. The Debian manual notes this exact stale-state problem and documents --force for those cases:
sudo ifup --force eth0
Use --force after you understand why state drift happened. If NetworkManager, systemd-networkd, or a custom script is still changing the same interface, forcing ifup only hides the ownership conflict for one run.
Use ifup Safely with Modern Network Managers
Many current systems keep ifup absent or provide it only as a compatibility wrapper. Check the active network owner before copying older commands into a production shell:
systemctl is-active NetworkManager 2>/dev/null || true
systemctl is-active systemd-networkd 2>/dev/null || true
systemctl is-active networking 2>/dev/null || true
A NetworkManager-managed desktop can return:
active inactive inactive
If a unit is not installed on your distribution, systemctl may print unknown. Treat that as a manager-not-present signal and continue with the tool that actually owns the interface.
That host is a NetworkManager system, so nmcli is the safer persistent-control path:
nmcli connection show
sudo nmcli connection up "Wired connection 1"
sudo nmcli connection down "Wired connection 1"
For systemd-networkd systems, use networkctl against the managed link:
networkctl list
sudo networkctl up eth0
sudo networkctl down eth0
For openSUSE wicked systems, use wicked’s command form so the request goes through the same manager that owns the configuration:
sudo wicked ifup eth0
sudo wicked ifdown eth0
sudo wicked ifstatus eth0
For one-time link-state testing, the ip command can raise or lower the administrative state without applying persistent address configuration:
sudo ip link set eth0 up
sudo ip link set eth0 down
That ip form is temporary. It will not read /etc/network/interfaces, NetworkManager keyfiles, systemd-networkd .network files, or wicked sysconfig files.
Troubleshoot Common ifup Errors
Fix ifup Command Not Found
A missing binary usually means the system uses another network manager or the compatibility package is not installed:
bash: ifup: command not found
Check whether the command exists in your shell path or in a standard admin directory:
for path in "$(command -v ifup 2>/dev/null)" /usr/sbin/ifup /sbin/ifup; do
[ -x "$path" ] && printf '%s\n' "$path" && break
done
If the check prints /usr/sbin/ifup but plain ifup still fails, your normal user PATH does not include the admin binary directory. Use sudo ifup, an absolute path, or a root shell for live changes. If the check prints nothing on Debian or Ubuntu and the host really uses /etc/network/interfaces, install ifupdown. If the host uses NetworkManager or systemd-networkd, use nmcli or networkctl instead of adding another network stack.
Fix No Interface Specified
Running classic ifup with neither -a nor an interface name returns:
ifup: no interface(s) specified ifup: Use --help for help
Provide a configured interface name or process automatic entries:
sudo ifup eth0
sudo ifup -a
Use ifquery -l first when you are not sure which names the configuration provides.
Fix Unknown Interface Errors
If the interface has no matching stanza, classic ifupdown reports:
ifup: unknown interface eth9
Compare the kernel’s interface list with the ifupdown parser:
ip -br link show
ifquery -l
Fix the name mismatch in your interfaces file, or use the manager that actually owns the interface. On predictable-name systems, replacing eth0 with a real name such as enp0s3 is often enough, but only if that same name is configured for ifupdown.
Fix Cannot Find Device Errors
A stanza can parse correctly while the kernel still lacks that device:
Cannot find device "eth9" ifup: failed to bring up eth9
Check the real link name, driver state, virtual interface creation order, or VLAN/bridge parent. If the interface is virtual, make sure its parent exists before ifup tries to configure it.
Fix Operation Not Permitted Errors
Applying live interface changes requires root privileges. Running a real bring-up as a normal user can fail like this:
RTNETLINK answers: Operation not permitted ifup: failed to bring up enp0s3
Use sudo for live changes:
sudo ifup enp0s3
Keep sudo off read-only checks such as the path-detection loop, /usr/sbin/ifup --version, and most ifquery parser checks unless your local permissions require it.
Fix RHEL or Fedora ifup Compatibility Problems
On newer Fedora and RHEL-family systems, missing ifup is often expected. Fedora removed legacy network-scripts in Fedora 41, and RHEL 9 documents nmcli connection up and nmcli connection down as the normal alternatives when ifup and ifdown are unavailable by default. RHEL 9 also names NetworkManager-initscripts-updown as a compatibility package when an ifup wrapper is still required.
nmcli connection show
sudo nmcli connection up "Wired connection 1"
sudo nmcli connection down "Wired connection 1"
Do not install a legacy compatibility package just because an old script says ifup. First decide whether that script should be migrated to NetworkManager, systemd-networkd, or wicked for the system you actually run.
Conclusion
ifup is useful when a configured ifupdown-style stack owns the interface, especially on Debian-style servers, Alpine systems, wicked-managed hosts, and older scripts. The safer workflow is to confirm the active network manager, preview with --no-act where possible, then use ifup, nmcli, networkctl, or wicked according to the configuration owner.


Formatting tips for your comment
You can use basic HTML to format your comment. Useful tags currently allowed in published comments:
<code>command</code>command<strong>bold</strong><em>italic</em><a href="https://example.com">link</a><blockquote>quote</blockquote>