2020年3月

由于你的公司标准规定,你可能只能允许部分人访问 Linux 系统。或者你可能只能够允许几个用户组中的用户访问 Linux 系统。那么如何实现这样的要求呢?最好的方法是什么呢?如何使用一个简单的方法去实现呢?

是的,我们会有很多种方法去实现它。但是我们应该使用简单轻松的方法。为了简单轻松的完成目的,我们可以通过对 /etc/ssh/sshd_config 文件做必要的修改来实现。在这篇文章中我们将会向你展示实现要求的详细步骤。

为什么我们要这样做呢?是出于安全的原因。你可以访问这个链接来获取更多关于 openSSH 的使用方法。

什么是 SSH ?

openssh 全称为 OpenBSD Secure Shell。Secure Shell(ssh)是一个自由开源的网络工具,它能让我们在一个不安全的网络中通过使用 Secure Shell(SSH)协议来安全访问远程主机。

它采用了客户端-服务器架构(C/S),拥有用户身份认证、加密、在计算机和隧道之间传输文件等功能。

我们也可以用 telnetrcp 等传统工具来完成,但是这些工具都不安全,因为它们在执行任何动作时都会使用明文来传输密码。

如何在 Linux 中允许用户使用 SSH?

通过以下内容,我们可以为指定的用户或用户列表启用 ssh 访问。如果你想要允许多个用户,那么你可以在添加用户时在同一行中用空格来隔开他们。

为了达到目的只需要将下面的值追加到 /etc/ssh/sshd_config 文件中去。 在这个例子中, 我们将会允许用户 user3 使用 ssh。

# echo "AllowUsers user3" >> /etc/ssh/sshd_config

你可以运行下列命令再次检查是否添加成功。

# cat /etc/ssh/sshd_config | grep -i allowusers
AllowUsers user3

这样就行了, 现在只需要重启 ssh 服务和见证奇迹了。(下面这两条命令效果相同, 请根据你的服务管理方式选择一条执行即可)

# systemctl restart sshd
或
# service restart sshd

接下来很简单,只需打开一个新的终端或者会话尝试用不同的用户身份访问 Linux 系统。是的,这里 user2 用户是不被允许使用 SSH 登录的并且会得到如下所示的错误信息。

# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.

输出:

Mar 29 02:00:35 CentOS7 sshd[4900]: User user2 from 192.168.1.6 not allowed because not listed in AllowUsers
Mar 29 02:00:35 CentOS7 sshd[4900]: input_userauth_request: invalid user user2 [preauth]
Mar 29 02:00:40 CentOS7 unix_chkpwd[4902]: password check failed for user (user2)
Mar 29 02:00:40 CentOS7 sshd[4900]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.6  user=user2
Mar 29 02:00:43 CentOS7 sshd[4900]: Failed password for invalid user user2 from 192.168.1.6 port 42568 ssh2

与此同时用户 user3 被允许登入系统因为他在被允许的用户列表中。

# ssh [email protected]
[email protected]'s password: 
[user3@CentOS7 ~]$

输出:

Mar 29 02:01:13 CentOS7 sshd[4939]: Accepted password for user3 from 192.168.1.6 port 42590 ssh2
Mar 29 02:01:13 CentOS7 sshd[4939]: pam_unix(sshd:session): session opened for user user3 by (uid=0)

如何在 Linux 中阻止用户使用 SSH ?

通过以下内容,我们可以配置指定的用户或用户列表禁用 ssh。如果你想要禁用多个用户,那么你可以在添加用户时在同一行中用空格来隔开他们。

为了达到目的只需要将以下值追加到 /etc/ssh/sshd_config 文件中去。 在这个例子中, 我们将禁用用户 user1 使用 ssh

# echo "DenyUsers user1" >> /etc/ssh/sshd_config

你可以运行下列命令再次检查是否添加成功。

# cat /etc/ssh/sshd_config | grep -i denyusers
DenyUsers user1

这样就行了, 现在只需要重启 ssh 服务和见证奇迹了。

# systemctl restart sshd
活
# service restart sshd

接下来很简单,只需打开一个新的终端或者会话,尝试使用被禁用的用户身份被访问 Linux 系统。是的,这里 user1 用户在禁用名单中。所以,当你尝试登录时,你将会得到如下所示的错误信息。

# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.

输出:

Mar 29 01:53:42 CentOS7 sshd[4753]: User user1 from 192.168.1.6 not allowed because listed in DenyUsers
Mar 29 01:53:42 CentOS7 sshd[4753]: input_userauth_request: invalid user user1 [preauth]
Mar 29 01:53:46 CentOS7 unix_chkpwd[4755]: password check failed for user (user1)
Mar 29 01:53:46 CentOS7 sshd[4753]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.6  user=user1
Mar 29 01:53:48 CentOS7 sshd[4753]: Failed password for invalid user user1 from 192.168.1.6 port 42522 ssh2

