开发环境:
VirtualBox 虚拟机工具 开源免费
Ubuntu 12.04 LTS 长期支持版本 稳定
vim 代码编辑器
gcc 编译器
Linux系统简介:
BCPL->newB->C->UNIX->Minix->Linux
Linux管理硬盘的能力非常强,所以我们看到的只有一个分区
/ 根目录,所有的文件都储存在它下面
/bin 储存系统命令
/dev 设备文件 (一切皆文件)
/media 多媒体目录、U盘、光驱、共享文件夹
/var 储存系统日志
/boot 储存与启动相关的文件
/etc 储存各种软件的配置文件
/lib 储存普通的库文件 .a静态库 .os 共享库
/mnt 与其他系统进行映射的目录
/root 储存着超级用户才能使用的系统文件
/home 用户主目录,会自动生成同名的用户主目录
/opt 安装的应用的软件
/run 是一个临时的文件系统
/usr 储存头文件
. 当前目录
.. 上一级目录
~ 用户主目录 cd
注意:Linux目录结构是树形,目录的切换只能上下,不能左右
绝对路径和相对路径:
绝对路径:从根目录开始描述一个位置
相对路径:从当前位置(工作目录)开始描述一个位置
Linux系统命令:
常用命令:
ls 显示当前目录下有哪些文件
-a 显示隐藏文件,以 . 开头的都是隐藏文件 ,Ctrl+h
-l 显示文件的详细信息
cd 进入一个目录
clear 清理屏幕 Ctrl+l
pwd 显示当前所在位置
whoami 显示当前用户名
文件相关的命令:
注意:不是所有的功能都有对应的命令
touch filename 创建文件(不存在则创建)
rm filename 删除文件,不经过回收站直接删除,要慎重
cat/more/head/tail 查看文件
cat 会把文件的所有内容都显示在终端上,适合查看内容较少的文件
more 显示文件的开头,回车下一行,空格下一页,q退出查看
head 只显示文件开头10行
tail 只显示文件末尾10行
cp src dest 复制文件
mv src dest 移动文件,也具备重命名的功能
目录相关的命令:
mkdir 创建目录
-p 可以创建多级目录
rmdir 删除目录,只能删除空目录
rm -rf 删除非空目录
cp -rf 复制目录
mv 移动目录、重名目录
网络相关的命令:
ifconfig 查看网络配置
windows下查看是ipconfig
sudo ifconfig ethn 192.168.0.xxx netmask 255.255.255.xxx
sudo ifconfig eth0 down 禁用网卡
sudo ifconfig eth0 up 启动网卡
ping ip地址/网址 测试网络是否连通
ping 127.0.0.1 也叫做本机地址,可以用来测试网卡是否正常工作(禁用网卡,也能连通,就算正常)
Linux默认一直ping,Ctrl+c结束
Windows默认ping4次,/t 连续测试,Ctrl+c结束
ftp ip地址,然后输入用户名和密码
ls 显示当前所处服务器有哪些文件
pwd 显示服务器上的工作路径
cd 切换所在服务器的工作路径
get 下载文件
put 上传文件
bye 退出
采用明码方式传输数据,不够安全,有被窃听的风险,一般公司内部使用
telent ip地址,输入用户名和密码
远程登录一台服务器进行使用
采用明码方式传输数据,不够安全,有被窃听的风险,一般公司内部使用
ssh 用户名@ip地址,然后输入密码
采用加密方式传输,因此比较安全
exit退出服务器
其他相关命令:
tar 压缩/解压文件
-zcvf 包名 要压缩的目录,创建压缩包
-zxvf 包名 解压
chmod 修改文件权限
chmod mmm 文件名 chmod 774 filename
m = r(4) + w(2) + x(1) 0~7
chmod +/-rwx 文件名 所有用户一起改
目录必须要有执行权限才能访问
find 位置 条件 查询文件
find / -name stdio.h
grep "关键字" 文件名 过滤
grep "printf" stdio.h
重启系统:sudo reboot
关机: sudo init 0
更新软件源:sudo apt-get update
更新系统: sudo apt-get upgrade
man key 查询帮助手册
分章节管理内容
1、系统命令
2、系统函数
3、标准库函数
q键退出
Ubuntu系统使用的小技巧:
Ctrl+l 清屏
tab 自动补全命令或者文件名
up/down 调出命令执行记录
Ctrl+alt+t 快速打开终端
Ctrl+shift+t 新建终端标签页
Ctrl+alt+方向键 切换工作区
Alt+Tab 切换程序
重定向、管道和通配符:
重定向:把命令的执行结果写入到文件中
cmd > filename 如果文件存在则清空后写入,文件不存在则创建后写入
cmd >>filename 如果文件存在则追加写入,文件不存在则创建写入
管道:相当于一根管子连通两个命令,一个命令的执行结果当做另一个命令的数据源
find / | grep "key" 查询所有文件命中含有key的文件
通配符:可以进行模糊执行命令
?:代表任意的一个字符
* :代表任意的多个字符 【rm -rf /*】
终端的配置文件:
打开终端配置文件 gedit ~/.bashrc ,在末尾另起一行添加
# 精简命令提示符
PS1='\u@\w\$ '
# 新建目录并进入
mk()
{
mkdir $1 && cd $1
}
保存退出,命令输入
source ~/.bashrc 重新加载配置文件,使修改生效
简单的脚本:
脚本:由系统命令组成的带执行权限的文本文件,执行脚本文件时会被命令解释器读取并执行
新建脚本文件 .sh结尾
chmod +x filename
./filename
打字练习软件:typespeed
sudo apt-get install typespeed
注意:窗口必须至少80*24
vim文本编辑器:
可在终端下采用纯键盘操作的一款文本编辑器,号称编辑器之神,可以升级(二次发开),可以扩展(安装插件)。
基本用法:
进入vim:vim filename 文件存在则打开,不存在则创建
输入i:进入编辑模式,编辑代码
保存退出:按Esc键退出编辑模式,输入ZZ保存退出
vim三大模式:
正常模式:一般用来阅读文件,或者使用快捷键快速地修改文件
插入模式:一般用于编辑文件,输入内容
行底模式:一般用于对vim进行配置,或者执行一些高级操作
模式切换:
正常 输入i -> 插入
插入 Esc -> 正常
正常 输入: -> 行底
行底 Esc -> 正常
正常模式下的常用操作:
光标移动:
h左、j下、k上、l右
gg 光标跳转到第一行
G 光标跳转到最后一行
n加回车 光标向下跳转n行
n- 光标向上跳转n行
nG 光标跳转到第n行
vim filename +n 直接进入该文件的第n行
home 光标跳转到行首
end 光标跳转到行尾
PgUp 向上翻一页
PgDn 向下翻一页
删除代码:
x 删除一个字符
nx 删除n个字符
dw/de 删除一个连续的字符串,区别是删不删空格
d$ 从当前光标处删除到行尾
d^ 从当前光标处删除到行首
dd 删除一行
ndd 删除n行
dG 从当前光标处删除到末尾
dgg/d1G 从当前光标处删除到开头
复制代码:
yy 复制一行
nyy 复制n行
p 粘贴在光标的下面
P 粘贴在光标的上面
移动代码:
删除的内容还储存在缓冲区,可以使用p\P粘贴,实现移动代码的效果
替换代码:
r 替换一个字符
cw 替换一个单词
R 进入替换模式
xp 实现调换两个字符的顺序
撤销操作:
u 撤销上一次操作
U 撤销一行的所有操作
Ctrl+r 取消撤销操作
插入模式:
i 在当前光标前进入插入模式
I 光标跳转到行首,进入插入模式
a 在当前光标后进入插入模式
A 光标跳转到行尾,进入插入模式
o 在当前行的下面插入一个空白行,进入插入模式
O 在当前行的上面插入一个空白行,进入插入模式
插入模式下的操作:
Ctrl+p 自动补全,去变量名、函数名时尽量开头不同
Ctrl+i 自动缩进,相当于Tab键功能
Ctrl+j/m 相当于回车功能
Ctrl+c 相当于Esc功能
自定义模式:
Ctrl+z 保存退出 任何模式都进行
Ctrl+x 保存并编译代码,然后输出结果
行底模式下操作:
w 写入
q 退出
wq 保存退出
q! 强制退出
x 保存退出
X 加密,set key= ,删除密码,注意:wq保存退出才生效
!cmd 执行系统命令
/key 查询命令,n往下查询,N往上查询
%s/old/new 全部替换
set nu 显示行号
set nonu 隐藏行号
>n n行代码向右缩进
<n n行代码向左缩进
注意:在行底模式下对vim的设置只是临时有效,如果想要长期有效,
需要把这些设置语句写入到配置文件中(~/.vimrc)
对vim的配置:vim ~/.vimrc
对vim的学习:
1、适可而止
2、需要适应一段时间,大概两周时间
3、Ubuntu 系统自带的vim教程 vimtutor
附页
set number
" 设置Tab键的宽度
set tabstop=4
" 设置自动缩进
set autoindent
" 设置智能缩进
set smartindent
" 设置不备份
set nobackup
" 设置不产生临时文件
set noswapfile
" 在插入模式下快速地返回正常模式
imap jj <ESC>
" 定义保存退出函数
func! SaveExit()
exec "wq"
endfunc
" 映射Ctrl+z键调用保存退出函数
map <C-z> :call SaveExit()<CR>
imap <C-z> <ESC> :call SaveExit()<CR>
vmap <C-z> <ESC> :call SaveExit()<CR>
" 定义保存编译并执行代码函数
func! ComplieCode()
exec "w"
if &filetype == "c"
exec "!gcc % && ./a.out"
endif
endfunc
" 映射Ctrl+x键调用编译并执行函数
map <C-x> :call ComplieCode()<CR>
imap <C-x> <ESC> :call ComplieCode()<CR>
vmap <C-x> <ESC> :call ComplieCode()<CR>
" 定义添加头文件和Main函数
func! InsertMain()
if &filetype == "c"
call setline(1,"#include <stdio.h>")
call setline(2,"")
call setline(3,"int main(int argc,const char* argv[])")
call setline(4,"{")
call setline(5,"\t")
call setline(6,"}")
exec "5"
endif
endfunc
map <C-p> :call InsertMain()<CR>