ip link show has an up filter which the man page describes as display running interfaces. The output also shows the state, e.g.
$ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether e8:03:9a:b6:46:b3 brd ff:ff:ff:ff:ff:ff 3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000 link/ether c4:85:08:2a:6e:3a brd ff:ff:ff:ff:ff:ff
It is not described what the difference is between these two.
The state output is derived from IFLA_OPERSTATE as per this little bit in ip/ipaddress.c in iproute2
if (tb[IFLA_OPERSTATE])
print_operstate(fp, rta_getattr_u8(tb[IFLA_OPERSTATE]));
as per operstates.txt a status of UP means that the interface is up and can be used to send packets.
In contrast, ip link show up runs a different filter
if (filter.up && !(ifi->ifi_flags&IFF_UP))
return 0;
Thus only interfaces that are in state IFF_UP are shown. This means it is administratively up, but this does not mean it is available and ready to send packets.
This may make a difference if you're trying to use the output of ip link in any sort of automation where you have to probe the available network-interfaces and know where packets are going to get out or not.