如何在 Linux 中允许用户组使用 SSH?

通过以下内容,我们可以允许一个指定的组或多个组使用 ssh

如果你想要允许多个组使用 ssh 那么你在添加用户组时需要在同一行中使用空格来隔开他们。

为了达到目的只需将以下值追加到 /etc/ssh/sshd_config 文件中去。在这个例子中,我们将允许 2g-admin 组使用 ssh。

# echo "AllowGroups 2g-admin" >> /etc/ssh/sshd_config

你可以运行下列命令再次检查是否添加成功。

# cat /etc/ssh/sshd_config | grep -i allowgroups
AllowGroups 2g-admin

运行下列命令查看属于该用户组的用户有哪些。

# getent group 2g-admin
2g-admin:x:1005:user1,user2,user3

这样就行了, 现在只需要重启 ssh 服务和见证奇迹了。

# systemctl restart sshd
或
# service restart sshd

是的, user1 被允许登入系统因为用户 user1 属于 2g-admin 组。

# ssh [email protected]
[email protected]'s password: 
[user1@CentOS7 ~]$

输出:

Mar 29 02:10:21 CentOS7 sshd[5165]: Accepted password for user1 from 192.168.1.6 port 42640 ssh2
Mar 29 02:10:22 CentOS7 sshd[5165]: pam_unix(sshd:session): session opened for user user1 by (uid=0)

是的, user2 被允许登入系统因为用户 user2 同样属于 2g-admin 组。

# ssh [email protected]
[email protected]'s password: 
[user2@CentOS7 ~]$

输出:

Mar 29 02:10:38 CentOS7 sshd[5225]: Accepted password for user2 from 192.168.1.6 port 42642 ssh2
Mar 29 02:10:38 CentOS7 sshd[5225]: pam_unix(sshd:session): session opened for user user2 by (uid=0)

当你尝试使用其他不在被允许的组中的用户去登入系统时, 你将会得到如下所示的错误信息。

# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.

输出:

Mar 29 02:12:36 CentOS7 sshd[5306]: User ladmin from 192.168.1.6 not allowed because none of user's groups are listed in AllowGroups
Mar 29 02:12:36 CentOS7 sshd[5306]: input_userauth_request: invalid user ladmin [preauth]
Mar 29 02:12:56 CentOS7 unix_chkpwd[5310]: password check failed for user (ladmin)
Mar 29 02:12:56 CentOS7 sshd[5306]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.6  user=ladmin
Mar 29 02:12:58 CentOS7 sshd[5306]: Failed password for invalid user ladmin from 192.168.1.6 port 42674 ssh2

如何在 Linux 中阻止用户组使用 SSH?

通过以下内容,我们可以禁用指定的组或多个组使用 ssh

如果你想要禁用多个用户组使用 ssh,那么你需要在添加用户组时在同一行中使用空格来隔开他们。

为了达到目的只需要将下面的值追加到 /etc/ssh/sshd_config 文件中去。

# echo "DenyGroups 2g-admin" >> /etc/ssh/sshd_config

你可以运行下列命令再次检查是否添加成功。

# # cat /etc/ssh/sshd_config | grep -i denygroups
DenyGroups 2g-admin

# getent group 2g-admin
2g-admin:x:1005:user1,user2,user3

这样就行了, 现在只需要重启 ssh 服务和见证奇迹了。

# systemctl restart sshd
或
# service restart sshd

是的 user1 不被允许登入系统,因为他是 2g-admin 用户组中的一员。他属于被禁用 ssh 的组中。

# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.

输出:

Mar 29 02:17:32 CentOS7 sshd[5400]: User user1 from 192.168.1.6 not allowed because a group is listed in DenyGroups
Mar 29 02:17:32 CentOS7 sshd[5400]: input_userauth_request: invalid user user1 [preauth]
Mar 29 02:17:38 CentOS7 unix_chkpwd[5402]: password check failed for user (user1)
Mar 29 02:17:38 CentOS7 sshd[5400]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.6  user=user1
Mar 29 02:17:41 CentOS7 sshd[5400]: Failed password for invalid user user1 from 192.168.1.6 port 42710 ssh2

除了 2g-admin 用户组之外的用户都可以使用 ssh 登入系统。 例如,ladmin 等用户就允许登入系统。

# ssh [email protected]
[email protected]'s password: 
[ladmin@CentOS7 ~]$

输出:

