文章目录
Liunx基本介绍
Linux 使用的是统一的目录树结构
/
/home/li
/root
/bin
/mnt
/usr
/etc
Linux系统支持多个用户,每个用户一个目录。
用户目录:例如用户li --> 目录:/home/li ,用户只能在 /home/li 这个目录下进行操作
特例:超级用户 root,其用户目录为 /root
技巧:
1 在输入命令和路径时,按 TAB 键可以自动补全
2 输入历史可以翻阅,按 ↑ ↓ 箭头键可以上下翻阅
3 宿主机 与 虚拟机之间可以拷贝粘贴,一般情况下,文本和文件都可以拷贝
文件列表
1.文件列表:
列出目录下的所有项:ls , 即 list,
示例:
查看当前目录:ls
查看 /home/li 目录:ls /home/shaofa
以详细模式查看:
ls -l /home/li
其中,-l 为参数,参数一般以 - 开头
目录切换
显示当前目录:pwd , 即 print working directory
切换目录:cd , 即 change directory
示例:
切换到用户主目录:cd
切换到某个目录:cd /home/li/example
使用相对路径:cd example/
几个特殊的目录:
~ 代表当前用户的主目录
. 代表当前目录
.. 代表上一级目录
示例:
cd ~ 切换到用户主目录
cd ~/example 切换到用户主目录下的example目录
cd ../www 切换到上级目录、再到www子目录
在 ls 命令中,也可以使用 ~ . .. 表示路径
ls ~
ls ./www 查询当前路径下的www文件夹的内容
目录操作
1 创建目录:mkdir ,即 make directory
mkdir abc 主目录下创建abc文件夹
mkdir -p abc/123/test 使用 -p 参数,可以将路径的层次目录全部创建
2 删除空目录:rmdir ,即 remove directory 不常用
rmdir abc
如果目录非空,则删除失败
3 删除文件或者目录:rm ,即 remove
rm -rf abc
删除abc目录,和子项一并删除
其中, r 表示 recursive , f 表示 force
4 复制文件或者目录:cp,即 copy
cp -rf /home/li/example example2
复制example目录,重命名为example2,和example目录相同
5 移动文件或目录 (重命名):mv ,即 move
move hello helloworld
注意:对于文件, rm / cp / mv 这三个命令同样适用
归档压缩
1 归档
档案打包:tar , 即 tape archive
tar -cvf example.tar example
其中,
c , 表示 create 创建档案
v , 表示 verbose 显示详情
f , 表示 file
也可以将多个目录打包成一个tar文件 tar -cvf xxx.tar file1 file2 file3
2 还原档案包
tar -xvf example.tar
tar -xvf example.tar -C outdir
其中,-C 参数指定目标目录,默认解到当前目录下
3 归档并压缩:先前的tar格式并没有压缩,体积较大
档并压缩
tar -zcvf example.tar.gz example
解压缩
tar -zxvf example.tar.gz
tar -zxvf example.tar.gz -C outdir
通常我们所见的,都是 *.tar.gz 这种格式
用户和组
用户操作
1 添加用户
sudo useradd -m username
其中,-m参数表示在 /home 下添加用户目录
2 修改用户密码
sudo passwd username
3 删除用户
sudo userdel username
说明:
1 在登录系统时,默认不允许以 root 用户登录
2 只有特殊的用户,才能执行 sudo
比如,li可以执行sudo,但username不行,Linux下,把能执行sudo命令的用户叫 sudoer
超级用户
超级用户 root,类似于 Windows 下的 Administrator 用户
切换到 root 用户,有全部权限,可以直接 useradd 等命令
1 首次使用时,需要给 root 设置密码
sudo passwd root
2 切换到 root 用户
su root
其中,su 表示 switch user
3 退出
exit
说明:
1 su root 仅仅对当前会话 (终端) 有效不影响当前桌面环境
2 root 权力太大,需要小心使用
组
Linux 下可以创建多个用户,可以用组进行管理用户。
1 创建组
groupadd boys
2 创建用户
useradd -m -g boys xxx
其中,-g表示在添加用户,同时将用户加到boys组
3 修改现有用户到新的组
usermod -g boys xxx
其中,usermod表示修改用户信息
4 如何查看用户和组:cat /etc/group
5 如何查看用户列表:cat /etc/passwd
软链接
软链接:即 Windows 下的 "快捷方式"
创建软链接 :ln,link
ln -s source link
其中,-s 表示 soft 软链接 ( 默认为硬 )
例如:ln -s example example2
软链接的特点:
1 删除软件接,对原文件没有影响
2 删除原文件,则软链接失效
以 ls -l 查看文件详情时,可以看到目标路径
比如,ls -l / 查看根目录可以发现,/bin 实际指向的是 /usr/bin 目录
文件的权限
查看文件权限
1) 考虑以下几个方面:
owner: 文件的属主 owner
r : 文件是否可读 read
w : 文件是否可写 write
x : 文件是否可以执行 excute
2) 用ls命令查看一个文件的权限:ls -l
修改文件的权限
chmod , 即change file mode 修改文件的访问权限
比如,一个文件simple.txt ,想让别人也能修改
chmod o+w simple.txt
其中,
o ,表示 other 别人
+w ,表示增写 write 权限
chmod a+w simple.txt
chmod a+w simple.txt 所有人 all 添加 w 权限
chmod a-w simple.txt 所有人减去 w 权限
chmod u+w simple.txt 仅用户 user 自己的权限 +w
chmod o-w simple.txt 修改别人 other 的权限 -w
补充:
1 只有文件的属主或者root 可以修改文件权限
2 省略写法
chmod +w simple.txt
chmod -w simple.txt
默认是修改自己和本组的权限
修改文件的属主
chown , 即change owner 修改文件的属主
一般来说,每个用户只操作自己的用户目录,所以 chown 命令并不常用
示例:
1 在 /opt 目录下建立一个文件夹 software
2 将 software 目录分配给用户 shaofa
su root
mkdir /opt/software
chown -R shaofa /opt/software
ls -ld /opt/software
注意:只有文件的 owner 和 root 才有权更改属主
可执行脚本
脚本介绍
脚本 Script ,一种解释执行的程序
Linux 下常见的三种脚本程序
- Shell 脚本 *.sh
- Perl 脚本 *.pl
- Python 脚本 *.py
脚本程序,本质是一个文本文件
1 它是一个文本文件
2 它具有可执行权限
脚本程序都是由解释器来执行的
Shell脚本解释器: /bin/sh
Perl脚本解释器: /bin/perl
Python脚本解释器: /bin/python3
执行一个脚本时,以下两种方式等效
./hello.py
/bin/python3 hello.py
Shell脚本
Shell脚本,按Shell的语法写出来的脚本
是 Linux 自带的脚本语言,相当于Windows下的 DOS 批处理脚本
1 编辑一个文本文件,保存为 hello.sh
#!/bin/sh
echo "hello,world"
2 添加可执行权限
chmod +x hello.sh
3 执行程序
./hello.sh 或者
/bin/sh hello.sh
要点与细节:
1 第一行必须声明解释器
#!/bin/sh
2 必须有 x 权限,才能够执行
比如,一个程序只有作者执行,别人不能执行
rwxr--r--
3 执行程序时,必须加上路径
./hello.sh
/home/shaofa/hello.sh
Python脚本
Python脚本,比Shell要强大一些
1 编辑一个文本文件,保存为 hello.py
#!bin/python3
添加语句:print("hello.py")
2 添加可执行权限
chmod +x hello.py
3 执行程序
./hello.py
环境变量
Shell中的变量
SHELL,是一个脚本编程语言
1 定义变量
2 执行命令 echo ls cd cp
3 if 判断逻辑, while循环逻辑
4 自定义的函数 …
示例:
#!/bin/sh
# 定义变量
OUTDIR=/opt
# 使用变量
echo "output to : ${OUTDIR}"
ls ${OUTDIR}
要点与细节:
1 定义一个变量
NAME=value
注意:等号左右两侧不要多加空格
2 使用一个变量
${NAME}
如果已经有了定界符,则可以简写为 $NAME
例如 echo $NAME/build/
环境变量
环境变量,就是存在当前环境中的变量,无论Linux ,还是Windows,都有环境变量
比如,最常用的环境变量 PATH, JAVA_HOME
Linux下设置环境变量:
1 定义环境变量
export OUTDIR=/opt/
2 显示环境变量
echo ${OUTDIR}
3 查看所有环境变量
printenv
重点注意 path 变量
环境变量的使用:
1 可以在当前终端中使用
2 可以在 SHELL 脚本中调用,不需要定义
示例:在Shell脚本中调用一个环境变量。。
在命令行中定义的环境变量,只对当前SHELL终端有效
当关闭终端后,重启后就消失了
思考:有没有办法让一个环境变量不消失?
用户环境变量
用户环境变量:定义在 ~/.profile 中
在主目录下
ls -la
其中,a 表示 all ,显示所有文件
注:在Linux下,以 . 开头的文件为 隐藏文件
在.profile
文件中定义环境变量:
1 用文本编辑器打开 ~/. profile
gedit ~/.profile 也可以先 cd,gedit .profile
2 在文件最后添加
export JAVA_HOME=/opt/jdk1.8
保存并关闭
3 注销,重新登录后生效,查看环境变量
echo $JAVA_HOME
原理:当用户打开终端时,会自动运行 .profile ,将变量注入到当前环境中。
要点与细节:
1 以点号 . 开头的文件为隐藏文件
ls -a 查看所有文件
2 此配置只对当前用户有效,因为每个用户都有自己的配置文件 .profile
3 有的Linux系统上,使用 .bash_profile
系统环境变量
系统环境变量:定义在 /etc/profile 中,此中的环境变量对 所有用户 有效
以 root 身份执行 gedit /etc/profile
,会发现里面会遍历一个名为profile.d
的文件
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
因此,我们一般不直接修改 /etc/profile
,而是在 /etc/profile.d/
下创建一个自定义的脚本
示例:
演示:
1 用 gedit 创建一个脚本
gedit /etc/profile.d/myprofile.sh
2 定义环境变量
export TOMCAT=/opt/tomcat
3 注销并重新登录,重新登录后 环境变量 生效
查看命令:echo $TOMCAT
PATH环境变量
先来看一个问题:创建一个可执行脚本 hello.sh
直接执行:
明明就在当前目录下,为什么提示找不到?
PATH,最常见的一个环境变量,用于描述可执行程序的搜索路径
查看当前PATH环境变量:
echo $PATH
注意:多个路径之间以冒号分隔。
查看结果如下:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
默认地,系统从以下目录中搜索可执行程序
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
其中:
sbin 为超级用户 root 才能执行的程序
/usr/ 下系统自带的程序
/usr/local/ 是用户安装的程序
直接使用hello.sh
是执行脚本,系统会在PATH中的目录中搜索这个脚本,但我们可以看到当前PATH路径中没有/home/username/
路径,因此会执行失败
演示:修改PATH环境变量
1 编辑 /etc/profile.d/myprofile.sh 修改到系统变量中
打开文件 sudo gedit /etc/profile.d/myprofile.sh
设定 PATH 环境变量:
1) #!/bin/sh
2) export PATH=$PATH:/home/username
先取出原来的PATH的值,再后面附加一段
注意:也就可以直接使用 export PATH=$PATH:/home/username
2 注销,重新登录后生效
3 此时就可以使用 hello.sh 直接执行脚本了
注意:使用用户环境变量或者系统环境变量修改PATH均可。
手动配置网络
在终端里,以命令行方式来配置网络,常用命令: ifconfig , netstat 等
默认地,Ubuntu 下面不带 ifconfig 命令
需要使用 apt 软件包管理器
apt install net-tools 安装一个软件包
apt remove net-tools 移除一个软件包
apt search xxx 搜索
apt list | grep xxx 列表
1 查看网络配置
ifconfig
其中,if 表示 interface 网络接口,会列出所有的网络接口,及各个接口的状态
2 开启/禁用网络
sudo ifconfig xxx up
sudo ifconfig xxx down
文本编辑 vi/vim
vi/vim的使用
vi / vim , 一个基于控制台的文本编辑器
gedit , 一个基于GUI的文本编辑器,再命令行终端里面无法运行
其中,vim 是 vi 的升级版, 演示使用 vim 命令
1 打开文本编辑
vim abc.txt
如果目标文件存在,则打开编辑;如果不存在,会新建一个文件
如果系统上没有 vim ,就安装一下:
sudo apt install vim
2 切换模式
编辑模式 Insert Mode: 按 i 键
命令模式 Command Mode: 按 ESC 键
3 退出编辑
按 ESC 键,进入命令模式
输入 :wq 保存并退出
输入 :q 退出
输入 :q! 强制退出 ( 放弃保存 )
vim 的完全用法非常复杂,花样繁多,几乎键盘上的每一个键都是快速键
不建议深入研究, vim 本身是一个低效率的工具
Linux文本文件的编辑
1 桌面环境:gedit
2 终端环境:
- 少量修改 : vim
- 大量修改 : 在 Windows上编辑,然后上传到Linux
文本文件的上传
推荐:在 Windows上编辑,然后上传到 Linux
使用 notepad ++ 或者其他的专业编辑器
==================================================================
==================================================================
文本文件的换行符
Windows : \r\n
Linux : \n
可以在 Notepad ++ 里观察到此区别:视图 | 显示符号 | 显示行尾符
换行符的转换:编辑 | 文档格式转换 | 转换为 UNIX格式,这样做之后就符合linux的换行符格式
==================================================================
==================================================================
注意:只有在编辑 SHELL 脚本时,才需要转换
其他格式的文件一般都不需要转换,如*.xml, *.java
常见问题
Permission denied
授权文件rwx,可读可写可执行权限:chmod 777 文件名称
如果目标是文件夹:chmod -R 777 指定目录
杀死进程
kill -9 PID # PID为进程号
xshell链接虚拟机
需要先启动sshd服务
参考:https://www.cnblogs.com/jiarenanhao/p/9938280.html