第二课.进一步熟悉Linux

VirtualBox共享文件夹配置

为了方便主机与虚拟机之间进行交互,可以在两者之间创建一个共享文件夹实现VirtualBox与Windows的文件共享
VirtualBox的共享文件夹最好通过手动挂载才更加稳定,将Windows下的文件挂载到/mnt下,此处在Windows下有一个文件夹叫PublicFileSystem,Linux在/mnt下创建一个目录share:

cd /mnt
sudo mkdir share 需要权限

在“设置”内的共享文件夹选择PublicFileSystem这个文件,注意要勾选“固定分配”,现在回到Linux开始挂载:

sudo mount -t vboxsf PublicFileSystem /mnt/share

这样,Linux下的share目录内容将和Windows下的PublicFileSystem保持同步

常用命令补充

cd ~ 移动至当前用户的主目录,例如:/home/ubuntu
rm -rf code 删除目录

Tab键可以自动补全,例如,cat exam+Tab,将会补全得到cat examples.desktop;

PATH环境变量与常用快捷键

为何Tab就能自动补全?这就涉及到环境变量了

echo $PATH 查看环境变量

fig1
PATH环境变量是一组用冒号":"隔开的路径,主要是常用可执行文件的安装目录;
现在拷贝程序ls到~/bin下,注意这个bin并不是根目录下的bin(用于存放可执行程序):

cd ~/bin
whereis ls 查看ls程序的位置,发现位于/bin/ls
cp /bin/ls lscp  拷贝ls到~/bin,重命名为lscp

由于PATH中不包含/home/ubuntu/bin,Tab不能自动补全lscp(因为不能搜索到);如果临时添加环境变量可在当前会话找到lscp:

export PATH=$PATH:/home/ubuntu/bin

如果需要永久保存,需要编辑~/.bashrc:

gedit ~/.bashrc

在末尾添加变量:export PATH=$PATH:/home/ubuntu/bin,原因在与每次打开Shell,都会执行~/.bashrc,从而自动将/home/ubuntu/bin加入PATH;
Tab用于命令补全,whereis用于查找命令所在目录,两者都基于PATH,如果PATH中没有变量,就不能找到对应的程序

用户与用户组

windows下的用户分类较单一,就分管理员与非管理员,Linux的用户分类更细,比Win更安全,另外一提,Linux是一个多用户多任务的分时系统;


用户分三类:
1.root用户:具有最高权限,可操作系统文件和命令;
2.虚拟用户:系统本身需要,在运行系统中起作用;
3.普通用户:可登录,权限有限


我是普通用户,root用户不以$开头,是#开头,sudo是指借用root权限;
添加用户时,系统会:
1.在/etc/passwd中添加一行用户记录
2.在/home下创建新用户目录

sudo useradd -d /home/baijingyi -m baijingyi 添加用户
sudo passwd baijingyi 为用户设置口令
sudo userdel -r baijingyi 强制删除用户
whoami 查看当前是哪个用户
groups 查看当前用户所在的组,比如ubuntu属于adm,sudo等用户组

fig2

用户组便于对用户集中管理,组的更新是对/etc/group更新


/etc/passwd:管理用户
/etc/group:管理用户组
/etc/shadow:管理口令


/etc/passwd中的记录行格式为:
用户名:口令:用户标识号:组标识号:注释:主目录:登录Shell;用冒号":"隔开,例如:
fig3
ubuntu:x:1000的x代表口令加密,要通过权限查看/etc/shadow才能获知口令

文件属性与权限操作

ls -l列出文件就能看到文件的属性和权限信息:
fig4

sudo chown [-R] root file 文件用户修改为root
sudo chgrp [-R] root file 文件用户组修改为root

中括号"[…]"代表这是可选参数,-R是递归修改的意思,即将目录下的所有文件也都一同修改,修改完用户又要修改用户组写法麻烦,可以用简写:

