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

Отображение типов файлов Unix

Как представляется этот вопрос, он появляется, когда пользователь пытается отобразить тип файла в смысле файла Unix. Для этой цели не требуется сценарий, поскольку уже существуют утилиты, которые способны отображать такую ​​информацию.

В частности, команда stat хорошо подходит для этой цели. По умолчанию stat показывает длинный вывод с большим количеством информации, но мы можем использовать -c, --format или --printf (обратите внимание, что он интерпретирует символы обратного слэша) для достижения желаемого результата. Например,

$ stat -c '%n: %F' /etc/passwd /etc/resolv.conf /etc                        
/etc/passwd: regular file
/etc/resolv.conf: symbolic link
/etc: directory


$ stat --printf '%n: %F\n' /etc/passwd /etc/resolv.conf /etc                
/etc/passwd: regular file
/etc/resolv.conf: symbolic link
/etc: directory

Другая команда, которую мы можем использовать, - find, которая имеет опцию -printf, но отличается спецификаторами преобразования (символы %) и тем фактом, что она выдает тип файла в буквах (см. man find для соответствия типа файла букве):

$ find /etc/passwd /etc/resolv.conf /etc -prune  -printf "%p:%y\n"          
/etc/passwd:f
/etc/resolv.conf:l
/etc:d

Конечно, если есть необходимость, мы всегда можем использовать команду [ или test, но для этого потребуется немного больше работы; однако таким образом нам не нужно полагаться на что-либо внешнее;

#!/bin/sh

check_filetype(){
    if [ -f "$1" ];then
        if [ -h "$1" ]; then
            printf "%s\n" "$1: symbolic link"
        else
            printf "%s\n" "$1: regular"
        fi
    elif [ -d "$1"  ]; then
        printf "%s\n" "$1: directory"
    elif [ -c "$1" ]; then
        printf "%s\n" "$1: character device"
    elif [ -p "$1" ]; then
        printf "%s\n" "$1: named pipe"
    elif [ -S "$1" ]; then
        printf "%s\n" "$1: socket"
    fi
}

for arg
do
    check_filetype "$arg"
done

И вот как это будет работать:

$ ./checkft.sh /etc/passwd /etc/resolv.conf /etc test.fifo /dev/tty1              
/etc/passwd: regular
/etc/resolv.conf: symbolic link
/etc: directory
test.fifo: named pipe
/dev/tty1: character device

Показывать содержимое файла

Если мы хотим для получения подробной информации о типе файла в отношении содержания, есть два способа приблизиться к вещам. Один, через Unix filetype , а другой - через магическое число, первые несколько бит файла. В то время как mime-тип изначально существовал с целью определения типа файла в Интернете, в настоящее время многие настольные приложения полагаются на запрос информации типа mime для правильного отображения значков файлов и открытия их с помощью соответствующих приложений.

Для этого Назначение mimetype:

$ mimetype /etc/ /etc/resolv.conf  /etc/passwd test.fifo                          
/etc/:            inode/directory
/etc/resolv.conf: inode/symlink
/etc/passwd:      text/plain
test.fifo:        inode/fifo

И для выполнения тестов с «магическими числами» мы использовали бы команду file:

$ file /etc/ /etc/resolv.conf  /etc/passwd test.fifo                              
/etc/:            directory
/etc/resolv.conf: symbolic link to ../run/resolvconf/resolv.conf
/etc/passwd:      ASCII text
test.fifo:        fifo (named pipe)

, которая также может do mimetype:

$ file --mime-type /etc/ /etc/resolv.conf  /etc/passwd test.fifo                  
/etc/:            inode/directory
/etc/resolv.conf: inode/symlink
/etc/passwd:      text/plain
test.fifo:        inode/fifo
1
задан 4 May 2016 в 14:30

2 ответа

У меня была аналогичная проблема в моей среде RubyMine. У меня было две проблемы: я не мог редактировать файлы (только для чтения), а среда IDE не могла сохранить файлы проекта.

Моя папка проекта каким-то образом изменила ее право собственности на root (она работала задолго до этого) и не я (мое имя пользователя). Поэтому я изменил права собственности на проект (мое имя пользователя), используя sudo chown -R username:username ~/path/to/project/foldername/*, и удалил только статус чтения только для файлов, но он не смог сохранить проект, хотя изменения могут отразиться при перезагрузке браузера.

Не было, пока я также не заметил, что файлы .idea (внутри моей папки проекта), созданные RubyMine IDE, все еще имеют владельца как root. Затем я изменил свое владение, как sudo chown -R username:username ~/path/to/project/projectname/.idea/*, теперь я могу также сохранить файлы проекта.

NB: Мне нужно было указать файлы .idea, а не только всю папку проекта, как раньше.

0
ответ дан 23 May 2018 в 11:27
Есть ли способ войти в систему как администратор?

Вы должны войти в систему под учетной записью root. Но сначала вы должны установить пароль unix для root. Затем вы можете войти в систему, набрав «su» в terninal. Или вы можете получить права root, набрав «sudo su». Если вы хотите сначала войти в систему с правами администратора на графическом рабочем столе, вы должны включить эту возможность для пользователя root.

-1
ответ дан 23 May 2018 в 11:27
  • 1
    Как войти в корневой каталог? И установить пароль root? – David Andrews 4 May 2016 в 15:08
  • 2
    Открытый терминал. Затем введите "sudo passwd root" после этого вам будет предложено ввести новый пароль linux. Для входа в систему как root в терминальном типе "su" – Yevgeniy Klymenko 4 May 2016 в 15:14
  • 3
    @YevgeniyKlymenko Включение root - это риск безопасности, который в этом случае лишний. Пользователи не должны использовать root для запуска IDE пользовательского пространства из своей домашней папки в большинстве случаев. – Thomas Ward♦ 4 May 2016 в 15:17
  • 4
    Возникает вопрос: «Есть ли способ войти в систему как администратор». Поэтому есть верный ответ. – Yevgeniy Klymenko 4 May 2016 в 15:19

Другие вопросы по тегам:

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