一、远程管理命令
1.SSH客户端的简单使用
ssh [-p port] user@remote
user-远程机器上的用户名,如果不指定的话默认为当前用户。
remote-远程机器的地址,可以是ip/域名,或者是别名。
port-SSH Server监听的端口,如果不指定,就为默认值22 。
exit-退出当前用户的登录
ssh这个终端命令只能在Linux或者UNIX系统下使用。如果是在Windows系统中,可以安装PuTTY或者XShell客户端软件即可。
Putty https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
XShell
http://xshellcn.com
XShell安装时不要选择“商业(包括评估)”[需要输入序列号],而要选择“免费为家庭/学校”
在工作中,SSH服务器的端口号很有可能不是22,如果遇到这种情况就需要使用-p选项,指定正确的端口号,否则无法正常连接到服务器。
//MAC电脑使用ssh连接ubuntu
ssh -p 22 qsd@192.168.0.105
//输入yes,然后输入qsd用户的密码
shutdown -r now//会提示权限不够
sudo shutdown -r now
//提示输入qsd用户的密码,但是此时ubuntu已经重新启动了
2.scp
secure copy,是一个在Linux下用来进行远程拷贝文件或目录的命令。
scp的地址格式与ssh基本相同(user@remote),但需要注意:在指定端口是使用的是大写的-P。
选项
-r:若给出的源文件是目录文件,则scp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。
-P:若远程SSH服务器的端口不是22,需要使用大写字母-P选项指定端口。
scp -P port 01.py
user@remote:Desktop/01.py
//把本地当前目录下的01.py文件复制到远程家目录下的Desktop/01.py
//【注意:':' 后面的路径如果不是绝对路径,则以用户的家目录作为参照路径】
scp -P port user@remote:Desktop/01.py 01.py
scp -P port user@remote:Desktop/01.py .
//把远程家目录下的Desktop/01.py文件复制到本地当前目录下的01.py
scp [-P 22]-r demo user@remote:Desktop//加上-r选项可以传送文件夹。把当前目录下的demo文件夹复制到远程家目录下的Desktop
scp -r user@remote:Desktop demo//把远程家目录下的Desktop复制到当前目录下的demo文件夹
scp这个终端命令只能在Linux或者UNIX系统下使用。
如果在Windows系统中,可以安装PuTTY,使用pscp命令行工具或者安装FileZilla使用FTP进行文件传输。【在Windows操作系统和Linux服务器之间进行文件传输】
FileZilla
http://www.filezilla.cn/download/client(都是很新的版本,有些时候需要一些比较老的版本)
FileZilla在传输文件时,使用的是FTP服务,而不是SSH服务,因此端口号应该设置为21 。
3.SSH高级
【有关SSH配置信息都保存在用户家目录下的.ssh(这是一个隐藏目录,ls命令要加-a选项才能看到)目录下】
qsd@qsd-virtual-machine:~$ cd .ssh
qsd@qsd-virtual-machine:~/.ssh$ ls -lah
总用量 8.0K
drwx------ 2 qsd qsd 4.0K 1月 25 14:47 .
drwxr-xr-x 16 qsd qsd 4.0K 1月 27 11:01 ..
//此时.ssh目录下没有任何文件
ssh -p 22 user@remote//出现授权信息后输入yes,然后输入密码远程登录
exit//退出远程登录
qsd@qsd-virtual-machine:~/.ssh$ ls -lah//此时会发现.ssh目录下多出了一个known_hosts文本文件
known_hosts文本文件:我们第一次远程登录陌生的服务器时,在出现授权信息后输入yes,这时远程服务器的地址信息就会保存在known_hosts文件中,当我们下一次再次使用ssh连接服务器主机的时候,就不会出现授权信息的提示,而是直接提示输入密码
(1)免密码登录
在执行ssh,scp等命令的时候不需要输入密码。
–步骤
a.配置公钥
执行ssh-keygen即可生成SSH钥匙,一路回车即可。
ssh-keygen命令会生成两个远程登录时加密使用的文件(id_rsa和id_rsa.pub)并且保存在.ssh目录下,
b.上传公钥到服务器
执行ssh-copy-id -p port user@remote,可以让远程服务器记住我们的公钥。
将id_rsa.pub文件传递到服务器上的家目录下的.ssh目录下,文件名自动为authorized_keys。
【本地使用私钥对数据进行加密/解密,服务器使用公钥对数据进行解密/加密。id_rsa.pub-公钥;id_rsa-私钥】
非对称加密算法
使用公钥加密的数据,需要使用私钥解密
使用私钥加密的数据,需要使用公钥解密
设置完成之后客户端和服务器之间的数据传输就是加密的了,再次ssh远程登录服务器不需要输入密码直接进入到服务器的家目录。
(2)配置别名【别名不要有空格】
配置别名可以不用再每次都输入ssh -p port user@remote一长串,比如可以使用ssh mac来代替上面这么一长串。
在~/.ssh/config文件中追加以下内容
Host mac//Host 别名
HostName 服务器ip地址
User 服务器用户名
Port 22
保存之后,即可用ssh mac实现远程登录了,scp同样可以使用。
qsd@qsd-virtual-machine:~/.ssh$ touch config//创建config文件
qsd@qsd-virtual-machine:~/.ssh$ gedit config//在终端中用gedit打开config文件,然后进行编辑
scp -r ~/Desktop mac:Desktop/demo//将桌面上的所有文件(夹)复制到服务器桌面的demo文件夹内【注意冒号】
ssh mac//即可登录
二、用户权限
1.用户和权限
用户是Linux系统工作中重要的一环,用户管理包括用户与组管理。
【实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限】
在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个帐号,并且对于不同的系统资源拥有不同的使用权限。
可以制定每一个用户针对不同的文件或目录的不同权限。
对文件和目录的权限
权限 | 英文 | 缩写 | 数字代号 |
---|---|---|---|
读 | read | r | 4 |
写 | write | w | 2 |
执行 | excute | x | 1 |
2.ls -l扩展
-rw-rw-r–
drwxrwxr-x 3 qsd qsd 4096 time name
第一列是目录的标记(d表示是目录,-表示是文件),后面的9个字符分为三组,每组都是读、写、执行权限。再后面是硬链接数、文件的拥有者名称、文件的组名称、文件的大小、创建和修改时间、文件名称
文件或目录的拥有者–第一组权限
文件或目录拥有者的群组-第二组权限【家目录下用户和组一般一样】
其他用户-第三组权限
ls -l可以查看文件夹下文件的详细信息,从左到右依次是:
权限:第一个字符如果是d表示目录【目录、拥有者权限、组权限、其他用户权限】;
硬链接数:通俗的讲,就是有多少种方式,可以访问到当前目录/文件;
拥有者:家目录下,文件/目录的拥有者通常都是当前用户;
组:在Linux中,很多时候,会出现组名和用户名相同的情况;
大小
时间
名称
桌面上aa文件夹里还有一个a文件夹,此时aa的硬链接数是3,表示有三种方式可以访问到aa。第一种cd 绝对路径;第二种在aa目录下cd .打开当前目录;第三种在a目录下cd …打开上一级目录。
如果在aa文件夹中再新建一个目录b,则aa的硬链接数变成4,第四种在b目录下cd …打开上一级目录。
【一个目录的子目录数越多,那么它的硬链接数就越大】
【绝大多数的文件的硬链接数都是1】
【目录的硬链接数则取决于它有多少个子目录】
- chmod修改文件权限
chmod +/-rwx 文件名/目录名
chmod可以修改用户/组队文件/目录的权限。
chmod -rw 01.py//取消当前用户对01.py的读写权限
chmod +r 01.py
chmod +x 01.py//ls -l之后发现01.py变绿了
//执行01.py
./01.py//注意执行文件的格式./
01.py的内容
#!/usr/bin/python
print("hello python")
print("hello world")
4.chmod修改目录权限
mkdir test
chmod -x test
cd test//权限不够
ls test//权限不够
chmod +x test
chmod -rw test
cd test//可以正常打开
ls//无法打开目录,权限不够
touch 02.py//权限不够
想在目录下执行终端命令,就必须有可执行权限。如果没有可执行权限,我们连使用cd进入这个目录的权利都没有。
5.超级用户
Linux系统中的root帐号通常用于系统的维护和管理,对操作系统的所有资源具有所有访问权限。
在绝大多数版本的Linux中,都不推荐直接使用root帐号登录系统。
在Linux的安装过程中,系统会自动创建一个用户帐号,而这个默认的用户就称为标准用户。
sudo
su是substitute user的缩写,表示使用另一个用户的身份。
sudo命令用来以其他身份来执行命令,预设的身份为root。
用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
若未经授权的用户企图使用sudo,则会发出警告邮件给管理员。
6.组管理
创建组/删除组的终端命令都需要通过sudo执行。
groupadd 组名-添加组
groupdel 组名-删除组
cat /etc/group-确认组信息
chgrp -R 组名 文件/目录名-递归修改文件/目录的所属组
/etc目录下保存的绝大多数文件都是跟系统配置相关的。而和群组相关的配置信息就保存在etc/group文件中。
qsd@qsd-virtual-machine:~/桌面$ groupadd dev
groupadd: Permission denied.
groupadd:无法锁定 /etc/group,请稍后再试。
qsd@qsd-virtual-machine:~/桌面$ sudo groupadd dev//dev组添加成功
cat /etc/group//可以看到dev:x:1001:
qsd@qsd-virtual-machine:~/桌面$ sudo groupdel dev
cat /etc/group//这次看不到dev:x:1001:
mkdir Python学习
sudo groupadd dev
cat /etc/group
//此时Python学习的组是qsd
qsd@qsd-virtual-machine:~/桌面$ sudo chgrp -R dev Python学习/
//将组qsd修改为dev
7.用户管理
创建用户/删除用户/修改其他用户密码的终端命令都需要通过sudo执行。
命令 | 作用 | 说明 |
---|---|---|
useradd -m -g 组 新建用户名 | 添加新用户 | -m自动建立用户家目录 -g指定用户所在的组,否则会建立一个和同名的组 |
passwd 用户名 | 设置用户密码 | 如果是普通用户,直接用passwd可以修改自己的账户密码 |
userdel -r 用户名 | 删除用户 | -r选项会自动删除用户家目录 |
cat /etc/passwd / grep 用户名 | 确认用户信息 | 新建用户后,用户信息会保存在/etc/passwd文件中 |
在Linux中要添加一个新用户,必须使用两个终端命令(useradd和passwd)(用户没有密码是没有办法登录的)
qsd@qsd-virtual-machine:~/桌面$ sudo useradd -m -g dev zhangsan
qsd@qsd-virtual-machine:~/桌面$ ls -l /home
总用量 8
drwxr-xr-x 16 qsd qsd 4096 1月 27 11:01 qsd
drwxr-xr-x 2 zhangsan dev 4096 1月 27 20:15 zhangsan
qsd@qsd-virtual-machine:~/桌面$ sudo passwd zhangsan
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码
创建用户时,如果忘记添加-m选项指定新用户的家目录,最简单的方法就是删除用户,重新创建。
创建用户时,默认会创建一个和用户名同名的组名。除非使用-g选项指定组。
用户信息保存在/etc/passwd文件中。
qsd@qsd-virtual-machine:~/桌面$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2443 1月 27 20:15 /etc/passwd
//passwd文件的拥有者root只有读写权限,而组成员和其他成员只有读权限。
qsd@qsd-virtual-machine:~/桌面$ sudo useradd -g dev lisi
//不带-m添加lisi用户后,passwd文件中会多出这样一行lisi:x:1002:1001::/home/lisi:/bin/sh,但是在home中并不会向zhangsan用户那样有lisi家目录。
qsd@qsd-virtual-machine:~/桌面$ sudo userdel -r lisi
//lisi用户删除成功,但是因为他没有家目录,所以出现以下提示信息。
userdel: lisi 邮件池 (/var/mail/lisi) 未找到
userdel:未找到 lisi 的主目录“/home/lisi”
8.查看用户信息
命令 | 作用 |
---|---|
id [用户名] | 查看用户UID和GID信息 |
who | 查看当前所有登陆的用户列表 |
whoami | 查看当前登录用户的账户名 |
qsd@qsd-virtual-machine:~/桌面$ id zhangsan
uid=1001(zhangsan) gid=1001(dev) 组=1001(dev)
qsd@qsd-virtual-machine:~/桌面$ cat -n /etc/passwd | grep zhangsan
42行 zhangsan:x:1001:1001::/home/zhangsan:/bin/sh
qsd@qsd-virtual-machine:~/桌面$ cat -n /etc/group | grep dev
67行 dev:x:1001:
qsd@qsd-virtual-machine:~/桌面$ who
qsd :1 2022-01-27 11:01 (:1)
//(:1)表示用户登录的地址是本机。如果有其他用户远程登录,那么这里括号里就是远程机器的IP地址。
用户代号uid的信息保存在/etc/passwd文件中,而组代号gid的信息保存在/etc/group文件中。
其中,zhangsan : x : 1001:1001::/home/zhangsan:/bin/sh中x表示这个用户是有密码的,但是密码是加密的;接下来1002是zhangsan的UID用户标识;1001是组代号/标识;两个冒号之间本来是用户的全名(或者本地账号),如果为空则默认为用户名作为全名;接下来是家目录;最后是登录使用的Shell(就是登陆之后使用的终端命令,ubuntu默认是dash)
/etc/passwd文件中存放的是用户的信息,由6个冒号组成的7个信息,分别是
1用户名
2密码
3 UID
4 GID
5用户全名或本地账号
6家目录
7登录使用的Shell