前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【总结】LINUX常见易错命令操作

【总结】LINUX常见易错命令操作

作者头像
辉哥
修改2023-09-25 16:53:53
1K0
修改2023-09-25 16:53:53
举报

摘要

本文讲解LINUX下用户/用户组,文件属性及修改,SUDO免密登录,SSH互信免密登录,VIM,history等命令操作实践。

用户和用户组管理

参考:

(1) Linux 用户和用户组管理 https://www.runoob.com/linux/linux-user-manage.html

实现用户账号的管理,要完成的工作主要有如下几个方面:

  • 用户账号的添加、删除与修改。
  • 用户口令的管理。
  • 用户组的管理。

1、添加新的用户账号使用useradd命令

useradd 选项 用户名

参数说明:

  • 选项:
    • -c comment 指定一段注释性描述。
    • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
    • -g 用户组 指定用户所属的用户组。
    • -G 用户组,用户组 指定用户所属的附加组。
    • -s Shell文件 指定用户的登录Shell。
    • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
  • 用户名: 指定新账号的登录名。

例如:

# useradd -s /bin/bash -g root -d /home/duncan duncan

增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。

2、删除帐号

如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

删除一个已有的用户账号使用userdel命令,其格式如下:

userdel 选项 用户名

常用的选项是 -r,它的作用是把用户的主目录一起删除。

例如:

# userdel -r duncan

此命令删除用户duncan在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

3、修改帐号

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

修改已有用户的信息使用usermod命令,其格式如下:

usermod 选项 用户名

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。

4、用户口令的管理

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

passwd 选项 用户名

可使用的选项:

  • -l 锁定口令,即禁用账号。
  • -u 口令解锁。
  • -d 使账号无口令。
  • -f 强迫用户下次登录时修改口令。

如果默认用户名,则修改当前用户的口令。

例如:

# passwd duncan
New password: 
Retype new password: 
passwd: password updated successfully

chmod/chown(文件基本属性)

参考:

(1) Linux 文件基本属性 https://www.runoob.com/linux/linux-file-attr-permission.html (2) Linux chown 命令 https://www.runoob.com/linux/linux-comm-chown.html (3) Linux chmod命令 https://www.runoob.com/linux/linux-comm-chmod.html

在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

  • chown (change ownerp) : 修改所属用户与组。
  • chmod (change mode) : 修改用户的权限。

下图中通过 chown 来授权用户,通过 chmod 为用户设置可以开门的权限。

img

ls-l文件属性说明

在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:

[root@www /]# ls -l
total 64
dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot
……

实例中,bin 文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

img

每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。

363003_1227493859FdXT

chown更改文件属主/属组

更改文件属主,也可以同时更改文件属组

语法:

chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名

例如,将install.log的拥有者与群组改为root:

[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

chmod:更改文件9个属性

Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。

文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

  • r:4
  • w:2
  • x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx--- 分数则是:

  • owner = rwx = 4+2+1 = 7
  • group = rwx = 4+2+1 = 7
  • others= --- = 0+0+0 = 0

数字改变文件属性

chmod 777 file

符号改变文件属性

使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。 命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示:

who

用户类型

说明

u

user

文件所有者

g

group

文件所有者所在组

o

others

所有其他用户

a

all

所用用户, 相当于 ugo

operator 的符号模式表:

Operator

说明

+

为指定的用户类型增加权限

-

去除指定用户类型的权限

=

设置指定用户权限的设置,即将用户类型的所有权限重新设置

permission 的符号模式表:

模式

名字

说明

r

设置为可读权限

w

设置为可写权限

x

执行权限

设置为可执行权限

X

特殊执行权限

只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行

s

setuid/gid

当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限

t

粘贴位

设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位

例如

chmod ug+w,o-w file1.txt file2.txt

vi/vim 编辑文本

按键

功能

移动光标的方法

G

移动到这个档案的最后一行(常用)

nG

n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)

gg

移动到这个档案的第一行,相当于 1G 啊! (常用)

搜索替换

/word

向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)

?word

向光标之上寻找一个字符串名称为 word 的字符串。

n

这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!

N

这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。

删除、复制与粘贴

dd

删除游标所在的那一整行(常用)

特殊命令

:set paste

复制粘贴不自动缩进

ggVG

gg 让光标移到首行,在vim才有效,vi中无效V 是进入Visual(可视)模式G 光标移到最后一行选中内容以后就可以其他的操作了: d 删除选中内容y 复制选中内容到0号寄存器"+y 复制选中内容到+寄存器,也就是系统的剪贴板,供其他程序用(未成功)

history(ctrl+r)搜索历史命令

使用 HISTTIMEFORMAT 显示时间戳

当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身,如果你想要查看命令历史的时间戳,那么可以执行:

# export HISTTIMEFORMAT='%F %T '
# history | more
1  2008-08-05 19:02:39 service network restart
2  2008-08-05 19:02:39 exit
3  2008-08-05 19:02:39 id
4  2008-08-05 19:02:39 cat /etc/redhat-release

注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后的那些新执行的 bash 命令才会被打上正确的时间戳。在此之前的所有命令,都将会显示成设置 HISTTIMEFORMAT 变量的时间。

使用 ctrl+r 搜索历史

(1) ctrl+r 就是反向搜索执行过的命令。(reverse-i-search); 然后连续ctrl+r则继续向上搜索关键字的历史记录。

