Linux(三)~22.01.27

一、远程管理命令
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 125 14:47 .
drwxr-xr-x 16 qsd qsd 4.0K 127 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系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个帐号,并且对于不同的系统资源拥有不同的使用权限。
可以制定每一个用户针对不同的文件或目录的不同权限。

对文件和目录的权限

权限英文缩写数字代号
readr4
writew2
执行excutex1

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】
【目录的硬链接数则取决于它有多少个子目录】

  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 127 11:01 qsd
drwxr-xr-x  2 zhangsan dev 4096 127 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 127 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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来为您解答这个问题。 首先,我们需要将数据整理成R可处理的格式。这里,我将数据手动输入到R中,并将其保存为data.frame对象: ```R transportation <- data.frame( year = 2002:2021, railway = c(366.34, 375.14, 401.82, 419.16, 436.38, 447.02, 471.85, 487.8, 503.12, 518.25, 516.16, 522.77, 516.81, 532.08, 531.9, 527, 524.47, 511.09, 492, 476), highway = c(71.31, 67.32, 68.07, 67.88, 67.03, 66.3, 66.35, 63.34, 60.7, 51.92, 51, 49.2, 48.62, 46.52, 56.11, 54.45, 54.74, 54, 53, 45), water = c(20.27, 22.01, 29.42, 28.44, 27.44, 26.56, 27, 28.27, 29.03, 30.09, 30.35, 32.27, 31.09, 29.1, 34.06, 33.38, 33.5, 34.8, 37, 39), air = c(1482.14, 1510.68, 1773.71, 1751.13, 1724.75, 1716.97, 1669.62, 1616.08, 1598.11, 1573.69, 1547.57, 1508.83, 1464.21, 1497.47, 1502.85, 1484.65, 1479, 1470, 1442, 1432) ) ``` 接下来,我们可以使用ggplot2库绘制各种图形来更好地理解数据。 首先,我们可以使用ggplot2库绘制各种运输方式的时间序列折线图,代码如下: ```R library(ggplot2) ggplot(melt(transportation, id.vars = "year"), aes(x = year, y = value, color = variable)) + geom_line() + xlab("Year") + ylab("Passenger Distance") + ggtitle("Passenger Distance by Transportation Type") + theme(legend.position = "bottom") ``` 运行上面的代码,可以得到一个绘制了四种运输方式的时间序列折线图。 接着,我们可以使用ggplot2库绘制各种运输方式的密度图,代码如下: ```R ggplot(melt(transportation, id.vars = "year"), aes(x = value, fill = variable)) + geom_density(alpha = 0.5) + xlab("Passenger Distance") + ylab("Density") + ggtitle("Passenger Distance Density by Transportation Type") ``` 运行上面的代码,可以得到一个绘制了四种运输方式的密度图。 最后,我们可以使用ggplot2库绘制各种运输方式的箱线图,代码如下: ```R ggplot(melt(transportation, id.vars = "year"), aes(x = variable, y = value, fill = variable)) + geom_boxplot() + xlab("Transportation Type") + ylab("Passenger Distance") + ggtitle("Passenger Distance by Transportation Type") ``` 运行上面的代码,可以得到一个绘制了四种运输方式的箱线图。 以上是本次数据分析的R代码和图形,希望能够帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值