我的Linux学习之旅
一个多月的时间学习Linux的基础知识,看得是鸟哥的私房菜,看了有两遍吧。现在总结一下平时经常用到的知识。
一、一些简单的小指令
date:
显示时间,更多的是用来产生一些时间格式的文件夹,如:生成日志的文件夹。
bc:
计算器,quit退出,一般用不到。
ctrl+alt+F1~F6可切换不同的文字界面,一般用于:如果一个界面死掉了,可以再切换另一个界面将其杀死,而不用重启计算机,很方便的。ctrl+alt+F7切换到文字界面。
当指令太长时可用'\'符号来延续到下一行。
alias ll=‘ls -a -l’ 命名别名
shutdown -r now 立刻重启
shutdown -h now 立刻关机
shutdown -h +10 “guan ji le ” 十分钟后关机,并在屏幕上显示guan ji le
shutdown -h 20:35 到点关机
shutdown -c 取消已经进行的shutdown指令
基本指令:
tab 补全
路径:cd - 回到上一目录(很好用)
cd .. 回到上一层目录
cd ~回到用户根目录
pwd 显示当前工作目录
pwd -p 针对链接文件,显示完整路径
mkdir aa 建立一个名称为aa的文件夹
mkdir -p aa/bb/cc/dd/test 可以创建递归目录
删除一切东西用: rm -rf bb 强制删除(超好用)
ls 列出当前目录下的东西
ls -a 隐藏的东东也会列出
ll 列出属性
ll -d 只列出目录的属性,不会列出目录中子文件的属性
cp 复制文件
cp -r 复制目录
cp -a 连同属性一起复制
cp -u 只在文件有所改变后才会进行复制。(用于备份文件,只有在不同时,才会进行备份)
scp 为远程复制
scp /home/aa.txt root@10.52.210.10:/home 传出文件
scp root@10.52.210.10:/home/bb.txt /home 传入文件
mv 移动文件
mv -r 移动目录
mv -u 只在文件有所改变后才会进行移动。
二、文件的属性设置
ll ** 查看**的属性
w:写 ;r:读;x:可执行(只有当文件夹是可执行时才能够进入该文件夹)
r=4
w=2
x=1
一个文件的权限针对“三个人”而言:文件拥有者的权限(u)、文件所属的群组中他人的权限(g)、外人的权限(o)。
chgrp aa user 把当前user的群组的名称改为了aa
我在两个组中,有一个文件只想让其中的一个组可以访问,可以利用chgrp来改它所属组性。
chown bb user 把当前user的拥有者的名称改为了bb
chown aa:bb user 把当前user的群组的名称改为了aa,拥有者的名称改为了bb
chmod 777 file 改变了file的权限为可读、可写、可执行
chmod -R 777 mulu 改变mulu文件夹下面所有文件的权限(chgrp、chown也可以有-R)
chmod r=rwx,g=rwx,o=rwx temp
chmod a+w temp
chmod a-x temp
可执行文件(./test.sh)的属性中一定有x属性。
当一个设置了SUID位的可执行文件被执行时,该文件将以所有者的身份运行,与就是说无论谁来执行这个文件,他都有文件所有者的特权,如果所有者的身份是root的话,那么执行人就有超级用户的身份。
SUID=4,SGID=2,Sticky Bit=1(只能针对目录)
chmod 4777 a.txt 权限变为 rwsrwsrwx
chmod 6751 a.txt 权限变为 rwsrwS--x (当设置了x位时,就用小s;没有设置x位时,就用大S)
chmod 1755 a.txt 权限变为 drwxr-xr-t (当设置了x位时,就用小t;没有设置x位时,就用大T)
当user的权限中的x变为小s的时候,表示该user有该文件的root权限
Sticky Bit只针对目录有效,即具有SBit的目录下,若用户在该目录下具有w和x权限,那么当用户在该目录下建立文件或目录时,只有文件的拥有者或root才有权利删除。即,用户只能删除自己建立的东西,而不能删除他人所建的东西。例如/tmp本身的权限是drwxrwxrwt,在这样的权限目录下,任何人都可以在/tmp内新增或修改文件,但仅有该文件的建立者和root能够删除自己所建的目录或文件,他人是不可以的。
改变文件的隐藏属性:
chattr +i aa.txt 这样aa.txt只能读,别的什么都不能做,chmod都不可以改变;rm -rf都不可以删除;wq!都不可以写入
若想改变,应先用chattr -i aa.txt 进行解锁
chattr +a aa.txt 针对登陆文件,只可增加数据,不可修改和删除原有数据
lsattr 可以显示隐藏的属性
umask 用于指定当前用户所建文件和目录的默认属性。root一般建立的文件属性为-rw-r--r--,目录属性为drwxr-xr-x
umask 0000 表示改变其默认属性为777“三个人”都是可读、可写、可执行(但是下次开机后就回复原来默认的)
(若想永远的改变umask的值,应在/root/.bashrc文件中加入 umask 0000 然后保存,再执行. .bashrc 即可)
三、查看文件
cat aa.txt
cat -n 显示行号
more less
head -n 10 aa 只显示aa文件的前十行
tail -n 10 aa 只显示aa文件的后十行
tail -f aa 动态显示aa后十行(经常用)
nl 显示行号
nl -b a filename 连同空行也算在内
wc -l 统计行数
wc -c 统计字节数
wc -w 统计字数
四、查找文件、目录
which 只找“执行文件”,是在PATH的路径下找,且只列出找到的第一个。which -a则列出全部的
whereis 很少用,可以设定所查找的文件类型
locate 可以只输入部分要查找的文件名,会列出所有含有该部分文件名的文件。利用locate aa | grep /aa$ 可以只列出aa文件
find 可以查找文件和目录。使用方法为:find 要在那个路径下查找 -name 名字例如:find / -name test 意味着在根目录下查找名为test的文件或目录
which、whereis、locate只能搜索文件,不能用来寻找目录。
五、硬盘与硬件管理
df -h 查看硬盘的总容量、已用容量、系统分区
du -sh 目录名 只显示该目录总的大小
df -h 查看文件系统大小和使用情况
free -m 显示内存、SWAP的大小和使用情况
fdisk -l
六、shell脚本
shell脚本不需要编译,是以行为单位执行的,shell脚本第一行必须为#!/bin/bash
./test.sh a b c d 其中文件名为$0, 参数a为$1, b为$2
1.shell脚本变量的规则:
1)=链接的左右不能有空格
2)变量只能为字母、数字,并以字母开头
3)应用变量要加$
4)若有空格应用“ ” 或‘ ’。二者的区别:“ "会保留变量的特性;而‘ ’值是输出其中的字符
name=vbird
my="$name its me"
my2='$name its me'
my3="${name}itsme" 和变量相连要用{ }区分出来
echo $my (结果为vbirdits me)
echo $my2 (结果为$name its me)
echo $my3 (结果为nameitsme)
5)export a 则变量a可以在其他子程序中使用
6)unset a 取消变量
2.shell的编程
declare声明变量
-a 数组
-f 函数
-i 整型
read name 从键盘上读取内容
read -p "请输入您的名字:“ 可以加入提示信息
read -t 30 设置等待时间,如果30秒内没有输入,则该命令会被自动略过
echo $name 输出
3.脚本的逻辑判断:
eq =
ne !=
lt <
gt >
le <=
ge >=
a and
o or
z 空字符串
n 非空字符串
4.shell脚本中的数值运算用$(( )),或$[ ]
nu=$((2+4)) echo $nu
a=2
b=3
nu=$(($a*$b))
echo $nu
5.if、while、for
if的使用:
if [ "$y" = "y" ] || [ "$y" = "Y" ]; (注意:[和“ ,”和]之间都要有空格)
then
......
fi
for循环
declare -i s
for (( i=i; i<=100; i=i+1)) (注意:这是有两个())
do
s=s+i
done
另一种for循环
LIST="tomy jony mary geoge"
for i in $LIST
do
echo $i
done
while循环
declare -i i
declare -i s
while [ "$i" != "101“ ]
do
s=s+1
i=i+1
done
6.
shell中的数组
a=(1 2 3 4 5) 用空格隔开
echo ${a[2]} 结果为3
echo ${a[@]} 结果为1 2 3 4 5 a[@]或a[*]表示整个数组
echo ${#a[@]} 结果为5 求数组的长度
a[1]=100 为数组赋值
unset a[1] 删除元素2
unset a 删除全部元素
特殊的使用:${数组名[@]:起始位置:长度}例如:echo ${a[@]:1:3} 结果为2 3 4
${数组名[@]/查找的元素/替换的元素}例如:echo ${a[@]/3/100} 结果为1 2 100 4 5
用for循环来遍历数组:
for value in ${a[@]};do
echo $(($value+2))
done
7.shell中的函数
在shell脚本中函数要放在程序的最前面,function fun(){} 调用时直接为fun,而不是fun()。且fun()中不能带参数,但可以用参数$1,$2来表示。例如,在文件aa中编程:
funtion pt(){
echo "Num is $1"
}
case $1 in 这里的$1以函数pt中的$1是不一样的,这里的$1指的是./aa two中的two
"one")
pt 1 调用函数pt并且赋予参数$1的值为1
; ;
"two")
pt 2
; ;
"three")
pt 3
; ;
*)
echo "error"
; ;
esac
在命令行中输入./aa two 输出的结果为Num is 2
七、vi编辑器中的指令
1)一般模式下:
0 零 光标移动到本行的行首
$ 光标移动到本行的行尾
G 光标移动到该文件的最后一行
nG 光标移动到第n行
gg 光标移动到该文件的第一行
n<enter> 光标向下移动n行
n<空格> 光标向后移动n个
dd 删除光标所在行
yy 复制光标所在行
p 粘贴到光标的下一行
U 恢复上一步
ctrl + r 与U是相反的操作
. 重复前一个操作
2)编辑模式:
i 光标所在字符前插入
a光标所在字符后插入
o 光标的下一行插入
3)命令行模式:
:set nu 显示行号
:wq 保存退出 :q! 强制退出
/ab 在该文件中查找ab (n为查找下一个,N为查找上一个)
八、管线命令:
连续的指令 && 和 ||
command1, command2 全部执行两条指令
command1 && command2 只有当command1执行正确后才执行command2
command1 || command2 只有当command1执行错误后才执行command2
cut -d ":" -f 2 (以:为分割副,只显示出第2区块)
cut -c 1-20 (之显示出1到20个字符)
cut -c 1,4,7 只显示第1,4,7个字符
cut -c 3- 显示出第3个字符以后的所有字符(包含第三个字符)
sort 以行为单位,比较首字符,默认按升序排序。
sort -f 忽略大小写
sort -b 忽略前面的空格符
sort -u 相同的行会合并
sort -r 绛序
sort -n 按数字大小进行排序
sort -n -r -t ":" -k 2 按:进行分块后的第二块按数字进行绛排序
sort -t ' ' -k2 -k3 以空格分隔后,先按照第二块进行排序,如果相同,则再按照第三块排序
grep -c ljg 输出含有ljg行的总数
grep -v ljg 输出不含有ljg的行
grep -i ljg 不区分大小写
grep ab 与 grep [a,b]
grep 'tea' /home/name1 /home/name2 可以在多个文件中列出
pgrep cmd 专门用于进程查询,只输出该指令的PID
uniq 重复的行只显示一个,将相邻的相同行合并
uniq -d 只显示重复的行
tr -d ab 删除文件中的所有字符a,和字符b。而不是只删除ab字符串
tr '[a-z]' '[A-Z]' 将所有的小写字母转换为大写字母
tr 'ljg' 'tsh' 意味着把说有的l换为t,j换为s,g换为h。(注意:不是只把ljg换为tsh)
>a.txt 覆盖到a中
>>a.txt 累加到a的后面
tee a.txt 覆盖到a.txt中,并且在屏幕上显示,后面还可以再接其他的管线命令。
tee -a a.txt 累加到a.txt中,并且在屏幕上显示,后面还可以再接其他的管线命令。
正则表达式(与通配符中的* ?的意义不一样)
‘[^g]'oo 意味只要oo前面不能为g
^ 行首
[^ ] 非
$ 行尾
grep '[^a-z]' 列出非a-z
grep '^[a-z]' 列出行首为a-z
grep '^$' 列出空行
grep -v '^$' | grep -v '^#' 去掉空行和开头为#
. 是任意一个字符
* 是重复0个或多个前面的字符
.* 表示零个或多个
grep 'g..d' 列出g??d
grep 'goo*d' 列出god good goood .......不要丢掉god,因为*前面的那个字符o,只是表示重复的字符。
grep 'g*g' 列出g gg ggg gggg ...... 不要丢掉g
要想列出含有tast或test的方法:
grep 't[ae]st'
grep '[tast,test]'(这个方法不可以)
egrep 'tast | test'
egrep 't(a|e)st'
sed
-n,常与p打印联用。例如:sed ‘2,5p’ 的结果为,所有的都会输出,并且重复2,3,4,5行再次输出
sed -n ‘2,5p’ 的结果是只输出2,3,4,5行
-f 可以把sed操作的内容写在一个文件内
-r 支持扩展正则表达式
3,5 表示3到5行
sed ‘2a hello’ 在第二行下面插入一行内容为hello
sed ‘2i hello’ 在第二行上面插入
sed ‘2,5c hello’ 把2到5行的内容换位hello
sed ‘2,5d’ 删除2到5行。若只想删除第2行,和第5行,应该sed ‘2d’ | sed ‘4d’。因为已经删除了一行,索引5要变为4
sed ‘ s/ / /g’
sed ‘n1,n2s/aaa/bbb/g' 把n1到n2行中的aaa替换为bbb。
总结:sed后面的指令一定在‘ ’中,且sed‘ ’指令中一般先指明行号,再接动作a,i,c,d,p,s
sed比较合适处理整行,awk比较倾向于一行中分成数个“字段”来处理
awk默认以空格或Tab键来分段的。$0代表一整行,$1代表第一字段,$2代表第二字段
awk -F ‘.’ ‘{print $1 “\t" $3}’ 以 ‘.’来分割,输出第一字段和第三字段,中间空4个空格。或者写成FS=“.”
awk的格式:awk ‘条件类型1{动作1} 条件类型2{动作2}’
动作1和动作2都是针对前面的主体而言的,而不是,动作1处理后,把结果再让动作2来处理。不是管道命令的性质。
cat /etc/passwd | awk -F ':' '$3<10 {print $1 "\t" $3}'
awk类似于if
九、解压缩指令:
unzip name (用于*.zip)
uncompress name (用于*.z)
bzip2 -d name (用于*.bz2)
gzip -d name (用于*.gz)
tar中 -x是解压,-c是压缩,-z是后缀中有.gz
tar -zxvf name (用于*.tar.gz)
tar -xvf name (用于*.tar)
tar -cxvf name 压缩文件
十、帐号管理
/etc/passwd 用户帐号 /etc/shadow 密码 /etc/group 群帐号 /etc/gshadow 群密码
groups 显示出该帐号都存在与哪些组当中
groupadd -g 55 testing 建立一个GID为55的群组
groupdel testing 删除群组 (若有用户,则必须先删除用户)
新加一用户:
1)useradd -m ljg 建立一个用户,名称为ljg (-m 为生成根目录,不然则进不到ljg中)
2)passwd ljg 设置密码
userdel ljg 删除(只删除passwd和shadow中的东西)
user -r ljg 将用户的一切数据都删除
身份变换
su 转换为root身份
su - 当前目录会发生变换
su ljg 切换为ljg身份
su -l ljg 当前目录会发生变换
su 进行身份转换时要输入对方的密码,但用sudo不能切换身份,但是可以在对方用话下进行一定的操作
sudo -u ljg shutdown -h now 并且只需要输入自己的密码。
十一、at和crontab
at仅执行一次的使用方法:
1)输入 at 5:30 2014-06-01 回车 (at now +5 minutes, 也可一是hours、days、weeks)
2)进入at>命令模式,输入要执行的命令,shutdown -h now
3)ctrl + D则保存退出。并且退出之后显示该工作的编号如:job 3 at thu may 1 05:30:00 2014
4)atq 查看当前所有的at工作
5)atrm 3 删除上面的at工作。
crontab循环执行的使用方法:
输入crontab -e 进入crontab编译
输入命令的格式为: 分 时 日 月 周 命令 *表示所有数组都适用
如:59 23 1 5 * mail xiaozhu </home/test/test.txt 表示在每年的5月1日23:59都会把邮件test.txt的内容发送给xiaozhu
如:*/5 * * * * sh /home/test/test.sh 表示每隔5分钟执行一次
但当有多个任务都是每隔5秒执行一次,这样会增加系统在某一时刻的负担,可以这样
1,6,11,16.....51,56 * * * * cmd1
2,7,12,17.....52,57 * * * * cmd2 这样可以解决,其中的......不能省略,必须一个一个的列出
crontab -l 查看所有的crontab流程
crontab -r 删除所有的crontab数据。(若要删除某一条,用crontab -e进入编译中去删除)
* 代表所有可能
,隔开 1,5,9
- 制定范围 2-6
*/n 表示时间间隔频率
crontab -e 是处理用户例行性,即改变的是/usr/bin/crontab的内容
若要是设置“系统的例行性任务”直接vim /etc/crintab,按照已有的例子添加即可。
十二、进程管理
ps -auxh | grep xxx 查看进程xxx (会列出用户名、PID、CPU和MEM的使用情况、tty1-6表示为本机登录者 pts/??表示为远程登录者、运行状态、开始运行的日期、运行的时间、指令名称)
ps后的运行状态
R 运行
S 中断
T 停止
D 不可中断
Z 僵死 (且ps后的指令名称中显示<defunct>) ps auxh | grep defunct 可以列出zombie进程
top中的第二行的zombie表示僵尸进程的个数
top动态显示进程的信息,默认每隔5秒刷新一次。
top -d 1 改变刷新时间为1秒一次
top -p 1278 只观察PID为1278
top | grep cmd 只观察指令cmd
who 显示登录时间
w 显示uptime和who的
last 显示近期用户或终端的登录情况
netstat -antlp 查看本机各端口的网络连接
hostname 显示主机名
dmesg 显示开机信息
command & 后台运行
time command 侦测一个进程所需要的时间
用户对话:
write 针对一个在线用户
wall 针对所有在线用户
mail 可以实现离线传输
杀死进程:
kill %工作号
kill PID
pkill -9 cmd (指令的名称可以只输入一部分)
pkill -u 用户名 可以杀死用户 (当userdel -r ljg,显示用户ljg目前已登录。可以用pkill -u来解决)
killall -9 cmd
xkill 用于关闭图像界面(当一软件死后,不能关闭窗口,可以这样做)
pstree 列出所有进程的关联,可以找出父进程
(若杀死不了一zombie进程,可以用pstree查找出其父进程,来杀其父进程)
所有的进程都存在于/proc中,以PID号为目录名。
十三、gcc
方法一:gcc hello.c 自动生成a.out文件,再执行./a.out 即可运行
方法二:gcc -c hello.c 生成hello.o 的目标文件;然后在执行gcc -o aaa hello.o 生成aaa可执行文件;./aaa 即可
动态库文件 *.so 静态函数库 *.a头文件 *.h
当用到第三方库时:
-L 后接库*.so的路径 -I(大写的i) 后接头文件*.h的路径 -l(小写的L)后加上*.so,*中去掉lib的那一部分
例如:当库位libm.so时,应该这样:gcc hello.c -lm -L /usr/lib -I /usr/include
为libpng.so时,应该这样:gcc hello.c -lpng -L /usr/lib -I /usr/include
安装软件执行make时,make会在当前目录下搜索Makefile文件,Makefile文件中记录了源代码是如何编译的详细信息
config是一个检测程序,检测用户的工作环境,以及该环境是否有该软件开发商所需要的其他套件。
一般用./configure --prefix=/usr/local/aaa 来设置软件安装的目录
makefile文件编写的基本格式:
main: main.o aa.o bb.o cc.o
(这里一定要用Tab键) gcc -o yyy main.o aa.o bb.o cc.o
clean:
rm -rf yyy main.o aa.o bb.o cc.o
make clean
make main
十四、一些其他指令
ln -s aa bb 类似与bb为aa的快捷方式(符号链接改变bb,那么aa也会改变。删除aa,那么bb则无效)
touch 建立一个空文件。若文件存在,则是将这个文件的日期修改为当前日期
route -n 显示路由器
sh -n test.sh 查看脚本的语法,若有错误则列出。
ifconfig 查看 ip
ifconfig eth0 192.168.120.23 netmask 255.255.255.255 broadcast 8.8.8.8 配置IP地址
md5sum 产生文件指纹,可以对比两个文件是否相同。也可以查看某一软件是否为正版
md5sum -c filename 可以把许多文本的md5sum的值放到一个filename中,md5sum aaa.txt >test
md5sum -c test 即可。如果test的内容不变则输出正确,否则输出失败。
echo $? 可以判断上一条指令是否正确,为0,则正确。为1,则有错误
ssh root@10.52.210.10 登录远程计算机
ssh -p 1234 user@host链接远程主机的1234端口
diff 和 cmp 比较两个文件的不同之处
file aa.txt 的结果中:LSB executable 为执行文件;uses shared libs 为使用动态函数库;ASCII test 为一般脚本;data 为数据文件。
文件或目录的查找
basename /etc/sys/network 的结果是network获取文件名
dirname /etc/sys/network 的结果是/etc/sys获取路径名
我的Linux学习之旅相关推荐
- 聊聊我的Linux学习之旅吧
聊聊我的Linux学习之旅吧 从2017年8月份正式开始学习Linux到现在正好有1年了.因为是在校学习,而且自己又事情比较多,主要是在大二时当选了网趣工作室的社长,自己又想做出一番成绩,给自己大学留 ...
- Linux学习之旅(20)-----信号(2)
在上一篇文章Liunx学习之旅(19)---信号中提到系统对信号的处理方式主要有三种:(1)默认(2)忽略(3)捕捉.默认就是当系统接收到某个信号时,去执行信号的默认状态,而忽略就是对这个信号不予处理 ...
- 学习linux装,一个初学者的Linux学习之旅之Linux安装篇
昨天下载了个RedHat linux,想去看看非windows的世界是什么样子的,不过安装和windows真的没有可比的,虽然我的DOS基础还行,但就一个启动盘就把我搞得头昏眼花,因为没有软驱和光驱, ...
- Linux 学习之旅
2023.3.1 (day3) 学习内容: 1.ubuntu 修改国内镜像源,Ubuntu激活root用户 (1)ubuntu 修改国内镜像源 # ubuntu里下载软件用apt root@sc:~ ...
- 我的linux学习之旅:(4)搭建mysql数据库
编译安装mysql 目标:在mysqlM上编译安装mariadb,并安装wordpress博客程序.mysqlS暂不配置. 操作系统CentOS6.6 x32_64 使用的mariadb版本 本机ip ...
- Linux学习之旅(一)Linux常用命令
pwd命令 显示当前所在的目录 ls命令 显示目录下的子目录和文件 ls 显示当前目录下的子目录和文件 ls -a 显示当前目录下的所以子目录和文件(包括隐藏文件和文件夹) ls -al 显 ...
- 我的Linux学习记录(蓝桥)————入门环境介绍
我的Linux学习之旅(蓝桥) 嘿,首先让我们看看Linux的页面: 差不多长这个样,其中呢: 这个玩意就是你windows的这个玩意 这个东西,就是你windows下win+R然后输入cmd跳出来的 ...
- 我的linux学习历程[引子:安装和特点](不是教程,分享一下而已)
2023年的1月,新的一年,我也想尝试一下新花样,突然灵光一现,开始了我的linux学习之旅: 我在网上查了很多教程,因为没有钱去购买一台电脑专门安装linux,网上很多教程都是通过虚拟机来实现的,所 ...
- PYTHON学习之旅1:linux操作系统学习
PYTHON学习之旅1:linux操作系统学习. 1.初识linux系统: a.Linux系统细分为内核以及发行版.其中linux的发行版建立在其内核基础上.指一些编程者使用linux内核自己再另外开 ...
最新文章
- sort与sorted
- win10 uwp DataContext
- 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )
- 【Connection Events】【BLE】【原创】
- 基于 APIGateway 打造生产级别的 Knative 服务
- 干货 | 广电行业数字化时代的「数据破局」指南
- 大数据数据库技术简介与分类分析
- vuejs构建的单页面应用history模式子页面微信分享在iOS中遇到的问题
- 石头剪子布(信息学奥赛一本通-T1132)
- 醒目的UI图标,带来出色的用户优良体验
- 仿抖音视频自动播放html,vue 仿抖音视频播放切换
- c#调用带有安全认证的java webservice
- 主流数据库连接池性能比较 hikari druid c3p0 dbcp jdbc
- 在计算机潮流计算的三类节点中,电力系统稳态分析复习(电管11) - 图文
- 最常用20000英语单词表_家长最值得一看的文章如何培养孩子好的学习习惯!
- HTTPD虚拟主机配置
- 51ditu、清华地图以及Google地图
- 使用Nginx搭建图片服务器
- OSChina 周四乱弹 —— 放过巧克力熊吧,待久了都变抹茶熊了
- Elasticsearch5基于completion suggester实现提示词(类京东淘宝)