(2) 采用上下箭头也能搜索上面的历史记录。

 1284  2021-05-23 15:21:38 ls
 1285  2021-05-23 15:21:38 clear
 1286  2021-05-23 15:21:38 ls
 1287  2021-05-23 15:21:38 cd logs/
 1288  2021-05-23 15:21:38 ls
(reverse-i-search)`ls': ls -la

从命令历史中执行一个指定的命令

在下面的例子中,如果你想重复执行第 4 条命令,那么可以先退出历史记录,然后执行 !4:

# history | more
1  service network restart
2  exit
3  id
4  cat /etc/redhat-release
# !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)

使用 -c 选项清除所有的命令历史

如果你想清除所有的命令历史,可以执行:

# history -c

控制显示条数和筛选

# 显示10条历史记录命令
history 10
# 显示关键字为geth的命令
history |more |grep geth

sudo免密码

参考:

(1) Linux中普通用户配置sudo权限(带密或免密)https://www.cnblogs.com/zhangwuji/p/9947768.html

配置步骤如下:

1、登陆或切换到root用户下;

2、添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers

3、编辑sudoers文件:vi /etc/sudoers

找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (注:这里的xxx是你的用户名)

你可以根据实际需要在sudoers文件中按照下面四行格式中任意一条进行添加:

youuser            ALL=(ALL)                ALL
%youuser           ALL=(ALL)                ALL
youuser            ALL=(ALL)                NOPASSWD: ALL
%youuser           ALL=(ALL)                NOPASSWD: ALL

第一行:允许用户youuser执行sudo命令(需要输入密码)。 第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码)。 第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码。 第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码。

4、撤销sudoers文件写权限,命令:chmod u-w /etc/sudoers

5、至此,普通用户就可以使用sudo了。

youuser 用户登录到部署目标机器后,执行以下命令,不需要输入密码并切换到 root 用户,表示 youuser 用户 sudo 免密码配置成功。

sudo -su root

修改PATH及生效方法

参考:

(1 )Linux中修改环境变量及生效方法

方法一:

在/etc/profile文件中添加变量【对所有用户生效(永久的)】

用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

要让刚才的修改马上生效,需要执行以下代码

# source /etc/profile

方法二:

在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

要让刚才的修改马上生效,需要在用户目录下执行以下代码

# source .bash_profile

方法三:

直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

例如:export PATH=/usr/local/webserver/php/bin:$PATH

SSH互信公私钥对登录

参考:

(1)Linux下实现免密码登录(超详细) https://www.cnblogs.com/yixue2017/p/7559970.html

(2)Linux 普通用户之间免密登陆 https://www.cnblogs.com/klb561/p/8688263.html

(3)Linux下SSH免密码登录配置详解 https://www.jb51.net/article/168598.htm

实施:

(1) 同台机器之间实现普通用户duncan免密登录root账号

普通用户之间的免密登陆和 使用root 进行免密登陆,基本设置都是一样的,只不过普通用户之间需要修改 .ssh 和 authorized_keys 的权限免密才能生效。

[1] 切换用户到duncan登录状态下,生成公私钥对,一路回车生成公私钥对。

/home# mkdir duncan
/home# chown duncan:root duncan
/home# su - duncan
~$ ssh-keygen 
~$ ls -la 
total 12
drwxr-xr-x 3 duncan root 4096 May 23 17:08 .
drwxr-xr-x 4 root   root 4096 May 23 17:05 ..
drwx------ 2 duncan root 4096 May 23 17:08 .ssh

文件说明:

authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥

id_rsa : 生成的私钥文件

id_rsa.pub : 生成的公钥文件

know_hosts : 已知的主机公钥清单

如果希望ssh公钥生效访问账户针对被访账户文件目录需满足至少下面两个条件:

1) .ssh目录的权限必须是700

2) .ssh/authorized_keys文件权限必须是600

建议root及duncan的以上文件夹及文件都改为777吧。

[2] 在duncan用户登录下执行命令,把他的公钥加到远程免密登录的公钥授权文件authorized_keys。

~$ssh-copy-id -i ~/.ssh/id_rsa.pub 127.0.0.1 
##ls命令可以看到这样操作后增加了authorized_keys/known_hosts文件。
~/.ssh$ ls -l

[3] 尝试免密登录

以下方式登录不需要密码则为免密登录设置成功。

ssh '127.0.0.1'

(2) 机器A普通用户duncan免密登录另外一台机器B

[1] 已存证duncan的公司钥对。

[2] 在duncan用户登录下执行命令,把duncan的公钥加到root账户的远程免密登录的公钥授权文件authorized_keys。

~$ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.19.23.50

[3] 尝试免密登录

以下方式登录不需要密码则为免密登录设置成功。

ssh 'root@172.19.23.50'
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • 用户和用户组管理
    • 1、添加新的用户账号使用useradd命令
      • 2、删除帐号
        • 3、修改帐号
          • 4、用户口令的管理
          • chmod/chown(文件基本属性)
            • ls-l文件属性说明
              • chown更改文件属主/属组
                • chmod:更改文件9个属性
                • vi/vim 编辑文本
                • history(ctrl+r)搜索历史命令
                  • 使用 HISTTIMEFORMAT 显示时间戳
                    • 使用 ctrl+r 搜索历史
                      • 从命令历史中执行一个指定的命令
                        • 使用 -c 选项清除所有的命令历史
                          • 控制显示条数和筛选
                          • sudo免密码
                          • 修改PATH及生效方法
                          • SSH互信公私钥对登录
                          相关产品与服务
                          访问管理
                          访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档