快速命令行 – 快捷方式
ctrl+d 在空命令行的情况下可以退出终端。
vim
末行模式下
:ser nu 然后 直接输入行号
编辑模式下
其中i是将其后输出的字符插入到当前光标位置之前。命令I是将其后输入的字符插入到当前光标所在行的行首
其中命令a是将其后输入的字符插入到当前光标位置之后,而命令A则是将其后输入的字符追加到当前光标所在行的行尾
命令模式下
I 在行首进入编辑模式
i 在光标前进入编辑模式
p 在光标下一行进行粘贴
P 在光标当前行进行粘贴
yy 复制一行
u 撤销上一次操作
o 在光标所在行的下一行行首并进入编辑模式
在命令模式下 按住shift +两次z 保存并退出
相关命令
who命令
who命令用于显示谁登录了系统(show who is logged on),who am i与之相同。另外一个叫whoami的命令,只输出用户账号。而who或者who am i不仅显示账号,还显示终端文件名、时间、来源IP等。
常用方式
格式:who
格式:who am i
简单显示当前登录系统用户的信息,可以轻松的获取当前登录系统的用户列表,包含使用终端登录。
格式:who -a
格式:who -aH
显示所有用户的所有信息(The -a argument of the who command lists all available output for each user on your system.)
-
lyhabclinux@lyhabclinux:~$ who -aH
-
NAME LINE TIME IDLE PID COMMENT EXIT
-
system boot 2014-11-27 10:34
-
run-level 2 2014-11-27 10:34
-
LOGIN tty4 2014-11-27 10:34 1162 id=4
-
LOGIN tty5 2014-11-27 10:34 1172 id=5
-
LOGIN tty2 2014-11-27 10:34 1189 id=2
-
LOGIN tty3 2014-11-27 10:34 1190 id=3
-
LOGIN tty6 2014-11-27 10:34 1192 id=6
-
LOGIN tty1 2014-11-27 10:34 1227 id=1
-
lyhabclinux + pts/0 2015-02-06 10:12 . 23920 (183.63.158.150)
-
pts/1 2014-12-04 11:18 15008 id=ts/1 term=0 exit=0
su命令
su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;
-f或——fast:适用于csh与tsch,使shell不用去读取启动文件;
-l或——login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;
-m,-p或--preserve-environment:变更身份时,不要变更环境变量;
-s或--shell=:指定要执行的shell;
--help:显示帮助; --version;显示版本信息。
useradd命令和adduser命令
Linux系统如何添加用户这个问题到网上问一下或者搜一下,很多人可能会说useradd,实际这是不对的。useradd只会添加一个用户,没有创建它的主目录,除了添加一个新用户之外什么都没有。这个用户甚至不能登录,因为没有密码。正确的做法是man page里说的,adduser,这个命令实际是一个perl脚本,是useradd等类似底层命令的更友好的前端,它会用交互性的方式建立新用户,使用它可以指定新用户的家目录,登录密码,是否加密主目录等等,它会:
1.建立一个新目录作为家目录
2.建立同名新用户组
3.把用户的主要组设为该组(除非命令选项覆盖以上默认动作,比如–disall-homdirecry之类)
4.从/etc/SKEL目录下拷贝文件到家目录,完成初始化
5.建立新用户的密码
6.如果其存在的话,还会执行一个脚本。
useradd命令和adduser命令
在root权限下,
useradd只是创建了一个用户名,如 (useradd +用户名 ),它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的
为了避免这样的情况出现,可以用 (useradd -m +用户名)的方式创建,它会在/home目录下创建同名文件夹,然后利用( passwd + 用户名)为指定的用户名设置密码。
2. 可以直接利用adduser创建新用户(adduser +用户名)这样在/home目录下会自动创建同名文件夹
3. 删除用户,只需使用一个简单的命令“userdel 用户名”即可。不过最好将它留在系统上的文件也删除掉,你可以使用“userdel -r 用户名”来实现这一目的。
userdel命令和deluser命令
userdel 是一个底层用于删除用户的工具。在 Debian 上,我们通常会使用 deluser 命令。userdel 会查询系统账户文件,例如 /etc/password 和 /etc/group。
那么它会删除所有和用户名相关的条目。在我们删除它之前,用户名必须存在。
由于 userdel 会修改系统账户文件,那么我们需要root特权来运行它。不然我们会遇到一个报错信息“只有root权限才能执行这项操作”或者类似的信息
userdel 是一个 Linux 系统内部删除用户的工具。userdel同样是deluser命令的后端,这是一个用perl编写的删除用户的脚本。如往常一样,你可以输入man userdel来查看关于userdel命令的更多细节
前端(最好还是执行前端命令):deluser,adduser
后端(perl脚本中的其中一个命令已而):userdel,useradd
groups命令
groups命令在标准输入输出上输出指定用户所在组的组成员,每个用户属于/etc/passwd中指定的一个组和在/etc/group中指定的其他组。
grep命令
文件过滤分割与合并 grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)
是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
sudo命令
系统安全 sudo命令用来以其他身份来执行命令,预设的身份为root。
在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。
用户使用sudo时,必须先输入密码,之后
有5分钟的有效期限,超过期限则必须重新输入密码。
usermod命令
用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。
当usermod命令用来改变user ID,必须确认这名user没在电脑上执行任何程序。
你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。
实例
将newuser2添加到组staff中:
-
usermod -G staff newuser2
修改newuser的用户名为newuser1:
-
usermod -l newuser1 newuser
锁定账号newuser1:
解除对newuser1的锁定:
输入who am i
-
lyhabclinux@lyhabclinux:~$ who am i
输出
-
lyhabclinux pts/0 2015-02-06 10:12 (183.63.x.x)
在linux的世界里,上帝必然就是root账户了,它拥有整个系统至高无上的权利,比如分分钟创造个“人”(新建/添加用户)出来。
root权限,系统权限的一种,与SYSTEM权限可以理解成一个概念,但高于Administrator权限,root是Linux和unix系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力。
所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到root权限,用windows的方法理解也就是将自己的非法帐户添加到Administrators用户组。
更比如安卓操作系统中(基于linux内核)获得root权限之后就意味着已经获得了手机的最高权限,这时候你可以对手机中的任何文件(包括系统文件)执行所有增、删、改、查的操作。
我们一般登录系统时都是以普通账户的身份登录的,也就是说我就是个普通人,那么我怎么添加用户呢,一般人又没有那能力。
嘿嘿,都说了是扮上帝的嘛,这里就要用到
sudo这个命令了。
不过使用这个命令有两个大前提,
一是你要知道当前登录用户的密码
二是当前用户必须在sudo用户组。
lyhabclinux用户,它同时也属于sudo用户组(稍后会介绍如何查看和添加用户组),那就开始动手吧
新建一个叫li123的用户:
-
lyhabclinux@lyhabclinux:~$ sudo useradd li123
-
lyhabclinux@lyhabclinux:~$ sudo passwd li123
最好不要用adduser,因为要输入很多个人资料
然后添加密码,默认在创建完用户之后是没有密码的
-
lyhabclinux@lyhabclinux:~$ sudo passwd li123
-
Enter new UNIX password:
-
Retype new UNIX password:
-
passwd: password updated successfully
安装finger
-
lyhabclinux@lyhabclinux:~$ sudo apt-get install finger
-
Reading package lists... Done
-
Building dependency tree
-
Reading state information... Done
-
The following NEW packages will be installed:
-
finger
-
0 upgraded, 1 newly installed, 0 to remove and 75 not upgraded.
-
Need to get 19.6 kB of archives.
-
After this operation, 81.9 kB of additional disk space will be used.
-
Get:1 http://azure.archive.ubuntu.com/ubuntu/ precise/main finger amd64 0.17-14 [19.6 kB]
-
Fetched 19.6 kB in 0s (28.1 kB/s)
-
Selecting previously unselected package finger.
-
(Reading database ... 51501 files and directories currently installed.)
-
Unpacking finger (from .../finger_0.17-14_amd64.deb) ...
-
Processing triggers for man-db ...
-
Setting up finger (0.17-14) ...
用finger查看用户权限,属主目录,所用的shell
-
lyhabclinux@lyhabclinux:~$ finger li123
-
Login: li123 Name:
-
Directory: /home/li123 Shell: /bin/bash
-
Never logged in.
-
No mail.
-
No Plan.
这个命令不但可以添加用户到系统,同时也会默认为新用户创建home目录
-
lyhabclinux@lyhabclinux:~$ ls /home
-
lilei lyhabclinux ubuntu
现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,使用如下命令切换登录用户
-
lyhabclinux@lyhabclinux:~$ su -l li123
是否切换成功
-
li123@lyhabclinux:/$ whoami
-
li123
检查所在目录
-
lilei@lyhabclinux:~$ pwd
-
/home/lilei
-
lilei@lyhabclinux:~$
退出当前用户跟退出终端一样可以使用exit命令或者使用快捷键Ctrl+d
层层logout之后,你不停的切换用户,不停su 那么就会进入不停的用户,如果要回到最初那个用户,要么执行多次exit,要么su 到那个最初用户
-
lilei@lyhabclinux:~$ exit
-
logout
-
li123@lyhabclinux:/$ exit
-
logout
-
lyhabclinux@lyhabclinux:~$
在linux里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源,就跟家的形式差不多,你的兄弟姐妹(不同的用户)输入同一个家(用户组),
你们可以共同拥有这个家(共享资源),你爸妈对待你们都一样(共享权限),你偶尔写写日记,其他人未经允许不能查看(私有资源和权限)。
当然一个用户是可以属于多个用户组的,正如你既属于家庭,又属于学校或公司。
在linux里面如何知道自己属于哪些用户组呢
方法一:使用groups命令
-
lyhabclinux@lyhabclinux:~$ groups li123
-
li123 : li123
其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到li123用户属于li123用户组,
每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组
(差不多就相当于家长的意思,或者说是老总),这里你要特别注意sudo用户组,如果你没在这个sudo用户组那么你是不能使用sudo命令的,即你是无法临时获得管理员权限,
后面会讲如何将已有用户加入到sudo用户组
方法二:查看/etc/group文件
-
lyhabclinux@lyhabclinux:~$ cat /etc/group | sort
-
admin:x:111:ubuntu,lyhabclinux
-
adm:x:4:ubuntu,lyhabclinux
-
audio:x:29:ubuntu
-
backup:x:34:
-
bin:x:2:
-
cdrom:x:24:ubuntu,lyhabclinux
-
crontab:x:102:
-
daemon:x:1:
-
dialout:x:20:ubuntu
-
dip:x:30:ubuntu
-
disk:x:6:
-
fax:x:21:
-
floppy:x:25:ubuntu
-
fuse:x:104:
-
games:x:60:
-
gnats:x:41:
-
irc:x:39:
-
kmem:x:15:
-
landscape:x:109:
-
li123:x:1003:
-
libuuid:x:101:
-
lilei:x:1002:
-
list:x:38:
-
lp:x:7:
-
lyhabclinux:x:1001:
-
mail:x:8:
-
man:x:12:
-
messagebus:x:105:
-
mlocate:x:107:
-
mysql:x:112:
-
netdev:x:110:ubuntu
-
news:x:9:
-
nogroup:x:65534:
-
operator:x:37:
-
plugdev:x:46:ubuntu
-
proxy:x:13:
-
root:x:0:
-
sasl:x:45:
-
shadow:x:42:
-
src:x:40:
-
ssh:x:108:
-
staff:x:50:
-
sudo:x:27:
-
syslog:x:103:
-
sys:x:3:
-
tape:x:26:
-
tty:x:5:
-
ubuntu:x:1000:
-
users:x:100:
-
utmp:x:43:
-
uucp:x:10:
-
video:x:44:ubuntu
-
voice:x:22:
-
whoopsie:x:106:
-
www-data:x:33:
这里cat命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用.| sort表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到的用户组信息
我们可以过滤一下结果
-
lyhabclinux@lyhabclinux:~$ cat /etc/group | grep -E "li123|sudo"
-
sudo:x:27:
-
li123:x:1003:
etc/group文件格式说明
/etc/group的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录。格式如下:
group_name:password:GID:user_list
你看到上面的password字段为一个'x'并不是说密码就是它,只是表示密码不可见而已
将其它用户加入sudo用户组
默认情况下新创建的用户是不具有root权限的,也不在sudo用户组,也就无法通过sudo命令临时获取root权限
切换到li123账户
-
lyhabclinux@lyhabclinux:~$ su -l li123
-
Password:
-
No directory, logging in with HOME=/
-
li123@lyhabclinux:/$
随便执行一个ls的命令,用sudo权限来执行,如果没有sudo权限就会报错
-
li123@lyhabclinux:/$ sudo ls
-
[sudo] password for li123:
-
li123 is not in the sudoers file. This incident will be reported.
会提示li123不在sudoers文件中,意思就是li123不在sudo用户组中,至于sudoers文件(/etc/sudoers)你现在最好不要动它,操作不慎会导致比较麻烦的后果。
使用usermod命令可以为用户添加用户组,同样使用该命令你必需有root权限,你可以直接使用root用户为其它用户添加用户组,或者用其它已经在sudo用户组的用户使用sudo命令获取权限来执行该命令
这里我用lyhabclinux用户执行sudo命令将li123添加到sudo用户组,让它也可以使用sudo命令获得root权限
-
li123@lyhabclinux:/$ su -l lyhabclinux
-
Password:
-
lyhabclinux@lyhabclinux:~$ su lyhabclinux
-
Password:
-
lyhabclinux@lyhabclinux:~$ groups li123
-
li123 : li123
-
lyhabclinux@lyhabclinux:~$ sudo usermod -G sudo li123
-
lyhabclinux@lyhabclinux:~$ groups li123
-
li123 : li123 sudo
-
lyhabclinux@lyhabclinux:~$
然后再切换会lilei用户,现在就可以使用sudo获取root权限了。
上帝说我要抹杀掉你?
上帝怒了,要从他世界里抹掉某个人的存在,那对他来说也是相当简单啊
-
lyhabclinux@lyhabclinux:~$ sudo deluser lilei --remove-home
-
Looking for files to backup/remove ...
-
Removing files ...
-
Removing user `lilei' ...
-
Warning: group `lilei' has no more members.
-
Done.
或者
userdel 提供了 -f 选项来强制删除用户。甚至当用户已经登入 Linux 系统时此选项仍旧生效。
使用ps ax|grep 用户名 来查看是否有进程使用要删除的用户
-
lyhabclinux@lyhabclinux:~$ ps ax|grep li123
-
24604 pts/0 S 0:00 su -l li123
-
25176 pts/0 S+ 0:00 grep --color=auto li123
上面显示用户 li123已经登录了系统。它被标记的进程25176是 grep进程
-
lyhabclinux@lyhabclinux:~$ sudo userdel -f -r li123
我们验证一下
-
lyhabclinux@lyhabclinux:~$ cat /etc/passwd |grep li123
-
lyhabclinux@lyhabclinux:~$
-
lyhabclinux@lyhabclinux:~$ ll /home
-
total 16
-
drwxr-xr-x 4 root root 4096 Feb 6 13:54 ./
-
drwxr-xr-x 23 root root 4096 Nov 27 10:33 ../
-
drwxr-xr-x 4 lyhabclinux lyhabclinux 4096 Feb 6 14:03 lyhabclinux/
-
drwxr-xr-x 2 ubuntu ubuntu 4096 Sep 26 02:07 ubuntu/
当我们用“userdel -f -r li123”只会显示已经登录的要被删除的用户信息。命令本身已经成功
有一件事我们必须了解,带 -f 选项的
userdel 不会断开 该用户已有的 SSH 链接。
因此,即使用户已经不存在,但实际上仍是登录状态,并且是活跃用户。但是当用户登出后不可再登录,因为用户已经被删除。
因此所以这个选项使用起来有些危险,因为它会使你的系统进入不一致的状态。