sudo chown User.Group file 用户与用户组一同修改

Linux权限rwx分别代表读,写,执行:

d rwx rwx rwx 分别代表User,Group,Other对该文件都有rwx权限

第一个字符指文件类型,d是目录;-是普通文件;c是字符设备文件;b是块设备文件;s是套接字文件;p是管道(先进先出);
修改权限举例:

sudo chmod u-x file User减少执行权限

另外,rwx可以用8进制数表示:—记为0,–x记为1,… ,rwx记为7
则权限修改简写为:

sudo chmod 777 file

find命令

find借助正则表达式用于在一个目录中(包含子目录)搜索文件,grep通常会用正则表达式在文本中搜索行(通常,这两个命令使用正则表达式也都是很简单的一类匹配)


首先了解正则表达元字符,可理解为通配符:

^锚定开头:^grep,以grep开头
$锚定结尾:grep$,以grep结尾
.任意字符:gr.p,r和p中间的字符可以是任意字符
*一个或多个任意字符
[]匹配指定范围字符:[Gg]只匹配G和g,[A-Z]匹配A到Z任意字符
[^]匹配不包含的范围:[^A-FH-Z],匹配不包含A到F,H到Z的字符

find举例:

find ~ -name "*.txt" -print  #在用户目录下查找".txt"结尾的文件
find . -name "[A-Z]*" -print  #在当前目录下查找以大写字母开头的文件
find /etc -name "host*" -print  #在/etc下查找以host开头的文件

字符串可以用"…"或者’…'表示;
find的格式为:

find path -option [-print] [-exec ls -l {} \;]

很明显,path决定了查找目录的位置;-option分别有:
1.-name:根据文件名搜索,比如-name "host*"
2.-perm:根据权限搜索-perm 755
3.-type:根据文件类型搜索

-type d 是目录
! -type d 搜索非目录
-type l 搜索链接

4.-size:根据文件大小

-size +100c 查找大小超过100c的文件
-size 100c  查找大小为100c的文件
-size +10  查找大小超过10块(1块=512字节)

关于[-exec ls -l {} \;],这也是一个可选参数,-exec ls -l 代表借助/bin下的ls进行执行,{…}保存结果文件,;用于传递文件,一次传一个文件;
管道:管道的作用确保前面命令的输出结果变成下一个命令的输入,管道写法为:|,有些命令对换行不支持,只能按空格自动分隔,所以借助管道与xargs用于将结果转为空格分隔;
例如:| xargs ls -l,将上一步的结果用ls列出具体信息

grep命令

grep用于从文件里进行文本搜索

grep 'test' d* 搜索以d开头的文件中含test的行
grep 'test' d* -r 代表递归搜索
grep 'test' aa bb cc 在aa,bb,cc文件中搜索含test的行

grep -v '#' /etc/host.conf 输出不含'#'的行
grep '#' /etc/host.conf 输出含'#'的行

ls -l | grep 'a'  解释:ls -l的输出相当于一个临时文件,grep搜索临时文件中含a的行

fig5

压缩解压

tar命令用于打包,压缩,解压

tar [-cxtzjvfpPN]

-c:建立一个压缩文件
-x:解开一个压缩文件
-t:查看tarfile里的文件
-z:是否使用gzip压缩
-v:压缩过程打印
-f:后接文档名

#压缩
tar -zcvf Code.tar.gz code #Code.tar是打包文件,Code.tar.gz是压缩文件

#解压
tar -xvf Code.tar.gz

ssh和sshd

ssh用于远程控制主机,首先查看有无ssh相关进程:

sudo ps -e | grep ssh

fig6
如果不安装ssh-server,只有客户端ssh-agent,安装openssh-server后,才会运行sshd,此时将可在其他主机(Win或Linux或Mac)用ssh客户端登录到Linux:

User>ssh user_name@ip_address #登录Linux
User>exit #退出登录

版权声明:本文为qq_40943760原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。