Это не ответ, но эта информация может помочь другим людям.
Поэтому я решил переустановить -Ubuntu Server. Я также решил временно удалить адаптер беспроводной сети -, чтобы уменьшить количество переменных. Когда появился экран установки, я решил выбрать Установить сервер Ubuntu с ядром HWE-вместо Установить сервер Ubuntu . После завершения процесса установки все, казалось, работало нормально.
Вот результат дляsudo lshw -c network
:
*-network
description: Ethernet interface
product: Qualcomm Atheros
vendor: Qualcomm Atheros
physical id: 0
bus info: pci@0000:05:00.0
logical name: enp5s0
version: 10
serial: xx:xx:xx:xx:xx:xx
size: 1Gbit/s
capacity: 1Gbit/s
width: 64 bits
clock: 33MHz
capabilities: pm pciexpress msi msix bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=alx duplex=full ip=XXX.XXX.XXX.XXX latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
resources: irq:19 memory:ef000000-ef03ffff ioport:e000(size=128)
Выходы для sudo lspci -nn | grep eth
и sudo modprobe -v alx
были пусты.
Вот результат дляsudo ip a
:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd xx:xx:xx:xx:xx:xx
inet XXX.XXX.XXX.XXX/XX brd XXX.XXX.XXX.XXX scope global enp5s0
valid_lft forever preferred_lft forever
inet6 xxxx::xxxx:xxxx:xxxx:xxxx/xx scope link
valid_lft forever preferred_lft forever
Я собираюсь повторно -установить Ubuntu Server снова (без HWE ), просто чтобы посмотреть, не вызывает ли это проблему.
ОБНОВЛЕНИЕ
Я снова установил Ubuntu Server -, на этот раз без ядра HWE.
Результаты те же.
Вот результат дляsudo lshw -c network
:
*-network UNCLAIMED
description: Ethernet controller
product: Qualcomm Atheros
vendor: QUalcomm Atheros
physical id: 0
bus info: pci@0000:05:00.0
version: 10
width: 64 bits
clock: 33MHz
capabilities: pm pciexpress msi msix bus_master cap_list
configuration: latency=0
resources: memory:ef000000-ef03ffff ioport:e000(size=128)
Выходные данные для sudo lspci -nn | grep eth
неверны.
Вот результат дляsudo lspci
:
00:00.0 Host bridge: Intel Corporation Sky Lake Host Bridge/DRAM Registers (rev 07)
00:02.0 VGA compatible controller: Intel Corporation Sky Lake Integrated Graphics (rev 06)
00:08.0 System peripheral: Intel Corporation Sky Lake Gaussian Mixture Model
00:14.0 USB controller: Intel Corporation Device a2af
00:16.0 Communication controller: Intel Corporation Device a2ba
00:17.0 SATA controller: Intel Corporation Device a282
00:1b.0 PCI bridge: Intel Corporation Device a2e9 (rev f0)
00:1b.4 PCI bridge: Intel Corporation Device a2eb (rev f0)
00:1c.0 PCI bridge: Intel Corporation Device a292 (rev f0)
00:1c.3 PCI bridge: Intel Corporation Device a293 (rev f0)
00:1c.4 PCI bridge: Intel Corporation Device a294 (rev f0)
00:1c.5 PCI bridge: Intel Corporation Device a295 (rev f0)
00:1c.6 PCI bridge: Intel Corporation Device a296 (rev f0)
00:1c.7 PCI bridge: Intel Corporation Device a297 (rev f0)
00:1d.0 PCI bridge: Intel Corporation Device a298 (rev f0)
00:1f.0 ISA bridge: Intel Corporation Device a2c4
00:1f.2 Memory controller: Intel Corporation Device a2f0
00:1f.3 Audio device: Intel Corporation Device a2f0
00:1f.4 SMBus: Intel Corporation Device a2a3
01:00.0 USB controller: ASMedia Technology Inc. Device 2142
03:00.0 PCI bridge: Integrated Technology Express, Inc. Device 8892 (rev 71)
05:00.0 Ethernet controller: Qualcomm Atheros Device e0b1 (rev 10)
Вот результат дляsudo modprobe -v alx
:
insmod /lib/modules/4.4.0-87-generic/kernel/drivers/net/mdio.ko
insmod /lib/modules/4.4.0-87-generic/kernel/drivers/net/ethernet/atheros/alx/alx.ko
Вот результат дляsudo ip a
:
1: lo <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preffered_lft forever
Если у кого-то есть что сказать, поделитесь.
Попробуйте:
#!/bin/bash
txtnum=0
shnum=0
for file in /some/dir/*;do
if [[ "${file}" =~ \.txt$ ]];then
txtnum=$((txtnum+1))
elif [[ "${file}" =~ \.sh$ ]];then
shnum=$((shnum+1))
fi
done
echo "Number of files with.txt extention:${txtnum}"
echo "Number of files with.sh extention:${shnum}"
Так как это было отредактировано, я не могу сказать наверняка, но SOME_PATH
должен был бы включать глобус без кавычек *
для расширения до файлов в каталоге. Что-то вроде:
/path/to/*
Next [[ $file ==* ".txt"]]
недействителен, в частности, ==*
не является допустимым оператором сравнения. Вы можете использовать =~
для сравнения регулярных выражений, например [[ $file =~.*\.txt ]]
, но лично я бы сначала извлек расширение и сравнил его по отдельности.
Далее shnum++
недопустимо, вам нужно будет выполнить это внутри составной арифметической команды оболочки ((
, например:((shnum++))
Наконец, вам не хватает закрывающего оператора done
для цикла for
.
Вот некоторый рабочий код, который сделает то, что вам нужно:
#!/bin/bash
txtnum=0
shnum=0
for file in /path/to/files/*; do
ext="${file##*.}"
if [[ $ext == txt ]]; then
((txtnum++))
elif [[ $ext == sh ]]; then
((shnum++))
fi
done
printf 'Number of.txt files: %d\n' "$txtnum"
printf 'Number of.sh files: %d\n' "$shnum"
Один из методов заключается в использовании find (1 )и подсчете количества находок wc (1 ).
Один из способов справиться с именами файлов, которые содержат проблемные символы (новой строки/пробела и т. д. ), состоит в том, чтобы найти вывод, например, номер узла i -.
#!/bin/bash
txtnum=0
shnum=0
directory=/tmp/somewhere
txtnum=$(/bin/find ${directory} -maxdepth 1 -name '*.txt' -type f -printf "%i\n"|/bin/wc -l)
shnum=$(/bin/find ${directory} -maxdepth 1 -name '*.sh' -type f -printf "%i\n"|/bin/wc -l)
echo "Number of.txt files: ${txtnum}"
echo "Number of.sh files: ${shnum}"
Не зацикливайте, если в этом нет необходимости. Не зацикливайтесь в оболочке, если только вы не работаете с файлами.
Для большого количества имен файлов это будет работать быстрее, чем любое другое решение, предложенное до сих пор:
$ ls /usr/lib | awk -F '[/.]+' \
'{ ext[$NF]++ } END { for(e in ext){ printf ".%-7s\t%4d\n", e, ext[e]} }' |
grep -Ew 'so|0' # or extensions of your choice
.0 28
.so 10
Меньше печатать!
Вы можете обобщить это требование, чтобы подсчитывать столько расширений, сколько вам нужно. Для этого вам понадобится оболочка, поддерживающая ассоциативные массивы, например bash
.
#!/bin/bash
declare -A exts
for path in "${SOME_PATH-.}"/*
do
# Only files
[[ -f "$path" ]] || continue
# Split off the file component, and then its name and extension
file=${path##*/}
name=${file%.*} extn=${file##*.}
# printf "%s -> %s -> %s %s\n" "$path" "$file" "$name" "$extn"
# Count this extension type
(( exts[$extn]++ ))
done
# Here is what we want to know
echo "txt=${exts[txt]-0}, sh=${exts[sh]-0}"