为了方便主机与虚拟机之间进行交互,可以在两者之间创建一个共享文件夹实现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保持同步
Tab键可以自动补全,例如,cat exam+Tab,将会补全得到cat examples.desktop;
为何Tab就能自动补全?这就涉及到环境变量了
echo $PATH 查看环境变量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等用户组用户组便于对用户集中管理,组的更新是对/etc/group更新
/etc/passwd:管理用户 /etc/group:管理用户组 /etc/shadow:管理口令
/etc/passwd中的记录行格式为: 用户名:口令:用户标识号:组标识号:注释:主目录:登录Shell;用冒号":"隔开,例如: ubuntu:x:1000的x代表口令加密,要通过权限查看/etc/shadow才能获知口令
先ls -l列出文件就能看到文件的属性和权限信息:
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 filefind借助正则表达式用于在一个目录中(包含子目录)搜索文件,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 '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的行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.gzssh用于远程控制主机,首先查看有无ssh相关进程:
sudo ps -e | grep ssh如果不安装ssh-server,只有客户端ssh-agent,安装openssh-server后,才会运行sshd,此时将可在其他主机(Win或Linux或Mac)用ssh客户端登录到Linux:
User>ssh user_name@ip_address #登录Linux User>exit #退出登录