Mar 29 02:19:13 CentOS7 sshd[5432]: Accepted password for ladmin from 192.168.1.6 port 42716 ssh2
Mar 29 02:19:13 CentOS7 sshd[5432]: pam_unix(sshd:session): session opened for user ladmin by (uid=0)

via: https://www.2daygeek.com/allow-deny-enable-disable-ssh-access-user-group-in-linux/

作者:2daygeek 选题:lujun9972 译者:way-ww 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

一个可以列出文件、目录、可执行文件和链接的简单脚本。

 title=

你是否曾经想列出目录中的所有文件,但仅列出文件,而不列出其它的。仅列出目录呢?如果有这种需求的话,那么下面的脚本可能正是你一直在寻找的,它在 GPLv3 下开源。

当然,你可以使用 find 命令:

find . -maxdepth 1 -type f -print

但这键入起来很麻烦,输出也不友好,并且缺少 ls 命令拥有的一些改进。你还可以结合使用 lsgrep 来达到相同的结果:

ls -F . | grep -v /

但是,这又有点笨拙。下面这个脚本提供了一种简单的替代方法。

用法

该脚本提供了四个主要功能,具体取决于你调用它的名称:lsf 列出文件,lsd 列出目录,lsx 列出可执行文件以及 lsl 列出链接。

通过符号链接无需安装该脚本的多个副本。这样可以节省空间并使脚本更新更容易。

该脚本通过使用 find 命令进行搜索,然后在找到的每个项目上运行 ls。这样做的好处是,任何给脚本的参数都将传递给 ls 命令。因此,例如,这可以列出所有文件,甚至包括以点开头的文件:

lsf -a

要以长格式列出目录,请使用 lsd 命令:

lsd -l

你可以提供多个参数,以及文件和目录路径。

下面提供了当前目录的父目录和 /usr/bin 目录中所有文件的长分类列表:

lsf -F -l .. /usr/bin

目前该脚本不处理递归,仅列出当前目录中的文件。

lsf -R

该脚本不会深入子目录,这个不足有一天可能会进行修复。

内部

该脚本采用自上而下的方式编写,其初始化功能位于脚本的开头,而工作主体则接近结尾。脚本中只有两个真正重要的功能。函数 parse_args() 会仔细分析命令行,将选项与路径名分开,并处理脚本中的 ls 命令行选项中的特定选项。

list_things_in_dir() 函数以目录名作为参数并在其上运行 find 命令。找到的每个项目都传递给 ls 命令进行显示。

总结

这是一个可以完成简单功能的简单脚本。它节省了时间,并且在使用大型文件系统时可能会非常有用。

脚本

#!/bin/bash

# Script to list:
#      directories (if called "lsd")
#      files       (if called "lsf")
#      links       (if called "lsl")
#  or  executables (if called "lsx")
# but not any other type of filesystem object.
# FIXME: add lsp   (list pipes)
#
# Usage:
#   <command_name> [switches valid for ls command] [dirname...]
#
# Works with names that includes spaces and that start with a hyphen.
#
# Created by Nick Clifton.
# Version 1.4
# Copyright (c) 2006, 2007 Red Hat.
#
# This is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published
# by the Free Software Foundation; either version 3, or (at your
# option) any later version.

# It is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# ToDo:
#  Handle recursion, eg:  lsl -R
#  Handle switches that take arguments, eg --block-size
#  Handle --almost-all, --ignore-backups, --format and --ignore

main ()
{
  init
 
  parse_args ${1+"$@"}

  list_objects

  exit 0
}

report ()
{
  echo $prog": " ${1+"$@"}
}

fail ()
{
  report " Internal error: " ${1+"$@"}
  exit 1
}

# Initialise global variables.
init ()
{
  # Default to listing things in the current directory.
  dirs[0]=".";
 
  # num_dirs is the number of directories to be listed minus one.
  # This is because we are indexing the dirs[] array from zero.
  num_dirs=0;
 
  # Default to ignoring things that start with a period.
  no_dots=1
 
  # Note - the global variables 'type' and 'opts' are initialised in
  # parse_args function.
}

