Почему при создании пустого файла можно предпочесть 'touch file' вместо ': >> file'?

Обходной путь, который я использую, чтобы обойти недостаток функциональности, поставляемой с nmcli в системах на основе debian, - это использовать команды для копирования существующего файла конфигурации VPN из папки / etc / NetworkManager / system-settings в новый файл ( как root, конечно) в той же папке и замените строки для разрешенных значений пользователя, шлюза, имени пользователя и пароля в новой копии. Затем я перезапускаю сетевой менеджер, чтобы изменения вступили в силу.

Например:

Типичный файл конфигурации в папке / etc / NetworkManager / system-settings может выглядеть так:

[connection]
id=<<id>>
uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx
type=vpn
permissions=user:<<permissions_user>>:;
autoconnect=false

[vpn]
password-flags=0
service-type=org.freedesktop.NetworkManager.pptp
require-mppe-128=yes
mppe-stateful=yes
user=<<user>>
refuse-eap=yes
refuse-chap=yes
gateway=<<gateway>>
refuse-pap=yes

[vpn-secrets]
password=<<password>>

[ipv4]
method=auto

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

cd /etc/NetworkManager/system-settings
cp "existing-working-vpn-config-file" "new-vpn-config-file"

... затем замените указанные выше значения «<< >>» своими настройками VPN, например:

sed -i "s/<<permissions_user>>/my_permissions_user/g" new-vpn-config-file
sed -i "s/<<user>>/my_user/g" new-vpn-config-file
sed -i "s/<<gateway>>/my_gateway/g" new-vpn-config-file
sed -i "s/<<password>>/my_password/g" new-vpn-config-file

... и, наконец, перезапустите диспетчер сети с помощью следующей команды:

service network-manager restart

Примечание: Настройка UUID не имеет значения, даже если она не уникальна. Понятия не имею почему. Вещи просто работают.

Кроме того, если вы добавляете новый файл, а не копируете, убедитесь, что права доступа к файлу установлены на 600 (чтение и запись), а владельцем является root.

Попробуйте и скажите, что вы думаете. У меня это работает, все через командную строку.

33
27.05.2018, 10:57
3 ответа

Porque puede touchvarios archivos a la vez sin escribir ningún carácter especial adicional. Eso incluye cosas como la expansión de llaves, p. touch file{1,2,3,4}.

Otro problema es que cuando estás escribiendo un tutorial, es bastante importante darse cuenta de que tus lectores probablemente no estén muy -versados ​​en el tema. Un comando simple puede ser mucho más comprensible que una combinación extraña -de caracteres que no son letras -. Esperaría que haya una cantidad de usuarios ocasionales de shell que no sepan qué es :, por la sencilla razón de que en realidad no hace nada. De manera similar, para un simple > foosin un comando :, incluso si sabe qué es una redirección, una redirección sin una fuente puede no ser intuitiva.

Además, aquí en unix.se a menudo escribimos ejemplos de comandos con un signo de dólar al principio para indicar el aviso. Los caracteres especiales al comienzo de la línea pueden confundirse con eso. (Tenga en cuenta que hay sistemas y shells que usan >como parte del indicador predeterminado.)

32
27.01.2020, 19:37

Ni siquiera necesitas usar :; puedes simplemente> file(al menos en bash; otras conchas pueden comportarse de manera diferente ).

En términos prácticos, no hay una diferencia real aquí (aunque la minúscula sobrecarga de llamar a /bin/touches una cosa ).

touch, sin embargo, también se puede utilizar para modificar las marcas de tiempo en un archivo que ya existe sin cambiar o borrar el contenido; además, > fileeliminará cualquier fileque ya exista. Esto se puede solucionar utilizando >> file.

Otra diferencia con touches que puede hacer que cree (o actualice la marca de tiempo en )varios archivos a la vez (, p.touch foo bar baz quux)con una sintaxis más sucinta que con la redirección, donde cada archivo necesita su propia redirección (p.>foo >bar >baz >quux).

Usandotouch:

$ touch foo; stat -x foo; sleep 2; touch foo; stat -x foo
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:19 2018
Modify: Fri May 25 10:55:19 2018
Change: Fri May 25 10:55:19 2018
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:55:21 2018
Change: Fri May 25 10:55:21 2018

Uso de la redirección:

$ > foo; stat -x foo; sleep 2; >> foo; stat -x foo
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018
47
27.01.2020, 19:37

Imagine que está buscando uno de sus antiguos scripts de shell del cual solo recuerda que se está creando un archivo de marcador en /tmp. Es fácil buscar en todos sus archivos *.sh la palabra "touch". En su lugar, buscar dos puntos generará muchos falsos positivos si no sabe qué nombre de archivo exacto buscar.

6
27.01.2020, 19:37

Теги

Похожие вопросы