下载链接:https://www.vmware.com/cn/products/workstation-pro.html
点击试用下的下载按钮下载安装即可,安装快完成界面,网上搜下版本的许可证安装即可;
镜像下载链接:https://ubuntu.com/download/desktop
阿里镜像链接:https://mirrors.aliyun.com/centos/?spm=a2c6h.13651104.0.0.77ea12b2VC6sCP
直接点击下载iso镜像,或者下载种子用迅雷下载;
打开vmware,新建虚拟机,加载镜像,一路下一步设置即可(内存cpu足够,可以适当大点);
发现20版本ubuntu,xshell登录不上,换上centos立马就好了,如果使用xshell和xftps建议安装centos
可以直接拷贝目录虚拟机加载拷贝目录,也可以通过虚拟机克隆;
/mnt/hgfs/
目录下vm虚拟机 -> 设置 -> 选项 -> 共享文件夹 -> 设置共享文件夹,勾选总是启用
注意事项:实际开发中,文件的上传下载是需要使用远程方式完成的;
- Xshell和XFTP适用于windows系统,mac不适用;
远程登录客户端主要有Xshell6,Xftp6(远程下载上传),其他工具类似;
实际应用场景:linux服务器开发小组共享,正式上线的项目运行在公网;
free-for-home-shcool版本下载链接:
https://www.netsarang.com/en/free-for-home-school//
登录需要提供服务器的ip地址,可以服务器上可以通过ifconfig
命令查看ip地址,比如我这里的ip是:192.168.79.128
打开客户端终端,使用ping
命令,确认客户端与服务器ip通信ping 192.168.79.128
3. 打开Xshell客户端,新建-连接
连接服务器后,命令行输入卡顿解决方案,键盘敲个半天没反应(我的是第一条问题):
参考链接:https://blog.csdn.net/qq_36287953/article/details/118582271
Xshell输入慢的问题有可能是由ssh的服务端在连接时会自动检测DNS环境是 一致所导致的。
vim /etc/ssh/sshd_config
将注释UseDNS=yes 去掉注释符,并将yes替换成为no。最后重启sshd服务systemctl restart sshd
设置:Xshell界面点击 工具 – 选项 – 高级 -会话 – 勾选 使用单进程模式以提高性能*
也可以使用Git Bash登录服务器,命令:ssh 用户名@服务器IP
连接前提:服务器开启了 ssh 服务
ssh [email protected]
安装、设置基本跟XSHELL一样,一路下一步;
[root@localhost ~]# 命令 [选项] [参数]
[root@localhost ~]#
提示符含义:
其他说明:
命令中的[]
代表是可选的;
Linux的选项分为短格式选项(-l)和长格式选项(–all);短格式选项的一般是英文的缩写,用一个减号调用;
ls -l
:短格式选项
ls --all
:长格式选项
命令的选项用于调整命令功能,而命令的参数是这个命令的操作对象
Linux的命令按照来源方式分为两种:Shell内置命令和外部命令。
cd
命令;shutdown -h now
立刻进行关机,这个h是halt停止的意思
shutdown -h 1
1分钟后关机
shutdown -r now
现在重启计算机,reboot
halt
关机,作用和上面一样
reboot
重启
sync
把内存的数据同步到磁盘
不管是重启还是关闭更新,首先都会运行sync
命令,把内存中的数据写到磁盘中;
显示字符串信息,也可以添加-e参数识别\后面的转义符号含义。其中\033或\e后面可以跟终端编码,终端编码可以用于定义终端的字体颜色、背景颜色、定位光标等。
\033或\e后面跟不同的代码可以设置不同的终端属性,1m是让终端粗体显示字符串,后面的OK就是需要显示的字符串内容,最后\033[0m是在加粗输出OK后,关闭终端的属性设置。如果最后没有使用0m关闭属性设置,则之后终端中所有的字符串都使用粗体显示。
# 打印\t换行符
echo -e "hello\tworld"
echo -e "\033[1m加粗显示\033[0m"
echo -e "\e[4m下划线\e[0m"
echo -e "\e[5m闪烁显示\e[0m"
echo -e "\e[30m黑色显示\e[0m"
echo -e "\e[31m红色显示\e[0m"
echo -e "\e[32m绿色显示\e[0m"
echo -e "\e[33m棕色显示\e[0m"
echo -e "\e[34m蓝色显示\e[0m"
echo -e "\e[35m紫色显示\e[0m"
echo -e "\e[36m蓝绿显示\e[0m"
echo -e "\e[37m亮灰显示\e[0m"
echo -e "\e[42m绿色背景显示\e[0m"
echo -e "\e[44m蓝色背景显示\e[0m"
echo -e "\e[33;44m绿色字体蓝色背景显示\e[0m"
还可以使用H定义位置属性,比如第3行第3列显示
echo -e "\e[3:2H第3行第2列"
echo -e "\e[3H第3行开头位置"
该命令可以格式化输出数据,打印默认不换行。printf "\d" 12345
如需换行:
printf "|%-10d|\n" 100
10d表示10个长度,不足用空格填补,100左对其
右对齐:printf "|%10d|\n" 100
# 打印小数
printf "%f\n" 1.23456
# 保留两位小数
printf "%.2f\n" 1.23456
# 右对齐,8位长度,保留两位小数
printf "%8.2f\n" 1.23456
# 左对齐,8位长度,保留两位小数
printf "%-8.2f\n" 1.23456
read [选项] [变量名]
如果不指定变量名,默认是REPLY
常用选项
read -p请输入数字 num
echo $num
输入多个参数,输入多个参数,参数间空格分隔
read key1 key2 key3
123 456 789
echo $key3
使用-s选项,屏幕数据内容不可见
read -p 请输入密码: -s passwd
Linux系统的管道,可以将命令1的输出结果(数据),存储到管道中,然后让命令2从管道中读取数据,并对数据做进一步的处理。
管道符:|
wc命令可以统计行数,who命令查看当前扥估用户信息
who | wc -l
有些命令比较特殊,比如前面我们用到的passwd命令,它是用来修改系统的账户密码的,但是该命令默认只能从键盘读取密码,如果希望命令从管道中读取数据后作为密码则需要使用–stdin选项。
修改rongyin的密码
echo 123456 passwd -stdin yongyin
Linux系统中输出可以分为标准输出和标准错误输出。标准输出的文件描述符为1,标准错误输出的文件描述符为2。而标准输入的文件描述符则为0。
如果希望改变输出信息的方向,可以使用>或>>符号将输出信息重定向到文件中。使用1>或1>>可以将标准输出信息重定向到文件(1可以忽略不写,默认值就是1),也可以使用2>或2>>将错误的输出信息重定向到文件。这里使用>符号将输出信息重定向到文件,如果文件不存在,则系统会自动创建该文件,如果文件已经存在,则系统会将该文件的所有内容覆盖(原有数据会丢失!)。而使用>>符号将输出信息重定向到文件,如果文件不存在,则系统会自动创建该文件,如果文件已经存在,则系统会将输出的信息追加到该文件原有信息的末尾。
下方echo命令本身会在屏幕打印信息,重定向后屏幕不打印,将内容保存到file文件中;
echo "内容保存到fie文件中" > file
cat file
如果一条命令既有标准输出(正确输出),又有错误输出,可以>>追加写入到一个文件,写可以分别写入到不同文件;也可以使用使用&>符号可以同时将标准输出和错误输出都重定向到一个文件(覆盖),也可以使用&>>符号实现追加重定向。
ls filename 2>> error.txt
ls filename >> ok.txt
ls filename &>> file.txt
还可以使用2>&1将错误输出重定向到标准正确输出,也可以使用1>&2将标准正确输出重定向到错误输出。
Linux系统中有一个特殊的设备/dev/null,这是一个黑洞。无论往该文件中写入多少数据,都会被系统吞噬、丢弃。如果有些输出信息是我们不再需要的,则可以使用重定向将输出信息导入该设备文件中。
使用<<符号,<<符号(也被称为Here Document)代表你需要的内容在这里。
从file_txt读取数据,写到new_file.txt里面;
cat << file.txt >> new_file.txt
绝对路径比如: /usr/bin/echo
相对路径,即当前工作路径,可以使用命令pwd
查看
# 当前路径
pwd
# 切换到当前路径下的python目录下,点.表示当前路径
cd ./python
在每个目录下,都会固定存在两个特殊目录,分别是一个点(.)和两个点(…)的目录。一个点(.)代表的是当前目录,两个点(…)代表的是当前目录的上层目录。在Linux下,所有以点开始的文件都是“隐藏文件”,对于这类文件,只使用命令ls-l是看不到的,必须要使用ls-la才可以看到
切换到家目录:cd ~
后面加一撇~
Linux里,一切皆文件,包括目录,根目录\;
所有目录和文件都在“根目录”下
目录 | 目录用途 |
---|---|
/bin | 常见的用户指令 |
/boot | 内核和启动文件 |
/dev | 设备文件,类似于windows的设备管理器,所有的硬件用文件的形式存储 |
/etc | 系统和服务的配置文件,比如环境变量 |
/home | 系统默认的普通用户的家目录,如果有创建新用户会在该目录下生成用户文件夹 |
/lib | 系统函数库目录,动态链接共享库,类似于windows下的dll文件 |
lost+found | ext3文件系统需要的目录,用于磁盘检查 |
/mnt | 系统加载文件系统时常用的挂载点,可以将外部的存储挂载到/mnt上,d:/share |
/opt | 第三方软件安装目录 |
/proc | 虚拟文件系统 |
/root | root用户的家目录 |
/sbin | 存放系统管理命令 |
/tmp | 临时文件存放的目录 |
/usr | 存放与用户直接相关的文件和目录,比如用户安装的程序 |
/media | 系统用来挂在光驱等临时文件系统的挂载点,比如u盘,光驱 |
/proc | 系统内存的映射,访问这个目录来获取系统信息【别动】 |
/var | 目录文件不断扩充,习惯将被修改的目录放在这个目录下,包括各种日志文件 |
ls [选项] [文件名或目录]
选项介绍:
ls -lh
文件的大小显示为k千字节Linux中以“.”开头的文件是隐藏文件,只有通过-a才能查看;
cd
[目录名]
两个选项:-P和-L的作用非常有限,很少使用。
cd /tmp
:切换到临时目录
cd ..
:两个点,切换到上级目录
cd ~
:切换到家目录
cd ./bin
:点代表当前目录:当前目录下的bin目录
cd -
:减号,切换到上次所在目录
mkdir [选项] 目录名
创建一个空目录;
建立递归目录可以使用-p
选项,比如:mkdir /tmp/python
rmdir [选项] 目录名
-p
参数递归删除目录
rmdir命令只能删除空目录,目录下有内容会报错;一般使用rm命令取代;
tree 目录
tree /usr
touch [选项] 文件或目录名
一些选项:
文件的时间属性可以通过stat 文件
命令(display file or file systemstatus)查看
touch new_file
cat [选项] 文件名
选项:
more 文件名
常用的交互命令如下。
和more类似,less 文件名
less命令可以使用上、下箭头,用于分行查看文件内容。
head [选项] 文件名
选项:
默认显示10行
显示指定行数(5)也可以直接写-行数
,比如head -5 file.txt
同head类似,显示末尾行数;tail [选项] 文件名
选项:
ln [选项] 源文件 目标文件
选项:
软链接的特点同windows中的快捷方式一致;不同的inode号;硬链接是相同的inode号;
rm [选项] 文件或目录
一般强制和递归选项使用:rm -rf /test/
,删除文件也不会报错;
字母代表权限:r:读;w:写;x:执行
Linux下的每个文件都定义了文件拥有者(user)、拥有组(group)、其他人(others)的权限,字母u、g、o来分别代表拥有者、拥有组、其他人。
增加权限使用+号,删除权限使用-号,详细权限使用=号
比如:chmod u+x test.txt
表示给文件test.txt
文件拥有者赋予执行权限。
同时设置所有人的权限可以使用数字表示法,r=4,w=2,x=1,如果权限是rwx,则数字表示为7,如果权限是r-x,则数字表示为5。假设想设置一个文件的权限是:拥有者的权限是读、写、执行(rwx),拥有组的权限是读、执行(r-x),其他人的权限是只读(r–),使用命令chmod 754 somefile来设置
如果需要修改的权限是目录及该目录下所有子目录及文件,使用使用-R
参数,比如:chmod-R 754 filedir
chown username test.txt
将test.txt文件拥有者改为username
chown :usergroup test.txt
将test.txt文件拥有组改为usergroup(组名前面有个冒号)
如果是修改目录拥有者,同样是添加-R
参数
chgrp usergroup test.txt
如果是修改目录拥有组,同样是添加-R
参数
用竖杠|表示,表示将返回传给下一个命令
比如查找当前目录下的包含python的文件:ls | grep python
grep [-ivnc] '需要匹配的字符' 文件名
查找包含改指定字符的行内容
选项说明:
-i:不区分大小写
-c:统计包含匹配的行数
-n:输出行号
-v:反向匹配
grep-ic 'content' test.txt
cat test.txt | grep-ic 'content'
也可以使用管道符
sort [-ntkr] 文件名
默认按每行的第一个字符排序
选项说明:
-n:采取数字排序
-t:执行分隔符
-k:指定第几列
-r:反向排序
cat sort.txt | sort-t ":"-k 2-n
按制表符分隔,取第二列按数字排序(按字符排序,11会小于3)
uniq一般都需要和sort命令一起使用,也就是先将文件使用sort进行排序(这样重复的内容就能显示在连续的几行中),然后再使用uniq删除掉重复的内容(uniq的作用就在于删除连续的完全一致的行)。
删除重复行,计算相同行出现次数
uniq [-ic]
选项说名字:
-i:忽略大小写
-c:计算重复行数
cat uniq.txt | sort | uniq -c
先排序,再去重,uniq只能对连续行去重
cut就是截取的意思,它能处理的对象是“一行”文本,可从中选取出用户所需要的部分。在有特定的分隔符时,可以指定分隔符,然后打印出以分隔符隔开的具体某一列或某几列。
cut-f 指定的列-d'分隔符'
按冒号分隔,打印1,6,7散列:
cat /etc/passwd | cut-f1,6-7-d':'
没有分隔符,打印指定字符
cut-c指定列的字符
比如打印出每行第1~5个字符,以及第7~10个字符的内容:cat /etc/passwd | cut-c1-5,7-0
tr命令主要用于文本转换或删除
cat /etc/passwd | tr '[a-z]' '[A-Z]'
将小写字母替换为大写字母
删除冒号:cat /etc/passwd | tr-d ':'
paste的作用在于将文件按照行进行合并,中间使用tab隔开。
paste a.txt b.txt
split文件的分割,支持按照行数分割和按照大小分割这两种模式。二进制文件因为没有“行”的概念,只能按照文件大小进行分割。
按行号分割:split-l 1000 big_file.txt small_file_
-l参数指定每1000行为一个小文件,最后一个参数是分割后小文件命名前缀
二进制文件,按大小分割:·split-b 128m big_bin small_bin_·
-b参数指定每128m为一个小文件
Linux系统中的用户分为3类,普通用户、根用户、系统用户。每个用户归属于一个用户组GID;
Linux系统采用一个32位的整数记录和区分不同的用户User ID;
su - username
使用su指令切换用户,然后输入username的密码
sudo su - username
使用sudo指令,输入当前用户密码,切换至username用户
从root切换到其他用户,不需要输入密码;
loginout
注销,在图形运行级别无效,运行级别3下有效;
linux记录密码信息的文件:/etc/passwd
etc/passwd内容格式说明
每行都是使用6个分隔号“:”隔开的7列字符串
密码相关的信息保存到/etc/shadow中,默认只有root用户才有读的权限;
su
命令默认表示切换到root用户,之后输入root密码切换身份为root,完成操作后,使用exit命令可以退出root切换到原先的用户;
su命令后面还可以加上一个“-”参数su-
,加上这个参数,切换成root用户时,身份变成root,还能应用root的用户环境。可以通过pwd
命令查看当前用户环境(返回用户家目录);
“用户环境”就是/etc/passwd中定义的用户家目录、使用的Shell,以及关于这个用户的个性化设置等;
useradd-u 556 user01
useradd-d /home/myuser/user01
useradd-g user0 user01
其他参数,可以使用man命令查看:
man useradd
创建用户后,用户实际上还没有登录系统的权限,在不设置密码的情况下,在/etc/shadow中该用户记录中以冒号分隔的第二列将显示为两个感叹号“!!”,可以使用passwd
命令修改密码,输入命令回车,输入两边密码即可;
passwd user01
普通用户也可以使用passwd修改密码,需要提供当前密码;后面不需要跟参数,直接:passwd
usermod命令执行实际是对/etc/passwd和/etc/shadow配置文件做了修改;
usermod-d /home/user01_new-m user01
/home/user01_new
,并使用该目录作为alice的新家目录。如果没有这个参数,系统会报一个错误;usermod-L user01
更多的参数,可以使用
man usermod
查看
userdel user01
使用这个命令会将删除user01在/etc/passwd和/etc/shadow中的记录。出于数据安全方面考虑,默认情况下,删除用户时不会删除原来用户的家目录和邮件信息。可以使用-r参数同时删除用户家目录和该用户的邮件;
/etc/group
的最后一行:用户组的id
groupadd group1
/etc/group文件,每一行代表一个用户组;格式是使用3个分隔号“:”隔开的4列。第一列是用户组名,第二列代表密码(但是并不使用),第三列代表用户组的数字ID,第四列是组成员,这里为空说明还没有任何用户属于这个组。
命令+要删除的用户组,如果已有用户属于这个试图删除的组,该操作会失败。
groupdel group1
查看用户:users
、who
、w
users:可以查看当前系统有哪些用户
who:返回有三列,第一列是登录用户的用户名,第二列是用户登录的终端,第三列是用户登录的时间。如果是通过远程网络登录,则同时会显示远程主机的主机名或IP地址
w:更为详细的信息;第一行会显示当前时间、系统运行时间、已登录的用户数量和系统负载。下面显示的信息分为8列,每一列解释如下。第一列:登录用户的用户名。第二列:用户登录终端。第三列:如果用户从网络登录,则显示远程主机的主机名或IP地址。第四列:用户登录时间。第五列:用户闲置时间。第六列:与终端相关的当前所有运行进程消耗的CPU时间总量。第七列:当前WHAT列所对应的进程所消耗的CPU时间总量。第八列:用户当前运行的进程。
finger命令在不加任何参数的情况下,同样会显示系统的登录用户;如果在finger后跟上某个用户名,则显示该用户更详细的信息;
普通账号有时可能没有sudo权限
sudo
命令相当于普通用户使用root身份执行,运行该命令时,系统首先检查/etc/sudoers,判断该用户是否有执行sudo的权限,在确定有执行权限后,系统要求用户输自己的密码
vim /etc/sudoers
编辑该配置文件,为普通账号添加sudo权限;
添加下方红色框这一条权限添加语句,给账户yinrong
添加sudo权限;
添加的yinrong ALL=(ALL) ALL
这一行代表的意思是,yinrong这个用户(第一列)可以从任何地方登录后(第二列的ALL)执行任何人(第三列的ALL)的任何命令(第四列的ALL)。还可以定义某一个组的sudo权限,比如%yinrong ALL=(ALL)ALL
可以让所有属于yinrong用户组的用户从任何地方登录后执行任何人的任何命令。
周期性执行使用命令为cron
;单词运行命令为at
[yinrong@localhost ~]$ at now + 30 minutes
warning: commands will be executed using /bin/sh
at> /sbin/shutdown-h now
at>
job 1 at Fri Mar 4 23:25:00 2022
[yinrong@localhost ~]$ atq
1 Fri Mar 4 23:25:00 2022 a yinrong
[yinrong@localhost ~]$ atrm 1
[yinrong@localhost ~]$ at 00:00 2022-3-6
warning: commands will be executed using /bin/sh
at> /sbin/shutdown-h now
at>
job 2 at Sun Mar 6 00:00:00 2022
[yinrong@localhost ~]$ atq
2 Sun Mar 6 00:00:00 2022 a yinrong
30分钟后at now + 30 minutes
关机/sbin/shutdown-h now
后面的
是使用了ctrl+d
快捷键:结束符
可以使用atq
命令查看调度任务列表,第一列是任务编号
可以使用atrm 1
,artm+任务编号,删除该编号调度任务
可以指定具体时间调度,比如at 00:00 2022-3-6
默认情况下,所有用户都可以使用at命令来调度自己的任务,如果由于特殊的原因需要禁止某些用户使用这个功能,可以将该用户的用户名添加至/etc/at.deny中
任务例行化,在Linux中,可以利用cron工具做这种设置。首先需要确定crond进程在运行,如果没有运行,需要先启动该进程。
启动进程:service crond start
查看进程启动状态:service crond status
使用crontab -e
编辑计划文件
查看设置的任务:crontab-l
删除所有任务:crontab-r
每次保存crontab后,重启应用这个计划任务sudo service cron restart
cron在线表达式生成:https://cron.qqe2.com/
crontab -u root -e #编辑用户 root 的计划任务文件
crontab -e #编辑当前用户的计划任务文件
crontab -u root -l #显示用户 root 的计划任务文件
crontab -l #显示当前用户的计划任务文件
crontab -r #删除当前用户的计划任务文件
crontab在运行,环境和用户环境不同,可能有的命令找不到,可以在脚本中添加路径,比如PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
cron表达式
另外需要使用一些特殊符号实现灵活的配置:
* 代表所有值
/ 代表每
- 代表范围
, 分割数字
*/2 * * * * ls
每隔2分钟执行一次 ls 命令
30 7 3-6 * * ls
每个月的3,4,5,6号的7:30分各执行一次 ls 命令
注意事项
有的cron表达式可能是7位,分别为:秒,分钟,小时,日,月,星期,年
/+回车
比如这里切换到用户目录下面
cd /Users/\
yr007
修改用户配置文件.bash_profile
,保存后resource
命令刷新
vim ~/.bash_profile
resource ~/.bash_profile
参考:《Linux系统命令级Shell脚本实践指南》