# Parse our command line
parse_args ()
{
  local no_more_args

  no_more_args=0 ;

  prog=`basename $0` ;

  # Decide if we are listing files or directories.
  case $prog in
    lsf | lsf.sh)
      type=f
      opts="";
      ;;
    lsd | lsd.sh)
      type=d
      # The -d switch to "ls" is presumed when listing directories.
      opts="-d";
      ;;
    lsl | lsl.sh)
      type=l
      # Use -d to prevent the listed links from being followed.
      opts="-d";
      ;;
    lsx | lsx.sh)
      type=f
      find_extras="-perm /111"
      ;;    
    *)
      fail "Unrecognised program name: '$prog', expected either 'lsd', 'lsf', 'lsl' or 'lsx'"
      ;;
  esac

  # Locate any additional command line switches for ls and accumulate them.
  # Likewise accumulate non-switches to the directories list.
  while [ $# -gt 0 ]
  do
    case "$1" in
      # FIXME: Handle switches that take arguments, eg --block-size
      # FIXME: Properly handle --almost-all, --ignore-backups, --format
      # FIXME:   and --ignore
      # FIXME: Properly handle --recursive
      -a | -A | --all | --almost-all)
        no_dots=0;
        ;;
      --version)
        report "version 1.2"
        exit 0
        ;;
      --help)
        case $type in
          d) report "a version of 'ls' that lists only directories" ;;
          l) report "a version of 'ls' that lists only links" ;;
          f) if [ "x$find_extras" = "x" ] ; then
               report "a version of 'ls' that lists only files" ;
             else
              report "a version of 'ls' that lists only executables";
             fi ;;
        esac
        exit 0
        ;;
      --)
        # A switch to say that all further items on the command line are
        # arguments and not switches.
        no_more_args=1 ;
        ;;
      -*)
        if [ "x$no_more_args" = "x1" ] ;
        then
          dirs[$num_dirs]="$1";
          let "num_dirs++"
        else
          # Check for a switch that just uses a single dash, not a double
          # dash.  This could actually be multiple switches combined into
          # one word, eg "lsd -alF".  In this case, scan for the -a switch.
          # XXX: FIXME: The use of =~ requires bash v3.0+.
          if [[ "x${1:1:1}" != "x-" && "x$1" =~ "x-.*a.*" ]] ;
          then
            no_dots=0;
          fi
          opts="$opts $1";
        fi
        ;;
      *)
        dirs[$num_dirs]="$1";
        let "num_dirs++"
        ;;
    esac
    shift
  done

  # Remember that we are counting from zero not one.
  if [ $num_dirs -gt 0 ] ;
  then
    let "num_dirs--"
  fi
}

list_things_in_dir ()
{
  local dir

  # Paranoia checks - the user should never encounter these.
  if test "x$1" = "x" ;
  then
    fail "list_things_in_dir called without an argument"
  fi

  if test "x$2" != "x" ;
  then
    fail "list_things_in_dir called with too many arguments"
  fi

  # Use quotes when accessing $dir in order to preserve
  # any spaces that might be in the directory name.
  dir="${dirs[$1]}";

  # Catch directory names that start with a dash - they
  # confuse pushd.
  if test "x${dir:0:1}" = "x-" ;
  then
    dir="./$dir"
  fi
 
  if [ -d "$dir" ]
  then
    if [ $num_dirs -gt 0 ]
    then
      echo "  $dir:"
    fi

    # Use pushd rather passing the directory name to find so that the
    # names that find passes on to xargs do not have any paths prepended.
    pushd "$dir" > /dev/null
    if [ $no_dots -ne 0 ] ; then
      find . -maxdepth 1 -type $type $find_extras -not -name ".*" -printf "%f\000" \
        | xargs --null --no-run-if-empty ls $opts -- ;
    else
      find . -maxdepth 1 -type $type $find_extras -printf "%f\000" \
        | xargs --null --no-run-if-empty ls $opts -- ;
    fi
    popd > /dev/null
  else
    report "directory '$dir' could not be found"
  fi
}

list_objects ()
{
  local i

  i=0;
  while [ $i -le $num_dirs ]
  do
    list_things_in_dir i
    let "i++"
  done
}

# Invoke main
main ${1+"$@"}

via: https://opensource.com/article/20/2/script-large-files

作者:Nick Clifton 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 Linux 命令行向其他用户发送消息或许非常容易,这里有一些相关的命令你可以考虑使用。在这篇文章中,我们会考察 4 个这样的命令,看看它们是怎么工作的。

wall

wall(“Write ALL” 的简称)命令允许你向所有系统中已登录的用户发送一条信息。这里我们假设用户都使用命令行在同一台服务器上工作。虽然 wall 命令最常被系统管理员用于向用户发布公告和传递信息(比如说,服务器即将因维护而关闭),但它可以被任何用户使用。

系统管理员可能会用类似下面的方式发送信息:

$ wall The system will be going down in 15 minutes to address a serious problem

而所有登录的用户都将看到类似这样的信息:

Broadcast message from admin@dragonfly (pts/0) (Thu Mar  5 08:56:42 2020):
The system is going down in 15 minutes to address a serious problem

如果希望在消息中使用单引号,你可以像这样将信息用双引号括起来:

$ wall "Don't forget to save your work before logging off"

最外层的双引号不会出现在发出的消息中,但是如果没有它们,wall 会停下并等待输入一个配对的单引号。

