• В чем отличие команд "sudo -i" и "sudo su -"?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    sudo su - полностью выполняется логин от имени рута.
    sudo -i логин эмулируется.

    Внешне разница выглядит как то так:
    [martin@martin ~]$ sudo -i
    [root@martin ~]# id
    uid=0(root) gid=0(root) группы=0(root)
    [root@martin ~]# export
    declare -x DISPLAY="localhost:10.0"
    declare -x HISTCONTROL="ignoredups"
    declare -x HISTSIZE="1000"
    declare -x HOME="/root"
    declare -x HOSTNAME="martin.office.lds.ua"
    declare -x KDEDIRS="/usr"
    declare -x LANG="ru_UA.UTF-8"
    declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
    declare -x LOGNAME="root"
    declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd                                                                       =40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=3                                                                       0;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:                                                                       *.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=0                                                                       1;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;                                                                       31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01                                                                       ;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ea                                                                       r=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31                                                                       :*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01                                                                       ;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.ti                                                                       f=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;3                                                                       5:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.og                                                                       m=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:                                                                       *.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01                                                                       ;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=                                                                       01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.                                                                       au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;                                                                       36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf                                                                       =01;36:"
    declare -x MAIL="/var/spool/mail/root"
    declare -x OLDPWD
    declare -x PATH="/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
    declare -x PWD="/root"
    declare -x QTDIR="/usr/lib64/qt-3.3"
    declare -x QT_GRAPHICSSYSTEM_CHECKED="1"
    declare -x QT_PLUGIN_PATH="/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins"
    declare -x SHELL="/bin/bash"
    declare -x SHLVL="1"
    declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
    declare -x SUDO_COMMAND="/bin/bash"
    declare -x SUDO_GID="1000"
    declare -x SUDO_UID="1000"
    declare -x SUDO_USER="martin"
    declare -x TERM="linux"
    declare -x USER="root"
    declare -x USERNAME="root"
    [root@martin ~]# logout
    [martin@martin ~]$ sudo su -
    Последний вход в систему:Срд Окт 28 18:58:48 MSK 2015на pts/1
    Последняя неудачная попытка входа в систему:Пнд Ноя  2 08:51:38 MSK 2015с 211.99                                                                       .249.89на ssh:notty
    Число неудачных попыток со времени последнего входа: 30.
    [root@martin ~]# export
    declare -x HISTCONTROL="ignoredups"
    declare -x HISTSIZE="1000"
    declare -x HOME="/root"
    declare -x HOSTNAME="martin.office.lds.ua"
    declare -x KDEDIRS="/usr"
    declare -x LANG="ru_UA.UTF-8"
    declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
    declare -x LOGNAME="root"
    declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd                                                                       =40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=3                                                                       0;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:                                                                       *.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=0                                                                       1;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;                                                                       31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01                                                                       ;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ea                                                                       r=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31                                                                       :*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01                                                                       ;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.ti                                                                       f=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;3                                                                       5:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.og                                                                       m=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:                                                                       *.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01                                                                       ;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=                                                                       01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.                                                                       au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;                                                                       36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf                                                                       =01;36:"
    declare -x MAIL="/var/spool/mail/root"
    declare -x OLDPWD
    declare -x PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin                                                                       :/usr/sbin:/usr/bin:/root/bin"
    declare -x PWD="/root"
    declare -x QTDIR="/usr/lib64/qt-3.3"
    declare -x QTINC="/usr/lib64/qt-3.3/include"
    declare -x QTLIB="/usr/lib64/qt-3.3/lib"
    declare -x QT_GRAPHICSSYSTEM_CHECKED="1"
    declare -x QT_PLUGIN_PATH="/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins"
    declare -x SHELL="/bin/bash"
    declare -x SHLVL="1"
    declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
    declare -x TERM="linux"
    declare -x USER="root"
    declare -x XDG_SESSION_ID="13889"
    [root@martin ~]# id
    uid=0(root) gid=0(root) группы=0(root)
    [root@martin ~]#


    как видно - при sudo su - выполнились все файлы инициализации рута, система вывела информацию о предыдущих логинах, при sudo -i - нет
    ну и environment не совпадают...
    Ответ написан
    Комментировать
  • Как типизировать класс с динамическими именами методов создаваемых в конструкторе?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    TypeScript очень плохо относится к динамическим членам класса. По сути в самой декларации класса ты ничего не сможешь с этим поделать, и тебе придётся руками кастовать то что надо.

    Однако в целях поддержки лекаси ты можешь просто подменить тип, что-то вроде:
    type MethodNames<T extends string> = `get${T}s` | `create${T}` | `get${T}`;
    
    interface IAPI {
      new <T extends string>(type: T, url: string): {
        [K in MethodNames<T>]: Function
      }
    }
    
    export default API as unknown as IAPI;
    сработает как надо. Естественно ты можешь доработать интерфейс IAPI до полного совпадения.

    При декларации самого класса ты максимум можешь добавить неспецифичную index signuture, условно:
    type MethodNames<T extends string> = `get${T}s` | `create${T}` | `get${T}`;
    class API {
      [key: MethodNames<string>]: Function
    
      _url;
    
      constructor(type: string, url: string) {
        this._url = url;
    
        this[`get${type}s`] = this._readMany;
        this[`create${type}`] = this._create;
        this[`get${type}`] = this._read;
      }
    
      _readMany(params = {}) {
        const options = getApiOptions(Method.GET);
        const url = new URL(this._url);
        url.search = new URLSearchParams(params);
        
        return fetch(url.toString(), options);
      }
    
      _create(body) {
        const options = getApiOptions(Method.POST, body);
        
        return fetch(this._url, options);
      }
    
      _read(id) {
        const options = getApiOptions(Method.GET);
        
        return fetch(`${this._url}/{id}`, options);
      }
    }

    Но это уже будет не так удобно и чётко.
    Ответ написан
    4 комментария
  • Как задать стили input отдельно только для текста?

    imko
    @imko
    Senior Scratch Developer
    Укажи бордеру цвет с альфа каналом, вместо прозрачности всего инпута
    Ответ написан
    Комментировать
  • Полезно ли долго (и вообще) «велосипедить» в программировании?

    я замечаю что гораздо лучше всё усваиваю когда делаю всё с нуля

    Поверьте - так у всех.

    Но вы обратили внимание, что в школе вам рассказывали про опыты Галилея, а не дали два шарика и не сказали - разберитесь какой из них падает быстрее?

    Представьте что вы велосипедите долго-долго и разобрались с авторизацией и загрузкой файлов вдоль и поперек, а потом все же сталкиваетесь с каким-нибудь фреймворком и смотрите, а там загрузка сделана так же как у вас и вы бы могли не тратить год, на то чтобы дойти до этого, а просто сразу посмотреть. Смотрите на авторизацию и думаете - "о, а чо так тоже можно было?"

    Объем знаний слишком велик чтобы полсностью сгенерировать его самостоятельно. Best practice много и ко всем сразу сам не придешь. Чему-то учиться придется.
    Поэтому наилучшая схема чуть-чуть повелосипедить. Изучить пару фреймворков. Попробовать опять повелосипедить. Изучить еще один, а там, может быть, присоединиться к разработке какого-то..
    Ответ написан
    Комментировать
  • Полезно ли долго (и вообще) «велосипедить» в программировании?

    Moskus
    @Moskus
    Когда советуют, убедитесь, что у вас и у аудитории этого совета одна цель. Потому что "как можно скорее начать пользоваться фреймворками" - это если задача - как можно скорее начать шлёпать продукт и деньги получать. А если задача - научиться программировать, фреймворки тут не при чем.
    Ответ написан
    14 комментариев
  • Как вызвать функцию при неактивной кнопке?

    hzzzzl
    @hzzzzl
    Ответ написан
    Комментировать
  • Есть ли аналог grammarly для русского языка?

    @Sektantik
    Ответ написан
    Комментировать
  • Есть ли аналог grammarly для русского языка?

    @vetash
    Ответ написан
    Комментировать
  • Как обернуть ссылкой object svg?

    LenovoId
    @LenovoId Куратор тега SVG
    svg, css,js
    <a href=""> 
      <svg> 
        this is code svg
      </svg>
     </a>


    а так нельзя ?
    Ответ написан
    9 комментариев
  • Как разместить элементы?

    aliencash
    @aliencash
    Партизан
    Нагородили вы конечно...
    https://codepen.io/aliencash/pen/GmyreY?editors=1100
    Для мелких экранов сделайте медиа выражения влияющие на размер шрифта.
    Ответ написан
    2 комментария
  • Как избежать появления пустого места под подвалом, при ширины изменении окна?

    aliencash
    @aliencash
    Партизан
    Как вам уже говорили невозможно не видя кода дать конкретный совет. Хотя один совет есть - переделывайте. Вот вам шаблон, в котором подвал всегда прижат к низу https://codepen.io/aliencash/pen/xdPpPa
    Попробуйте внедрить это себе.
    Ответ написан
    Комментировать
  • Как разбить значение инпута на 3 части?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    var names = 'Иванов Иван Иванович';
    
    console.log(names);
    
    var re = /\\s+/;
    var nameList = names.trim().split(re);
    
    console.log(nameList);
    Ответ написан
    Комментировать
  • Объясните что такое полиморфизм простыми словами ?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Я в шоке, если честно... Вот как ни начинаются вопросы про ООП в Javascript, так руки в ноги и понеслось... Кто Java, кто C# примеры приводит. да ещё портянками суровыми. И каждый приписку делает — дескать в Javascript не так наглядно.

    То есть человек, изучающий Javascript, и никогда не видевший других языков, тут же радостно закивает от вида незнакомого синтаксиса? Вы и взаправду преисполнены веры в такой светлый финал?

    Спрошу всех отвечающих:
    1. Number.prototype.toString() и Object.prototype.toString() — это полиморфизм или нет?
    2. Date.prototype.hasOwnProperty() и Object.prototype.hasOwnProperty() — это наследование или нет?
    3. В чём тогда между ними разница?

    ПыСы. И ещё хочу спросить всех знатоков любых языков, кроме указанного в вопросе — если в темах с тэгами Python, Ruby, PHP, C# я начну строчить куски кода на Javascript, потому мне кажется, что так понятнее, как скоро подписанные на эти тэги попросят меня забанить?
    Ответ написан
    7 комментариев
  • Методика улучшения зрения?

    pusto
    @pusto
    В юности (10-ый класс, 1-ый курс университета) по рекомендации толкового окулиста исправил начинающуюся близорукость плюсовыми очками (для дальнозорких). Всю работу вблизи делал только с плюсовыми очками. На лекции брал бифокальные очки (верх — обычное стекло, низ — плюсовые линзы).
    Подбирать плюсовые очки для работы вблизи лучше у окулиста — у него есть набор линз с шагом 0.25 диоптрий. Берете какую-нибудь газету и подбираете такую линзу, чтобы на расстоянии 40 см (рекомендуемое для чтения) текст был разборчив, а вот чуть дальше — уже нет (расплывается). Потом заказываете очки с такими линзами.

    Насчет упражнений скажу по своему опыту — осторожнее надо быть с ними. Мне часть упражнений помогала, а часть, как ни странно, вредила. В итоге я отобрал только те, которые мне помогали. Спустя много-много лет случайно узнал, что существует 3 разных вида близорукости, и что есть такие упражнения, которые при одном виде близорукости помогают, а при другом — вредят. «Надо же!» — подумал я. — «Хорошо, что в свое время я прислушался к своим глазам и не делал всё подряд».
    Самым лучшим упражнением для моих глаз оказалось… моргание. Силу сжатия век, частоту и скважность я подбирал по своим ощущениям и менял в зависимости от ситуации. Очень хорошая вещь!

    Мой результат:
    Было: -0.75...-1 диоптрия (вовремя успел начать заниматься глазами).
    Стало: 0 диоптрий. Смог прочитать даже 11-ую строчку в таблице проверки зрения.

    Удачи Вам!
    Ответ написан
    1 комментарий
  • Методика улучшения зрения?

    consumer
    @consumer
    Возможно после посещения офтальмолога Вы не полностью разобрались в вопросе. -1 и -1,75 это диоптрии, диоптрии характеризуют преломляющую силу оптических сред глаза. Причем эти две цифры могут описывать силу стекол, которые Вам выписали, либо величину клинической рефракции. Но это даже не важно, важно то, что у Вас одно из двух разных состояний — миопия, при которой минусовые диоптрии не изменить никакими упражнениями и очками в принципе (только операцией или при старении, когда тип аметропии может измениться), либо у Вас спазм аккомодации, если Ваше состояние не возникло в детстве, после травмы или операции. Спазм аккомодации может быть устранен медикаметозно (ну или с помощью упражнений, если времени не жалко). Показатели, которые можно изменить — это острота зрения, бывает от нуля (слепота) до 1 и более.
    Я что хотел сказать, проблемы со здоровьем надо решать у врача, упражнения и всякие домашние рецепты это полезно, если Вы знаете с чем Вы боретесь и чего пытаетесь добиться. Для начала выясните, что не так с Вашими глазами, иначе в праздных попытках натренировать глаза, можно потерять время для лечения.
    Если не лечить спазм аккомодации (т. н. ложную близорукость), можно упустить шанс на полное восстановление зрения («единицу» или какое у Вас раньше было). Миопия без должного наблюдения может привести даже к отслойке сетчатки. Ваше зрение еще слабо изменено, не ждите худшего, лечитесь у грамотного офтальмолога, носите очки или линзы (хотя Вам еще рановато, если острота зрения коррелирует с рефракцией). И извините, что так длинно, очень помочь хотелось)
    Ответ написан
    3 комментария
  • Методика улучшения зрения?

    @add1ct
    5-ти минутные перерывы каждый час перед монитором, больше прогулок на свежем воздухе, f.lux и витаминки для глаз. Глаза меньше устают, да и видеть стал получше
    Ответ написан
    6 комментариев