mesg

如果出于某种理由你不想接收来自另一个用户的消息,你可以使用 mesg 命令来屏蔽这些消息。这个命令可以接受一个 n 作为参数来拒绝某用户的消息,或者接收一个 y 作为参数来接收用户发来的消息。

$ mesg n doug
$ mesg y doug

被屏蔽的用户不会被告知这一事实。你也可以像这样使用 mesg 来屏蔽或者接收所有消息:

$ mesg y
$ mesg n

write

另一个在不使用电子邮件的情况下发送文本的命令是 write,这个命令可以用来和一个特定的用户通信。

$ write nemo
Are you still at your desk?
I need to talk with you right away.
^C

输入你的信息后用 ctrl-c 退出,这样就完成了通信。这个命令允许你发送文本,但并不会建立一个双向的通话。它只是将文本发送过去而已。如果目标用户在多个终端上登录,你可以指定你想将消息发送到哪一个终端,否则系统会选择空闲时间最短的那个终端。

$ write nemo#1

如果你试图向一个将消息屏蔽了的用户发送信息,你应该会看到这样的输出:

$ write nemo
write: nemo has messages disabled

talk/ytalk

talkytalk 命令让你可以和一个或多个用户进行交互式的聊天。它们会展示一个有上下两个子窗口的界面,每个用户向显示在他们屏幕上方的窗口内输入内容,并在下方的窗口看到回复信息。要回复一个talk 请求,接收方可以输入 talk,在后面加上请求方的用户名。

Message from Talk_Daemon@dragonfly at 10:10 ...
talk: connection requested by [email protected].
talk: respond with:  talk [email protected]

$ talk dory

如果使用的是 ytalk,那么窗口中可以包含多于两个参与者。正如下面的例子所展示的(这是上面 talk dory 命令的结果),talk 通常指向 ytalk

----------------------------= YTalk version 3.3.0 =--------------------------
Is the report ready?

-------------------------------= nemo@dragonfly =----------------------------
Just finished it

如上所述,在通话的另一侧,talk会话界面的窗口是相反的:

----------------------------= YTalk version 3.3.0 =--------------------------
Just finished it

-------------------------------= dory@dragonfly =----------------------------
Is the report ready?

同样的,使用 ctrl-c 来退出。

如果要和非本机的用户通讯,你需要加上 -h 选项和目标主机名或IP地址,就像这样:

$ talk -h 192.168.0.11 nemo

总结

Linux 上有若干基本的命令可以用来向其他登录的用户发送消息。如果你需要向所有用户快速发送信息或是需要便捷的电话替代品,又或是希望能简单地开始一个多用户快速通讯会话,这些命令会十分实用。

一些命令如 wall 允许广播消息但却不是交互式的。另外的一些命令如 talk 允许多用户进行长时间通讯,当你只需要非常快速地交换一些信息,它们可以你你避免建立一个电话会议。


via: https://www.networkworld.com/article/3530343/communicating-with-other-users-on-the-linux-command-line.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:linusboyle 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

当一个妻子教丈夫一些新技能的时候,他们都学到了比期待更多的东西。

2019 年是我们 Cherry 家学习的一年。我是一个喜欢学习新技术的高级软件工程师,并把学到的内容一起教给了我的丈夫 Chris。通过教给他一些我学到的东西,并让他全程经历我的技术演练文章,我帮助 Chris 学习到了新技术,使他能够将自己的职业生涯更深入地转向技术领域。而我学习到了新的方法,使我的演练和培训材料更易于让读者理解。

在这篇文章中,我们来讨论一下我们各自和彼此学习到了什么东西,然后探讨这对于我们的未来有何影响。

向学生的提问

Jess: Chris,是什么导致你想深入学习我的领域的技能呢?

Chris: 主要目的是为了让我事业更进一步。作为一个网络工程师的经历告诉我,现在的网络专家已经不像以前一样有价值了,我必须掌握更多的知识。由于网络经常被认为是造成这些天程序中断或出错的原因,我想从开发人员的角度了解更多关于编写应用程序的知识,以便于了解它们如何依赖网络资源。

Jess: 我首先教你什么内容?你从中学到什么?

Chris: 首先是从学习除此安装 Linux 系统开始的,之后又安装了 Ansible。只要硬件兼容,我用过的每一个 Linux 发行版都很容易安装,但可能会出现个别不兼容的情况。这就意味着我有时候第一手学习到的是如何解决系统安装过程的最初 5 分钟出现的问题了(这个我最喜欢了)。Ansible 给了一个我学习使用软件管理器来安装程序的理由。当程序安装完成后,通过查看 yum 安装的程序,我快速了解了程序管理器是如何处理程序的依赖项的,因此,用 Python 编写的 Ansible 能够在我的系统运行。自此之后,我开始使用 Ansible 来安装各种各样的程序。

Jessica: 你喜欢我这种教学方式不?

Chris: 我们一开始有过争吵,直到我们弄清楚了我喜欢的学习方式,你也知道了应该怎样为我提供最好的学习方式。在一开始的时候,我很难跟上你讲的内容。例如,当你说“一个码头工人集装箱”的时候,我完全不知道你在讲什么。比较早的时候,我的回答就是“这是一个集装箱”,然而当时这对我来说,完全没有意义。当你对这些内容进行一些更深入的讲解后,才让学习更有趣。

Jess: 老实说,这对我来说也是一个重要的教训。在你之前,我从来没有教过在这个技术领域知识比我少的人,所以你帮助我认识到我需要解释更多细节。我也得说声谢谢。

当你通过这几个学习步骤的时候,你觉得我的这篇测试文章怎样呢?

Chris: 就我个人而言,我认为这很容易,但我错了。在我主要学习的内容中,比如你介绍的Vagrant,它在不同的 Linux 发行版间的变化比我想像的要多。操作系统的变化会影响设置的方式、运行都要求和特定的命令。这看起来比我用的网络设备变化更大。这让我花费更多的精力去查看这些说明是对应我的系统还是其它的系统(有时候很难知道)。在这学习路上,我似乎碰到很多问题。

Jess: 我每天都会遇到各种各样的问题,所以对我来说日常就是用各种方法解决各种问题。

向老师的提问

Chris: Jess,你将来教我的方式会有所改变吗?

Jess: 我想让你像我一样读多一些书。通过翻阅书籍来学习新技术。每天起床后一小时和睡觉前一小时我都会看书,花费一个星期左右我就能看一到两本书。我也会创建为期两周的任务计划来实践我从书本中学习到的技能。这是除了我一天中第一个小时在喝大量咖啡时读到的科技文章之外的。当我考虑到你的职业发展目标的时候,我认为除了我们谈到的优秀博客文章和文章之外,书籍是一个重要的元素。我觉得我的阅读量使我保持进步,如果你也这么做了,你也会很快赶上我的。

Chris: 那么学生有没有教过老师呢?

Jess: 我在你那里学习到耐心。举个例子,当你完成了安装 Ansible 的时候,我问你下一步要怎样操作的时候。你直接回复我,“不知道”,这不是我想让你学习到的内容。所以我改变了策略,现在在逐步安装任何组件之前,我们将详细讨论你想要实现的目标。当我们在写 Vagrant 文章的时候,我们一起进行相应的演示操作,我以创建它时就牢记目标,因此我们就有一些需要马上实现的目标。

这实际上对我在工作中的培训方式产生了巨大的改变。现在我在大家学习的过程中会问更多问题,并更多地进行手把手讲解。我更愿意坐下来仔细检查,确保有人明白我在说什么和我们在做什么。这是我之前从来没有做过的。

我们一起学到了什么

做为一对夫妇,在这一年的技术合作中我们的技术都有所增长。

Chris: 我对自己学到的东西感到震惊。通过一年课程学习,我认识了新操作系统、如何使用 API、使用 Ansible 部署 Web 应用和使用 Vagrant 启动虚拟机器。我还学习到了文档可以让生活变得更好,所以我也会尝试去写一写。然而,在这个工作领域,操作并不总是被记录在案,所以我学会了准备好处理棘手的问题,并记录如何解决它们。

Jess: 除了我在教你中学到的知识外,我还专注于学习 Kubernetes 在云环境中的应用知识。这包括部署策略、Kubernetes API 的复杂度、创建我自己的容器,并对环境进行加密处理。我还节省了探索的时间:研究了 serverless 的代码、AI 模型、Python 和以图形方式显示热图。对于我来说,这一年也很充足。

我们下一个目标是什么?现在还不知道,但我可以向你保证,我们将会继续进行分享它。


via: https://opensource.com/article/20/2/linux-love-language

作者:Christopher Cherry 选题:lujun9972 译者:sndnvaps 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

遵循以下这些要点,把自己最好的一面呈现给潜在雇主。

如果你是一名软件工程师或技术领域的经理,那么创建或更新简历可能是一项艰巨的任务。要考虑的重点是什么?应该怎么把控格式、内容以及求职目标或摘要?哪些工作经验相关?如何确保自动化招聘工具不会过滤掉你的简历?

在过去的七年中,作为一名招聘经理,我看到了各种各样的简历;尽管有些令人印象深刻,但还有很多人写的很糟糕。

在编写或更新简历时,请遵循以下七个简单原则。

1、概述

简历顶部的简短段落应简洁明了、目的明确,避免过度使用形容词和副词。诸如“令人印象深刻”、“广泛”和“卓越”之类的词,这些词不会增加你的招聘机会;相反,它们看起来和感觉上像是过度使用的填充词。 关于你的求职目标,问自己一个重要的问题:它是否告诉招聘经理我正在寻找什么样的工作以及如何为他们提供价值? 如果不是,请加强并简化它以回答该问题,或者将其完全排除在外。

2、工作经验

数字、数字、数字——重要的事情说三遍。用确凿的事实传达观点远比一般的陈述,例如“帮助构建、管理、交付许多对客户利润有贡献的项目”更能对你有帮助。你的表达中应包括统计数据,例如“直接影响了 5 个顶级银行的项目,这些项目将其上市时间缩短了 40%”,你提交了多少行代码或管理了几个团队。数据比修饰语更能有效地展示你的能力和价值。

如果你经验不足,没有什么工作经验可展示,那些无关的经验,如暑期兼职工作,就不要写了。相反,将相关经验的细节以及你所学到的知识的详细信息写进简历,这些可以使你成为一个更好的候选人。

3、搜索术语和行话

随着技术在招聘过程中发挥如此巨大的作用,确保简历被标记为正确的职位非常重要,但不要在简历上过分吹嘘自己。如果你提到敏捷技能但不知道看板是什么,请三思。如果你提到自己精通 Java,但是已经有五年都没有使用过 Java 了,请小心。如果存在你熟悉但不一定是当前在用的语言和框架,请创建其他类别或将你的经验分为“精通”和“熟悉”。

4、教育

如果你不是应届大学毕业生,那就没必要再写你的 GPA 或你参加过的俱乐部或兄弟会,除非你计划将它们用作谈话要点以在面试中赢得信任。确保将你发表的或获取过专利的东西包括在内,即使它与该工作无关。如果你没有大学学位,请添加一个证书部分代替教育背景部分。如果你是军人,请包括现役和预备役时间。

5、资质证书

除非你想重新进入之前离开的领域,否则不要写过期的证书,例如,如果你曾经是一名人事经理,而现在正寻求动手编程的工作。如果你拥有与该领域不再相关的认证,就不要写这些认证,因为这些可能会分散招聘者的注意力,使你的简历失去吸引力。利用你的 LinkedIn 个人资料为简历添加更多色彩,因为大多数人在面试之前都会阅读你的简历和 LinkedIn 个人资料。

6、拼写和语法

让其他人帮忙对你的简历校对一下。很多时候,我在简历中看到过拼写错误的单词,或者错误用词,如“他们的”、“他们是”、“那些”。这些可以避免和修复的错误会产生负面影响。理想情况下,你的简历应用主动语态,但是如果这样会使你感到不舒服,那么就用过去时书写 —— 最重要的是要始终保持一致。不正确的拼写和语法会传递你要么不是很在乎所申请的工作,要么没有足够注意细节。

7、格式

确保你的简历是最新的并且富有吸引力,这是留下良好第一印象的简便方法。确保格式一致,例如相同的页边距,相同的间距、大写字母和颜色(将调色板保持在最低限度,不要花花绿绿)是简历写作中最基本的部分,但有必要表明你对工作感到自豪,并重视自己的价值和未来的雇主。在适当的地方使用表格,以视觉吸引人的方式分配信息。如果支持的话,以 .pdf 和 .docx 格式上传简历,然后用 Google Docs 导出为 .odt 格式,这样可以在 LibreOffice 中轻松打开。这里有一个我推荐的简单的 Google 文档简历模板。 你还可以支付少量费用(不到 10 美元)从一些设计公司购买模板。

定期更新

如果你需要(或希望)申请一份工作,定期更新简历可以最大程度地减少压力,也可以帮助你创建和维护更准确的简历版本。撰写简历时,要有远见,确保至少让另外三个人对你的简历内容、拼写和语法进行检查。即使你是由公司招募或其他人推荐给公司的,面试官也可能只能通过简历来认识你,因此请确保它为你带来良好的第一印象。

你还有其他提示要添加吗?


via: https://opensource.com/article/20/2/technical-resume-writing

作者:Emily Brand 选题:lujun9972 译者:Morisun029 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Arch Linux 是一款 Linux 发行版,主要由针对 x86-64 微处理器计算机的二进制软件包组成。Arch Linux 使用的是滚动发布模型,这种模式会频繁的给应用程序交付更新。它使用名为 pacman 的软件包管理器,可以用来安装、删除和更新软件包。

由于 Arch Linux 是为有经验的用户构建的,建议新手在使用过其他 Linux 后再来尝试。

什么是 AUR(Arch 用户软件仓库)?

Arch 用户软件仓库 通常称为 AUR,是给 Arch 用户的基于社区的软件存储库。

根据软件包在 AUR 社区的流行程度,用户编译的软件包会进入到 Arch 的官方存储库。

什么是 AUR 助手?

AUR 助手是一个包装程序,允许用户从 AUR 存储库安装软件包,而无需手动干预。

很多用例实现了自动化,比如包搜索、解决依赖关系、检索和构建 AUR 包、Web 内容检索和 AUR 包提交之类。

以下列出了 6 种最佳的 AUR 助手:

  • Yay(Yet another Yogurt)
  • Pakku
  • Pacaur
  • Pikaur
  • Trizen
  • Aura

1)Yay(Yet another Yogurt)

Yay 是 Arch Linux 下基于 CLI 的最佳 AUR 助手,使用 Go 语言编写。Yay 是基于 yaourt、apacman 和 pacaur 设计的。

这是最合适推荐给新手的 AUR 助手。类似于 Pacman,其使用方法和 pacman 中的命令和选项很相似,可以让用户在搜索过程中找到匹配的软件包提供程序,并进行选择。

如何安装 yay

依次运行以下命令以在 Arch Linux 系统上安装。

$ sudo pacman -S git go base-devel
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg -si

如何使用 yay

yay 语法与 pacman 相同,使用以下命令安装软件包。

$ yay -s arch-wiki-man

2)Pakku

Pakku 可以被视为一个初始阶段的 Pacman。它是一个包装程序,可以让用户从 AUR 中搜索或安装软件包。

它在删除依赖项方面做得不错,并且还允许通过克隆 PKGBUILD 来安装软件包。

如何安装 Pakku

要在 Arch Linux 的系统上安装 Pakku,请依次运行以下命令。

$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/pakku.git
$ cd pakku
$ makepkg -si

如何使用 Pakku

pakku 语法与 pacman 相同,使用以下命令安装软件包。

$ pakku -s dropbox

3)Pacaur

另一个基于 CLI 的 AUR 助手,可帮助减少用户与提示符的交互。

Pacaur 专为倾向于自动化重复任务的高级用户而设计。用户需要熟悉 makepkg 及其配置的 AUR 手动构建过程。

如何安装 Pacaur

要在 Arch Linux 的系统上安装 Pakku,请依次运行以下命令。

$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/pacaur.git
$ cd pacaur
$ makepkg -si

如何使用 Pacaur

pacaur 语法与 pacman 相同,使用以下命令安装软件包。

$ pacaur -s spotify

4)Pikaur

Pikaur 是具有最小依赖性的 AUR 助手,可以一次查看所有 PKGBUILD,无需用户交互即可全部构建。

Pikaur 将通过控制 pacman 命令来告知 Pacman 要执行的下一个步骤。

如何安装 Pikaur

要在 Arch Linux 的系统上安装 Pakku,请依次运行以下命令。

$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/pikaur.git
$ cd pikaur
$ makepkg -fsri

如何使用 Pikaur

pikaur 语法与 pacman 相同,使用以下命令安装软件包。

$ pacaur -s spotify

5)Trizen

Trizen 是用 Perl 编写的基于命令行的 AUR 轻量级包装器。这个面向速度的 AUR 助手,它允许用户搜索、安装软件包,还允许阅读 AUR 软件包注释。

支持编辑文本文件,并且输入/输出使用 UTF-8。内置与 pacman 的交互功能。

如何安装 Trizen

要在 Arch Linux 的系统上安装 Trizen,请依次运行以下命令。

$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/trizen.git
$ cd trizen
$ makepkg -si

如何使用 Trizen

trizen 语法与 pacman 相同,使用以下命令安装软件包。

$ pacaur -s google-chrome

6)Aura

Aura 是用 Haskell 编写的,是用于 Arch Linux 和 AUR 的安全的多语言包管理器。它支持许多Pacman 操作和子选项,可轻松进行开发并编写精美的代码。

它可以自动从 AUR 安装软件包。使用 Aura 时,用户通常会在系统升级方面遇到一些困难。

如何安装 Aura

要在 Arch Linux 的系统上安装 Pakku,请依次运行以下命令。

$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/aura.git
$ cd aura
$ makepkg -si

如何使用 Aura

aura 语法与 pacman 相同,使用以下命令安装软件包。

$ pacaur -s android-sdk

结论

用户可以凭借这些分析在上述 6 个 AUR 助手中进行选择。


via: https://www.2daygeek.com/best-aur-arch-user-repository-helpers-arch-linux-manjaro/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:hkurj 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出