2014年7月7日晚上学习笔记

================

目录:

一、学习Bash笔记

二、利用Ubuntu创建无线wifi

三、在Ubuntu里禁用不用的桌面

四、安装软件时依赖冲突的万能解决方案

五、Ubuntu安装nginx

六、配置自己的ubuntu编码

七、ubuntu 命令行管理软件

八、ubuntu 命令行安装 phpmyadmin

九、ubuntu下目录含义

--------------------

所有的文章全部在http://tiankonguse.com

上看的,记录了一些自己认为有用的和以后常用的

===================================


学习Bash笔记--2014-07-07

来自:http://tiankonguse.com/record/record.php?id=602

----------------------

编写工具:

vi/vim;gvim


运行bash:

sh file.sh or ./file.sh


Bash介绍

一个bash文件,就是包含shell命令的文件,也是一个shell程序


Shell变量

变量用来暂时储存数据

使用Varname=value来给变量赋值,等号两边不能有空格

使用${Varname}可以获得变量的值,大括号可以省略


有类型变量

使用declare加下面的参数声明特定的变量

·-a将变量看作数组

·-f只使用函数名

·-F显示未定义的函数名

·-i将变量看作整数

·-r使用变量只读

·-x标记变量未通过环境导出


位置参数

位置参数可以理解为函数的参数。一个bash文件也可以理解为一个函数

位置参数使用$0,$1,$2等获得他们的值

$*代表包含所有参数位置的单一字符串。

$@等价与N个单独的由空格分隔的双引号字符串


函数

函数可以理解为一个独立的程序块,可以多次使用


字符串与模式


条件测试

shell使用[]结构提供了测试各种条件的方式,称为test测试

可以使用该结构检验一个文件的各种属性(是否存在、文件类型、权限和所有者)

或者比较两个文件那个更新,以及字符串进行比较

[和]的后和前必须有空格


字符串比较

· == 匹配

· != 不匹配

· <  小于

· > 大于

· -n str 为null,长度大于0

· -z str 为null,长度为0

分号是shell的标准语句分隔字符


文件属性检查

· -d file file存在并且为一个目录

· -e file file存在

· -f file file存在并且为一个正规文件

· -r file 对 file 有读权限

· -s file 文件存在且非空

· -w file 对 file 有写权限

· -x file 对file有可执行权限,如果为目录,则有目录搜索权限

· -O file 你是file的所有者

· -G file file的组ID匹配你的ID

· file1 -nt file2 file1比file2新

· file1 -ot file2 file1比file2旧

· -a 和 -o 操作符类似于退出状态时所用的 && 和 || 操作符。

只有在test条件表达式内可用。


整数条件

· -lt 小于

· -le 小于等于

· -eq 等于

· -ge 大于等于

· -gt 大于

· -ne 不等于


if流程

if condition

then

statements

elif

statements

else

statements

fi


for 流程

for name [in list]

do

statement

done


read可以读入一个字符串


ssh代码(例子)

#########################################################################

# File Name: ssh.sh

# Author: tiankonguse

# mail: i@tiankonguse.com

# Created Time: Thu 27 Feb 2014 11:50:04 AM CST

#########################################################################

#!/bin/bash

# declare show name

declare -a names;


names[0]="ms";

names[1]="msProxy";


nameNum=${#names[@]};

echo "pleace select a number that you want to connect.";


i=0;

while [ $i -lt $nameNum ];

do

   echo "$i :  ${names[$i]}";

   i=$(($i+1));

done


# declare command name

declare -a commands;

commands[0]="ssh tiankonguse@tiankonguse.com";

commands[1]="ssh -D 7070 tiankonguse@tiankonguse.com ";


read i;

if [[ $i =~ ^[0-9]+$ ]]&&[[ $i < $nameNum ]]

then

   eval ${commands[$i]};

else

   echo "input error!";

fi

==========================

利用Ubuntu 无线网卡创建wifi

参照:http://tiankonguse.com/record/record.php?id=678


第一步:安装 plasma-nm

可以使用下面的命令,不过建议点击这个链接

sudo apt-get install plasma-nm

第二步:启动程序

可以使用 Alt+F2 后,搜索 kde-nm-connection-editor

也可以终端直接输入 kde-nm-connection-editor 。

第三步:建一个wifi

点击 add, 选择 Wireless (shared)。

ssid 就是无线名字,比如我的是 tiankonguse。

mode 选择 Access Point。

可以去 Wireless Security 设置一个密码,我选的是 WPA & WPA2 Personal 那一项。

第四步:连接 wifi

一般是点击联网的图标,选择 Connect to Hidden Wi-Fi network 那一项, Connection 选择你新建的 wifi .

第五步:真正的连接wifi

在wifi列表中是不是看到了 你建的wifi,点击,输入密码等一会就可以了。

教程是美好的,现实是残酷的。

实际上第二个教程我在第三步建wifi的时候就弹出一个对话框,提示我我的电脑不支持 ap-wifi.

或者是第四步吧,记不清了。

框的内容大概是

(32) Access Point (AP) mode is not supported by this device.

然后中午午觉时间到了,我关闭电脑去睡午觉。

醒来后开机,发现 wifi 列表中有我建的wifi, 点击之,漫长的等待后竟然连上了。

手机拿出来试试,真的可以建wifi了。


参照:http://ubuntuhandbook.org/index.php/2014/02/wifi-hotspot-ubuntu-laptop-android/

http://ubuntuhandbook.org/index.php/2014/06/share-internet-with-android-ubuntu-1404/

========================

在Ubuntu里禁用不用的桌面:

简单的说就是在

/usr/share/xsessions/ 里面,

把不想显示的桌面对应的文件添加下面一句话即可

NoDisplay=true

用来显示:

Delete `NoDisplay=true' in

/usr/share/xsessions/awesome.desktop

 solves the problem.

====================

安装软件时依赖冲突的万能解决方案

来自:http://tiankonguse.com/record/record.php?id=653

-------------------------

安装软件时提示的是什么错误信息呢?

安装的软件依赖的软件版本过低.


首先系统怎么知道依赖冲突呢?

应该是每个软件都写清楚了自己依赖哪些软件以及这些软件的最低版本.


那我们能不能手动修改这些依赖的软件的版本呢?

如果知道这些信息在哪里储存,那就可以修改了.

那这些信息在哪里储存呢?

貌似在 /var/lib/dpkg/status 这个文件里面.


比如我的 vim-common 的信息

Package: vim-common

Status: install ok installed

Priority: important

Section: editors

Installed-Size: 296

Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>

Architecture: i386

Source: vim

Version: 2:7.3.547-6ubuntu3~blueyed1~precise

Depends: libc6 (>= 2.3.4)

Recommends: vim | vim-gnome | vim-gtk | vim-athena | vim-nox | vim-tiny

Conffiles:

/etc/vim/vimrc 682aa2a07693cc27756eee9751db3903

Description: Vi IMproved - Common files

Vim is an almost compatible version of the UNIX editor Vi.

.

Many new features have been added: multi level undo, syntax

highlighting, command line history, on-line help, filename

completion, block operations, folding, Unicode support, etc.

.

This package contains files shared by all non GUI-enabled vim

variants (vim and vim-tiny currently) available in Debian.

Examples of such shared files are: manpages, common executables

like xxd, and configuration files.

Homepage: http://www.vim.org/

Original-Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>


可以看到里面的两个对我们来说重要的数据

Version: 2:7.3.547-6ubuntu3~blueyed1~precise

Depends: libc6 (>= 2.3.4)


假设我们的 libc6 的版本是 2.3.2 的话,安装 vim-common 的话机会提示依赖冲突,说需要 libc6 的版本至少是 2.3.4.

此时我们可以做修改了最低依赖版本会怎么样呢?

比如

Version: 2:7.3.547-6ubuntu3~blueyed1~precise

Depends: libc6 (>= 2.3.2)

这是再次修复竟然成功了,也可以卸载了.

好吧,解决方案就是这个:把依赖的软件的版本修改为目前安装的版本即可.

==========================

Linux下man手册的认识

来源:http://tiankonguse.com/record/record.php?id=183


用Linux要学会使用man info命令

这是最好用的教程

例如:man ls

 man date

 info printf


man细节使用说明

可以使用范围

1 -- commands

2 -- system calls

3 -- library calls

4 -- special files

5 -- file formats and convertions

6 -- games for Linux

7 -- macro packages and conventions

8 -- system managment commands

9 -- other

中文含义:

1是普通的命令

2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)

3是库函数,如printf,fread

4是特殊文件,也就是/dev下的各种设备文件

5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义

6是给游戏留的,由各个游戏自己定义

7是附件还有一些变量,比如向environ这种全局变量在这里就有说明

8是系统管理用的命令,这些命令只能由root使用,如ifconfig

9其他

===========================

Ubuntu安装nginx

来源:http://tiankonguse.com/record/record.php?id=494

-----------

安装nginx

sudo apt-get nginx

配置文件简介

所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了、etc/nginx/sites-available下

程序文件在/usr/sbin/nginx

日志放在了/var/log/nginx中

并已经在/etc/init.d/下创建了启动脚本nginx

默认的虚拟主机的目录设置在了/var/www/nginx-default(有的版本默认的虚拟主机的目录设置在了/var/www or /usr/share/nginx/html)


安装FastCgi

nginx本身不能处理php,它只是个web服务器 ,当接收到请求后,如果是php请求,则发给php解释器处理并把结果返回给客户端

所以我们还要安装其他东西以支持我们需要的服务,比如支持FastCgi

/usr/bin/spawn-fcgi这个文件来管理fastcgi,它原属于lighttpd这个包里面,但现在spawn-fcgi被分离出来单独成包

sudo apt-get install spawn-fcgi


配置nginx

修改nginx的配置文件:/etc/nginx/sites-available/default修改方机名:

server_name localhost

修改index的一行内容添加index.php:

index index.php index.html index.html

去掉下面部分的注释用于支持php脚本:

location ~ \.php$ {

   include /etc/nginx/fastcgi_params; #需放在第一行,否则会出错

   fastcgi_pass 127.0.0.1:9000;

   fastcgi_index index.php;

   fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;

}


重启nginx

/etc/init.d/nginx stop

/etc/init.d/nginx start


启动fastcgi php:

spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -i www-date -f /usr/bin/php-cgi


为了让PHP-cgi开机自动启动

在/etc/rc.local文件中的添加 (加到exit 0前面才行 )

spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -i www-date -f /usr/bin/php-cgi


==================

配置自己的ubuntu编码

来源:http://tiankonguse.com/record/record.php?id=505

-----------------

支持中英文

sudo vi /var/lib/locales/supported.d/local

修改为:

en_US.UTF-8 UTF-8

zh_CN.UTF-8 UTF-8


默认英文

sudo vi /etc/default/locale

改成:

LANG="en_US.UTF-8"

LANGUAGE="en_US:en_US:en"

LC_NUMERIC="zh_CN.UTF-8"

LC_TIME="zh_CN.UTF-8"

LC_MONETARY="zh_CN.UTF-8"

LC_PAPER="zh_CN.UTF-8"

LC_IDENTIFICATION="zh_CN.UTF-8"

LC_NAME="zh_CN.UTF-8"

LC_ADDRESS="zh_CN.UTF-8"

LC_TELEPHONE="zh_CN.UTF-8"

LC_MEASUREMENT="zh_CN.UTF-8"


加载:

source /etc/default/locale


重新加载语言

sudo locale-gen


=====================

ubuntu 命令行管理软件

来源:http://tiankonguse.com/record/record.php?id=573


1、apt命令管理。


(1)安装:apt-get install softname1 softname2 …;

(2)修复:apt-get -f install softname1 softname2... ;(-f Atemp to correct broken dependencies)

(3)重新:apt-get --reinstall install softname1 softname2...;

(4) 简单卸载 : apt-get remove softname1 softname2 …;(配置文件未删除)

(5) 完全卸载 : apt-get --purge remove softname1 softname2...;(同时清除配置)

(6) 完全卸载2 : apt-get purge sofname1 softname2...;(清除配置文件)


apt常用命令


关于 apt 的命令有很多的,这里只是简单的记录一下基本用法。


apt-get install # ------(package 安装包)

apt-get --reinstall install # -----(package --reinstall 重新安装包)

apt-get -f install # -----(强制安装, "-f = --fix-missing"当是修复安装吧...)

apt-get remove #-----(package 删除包)

apt-get remove --purge # ------(package 删除包,包括删除配置文件等)

apt-get autoremove --purge # ----(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))

apt-get update #------更新源

apt-get upgrade #------更新已安装的包

apt-get dist-upgrade # ---------升级系统

apt-get dselect-upgrade #------使用 dselect 升级

apt-get build-dep # ------(package 安装相关的编译环境)

apt-get source #------(package 下载该包的源代码)

apt-get clean && apt-get autoclean # --------清理下载文件的存档 && 只清理过时的包

apt-get check #-------检查是否有损坏的依赖

apt-cache search # ------(package 搜索包)

apt-cache show #------(package 获取包的相关信息,如说明、大小、版本等)

apt-cache showpkg #显示软件包更多细节,以及和其它包的关系。

apt-cache depends #-------(package 了解使用依赖)

apt-cache rdepends # ------(package 了解某个具体的依赖,当是查看该包被哪些包依赖吧...)

apt-file search filename -----查找filename属于哪个软件包

apt-file list packagename -----列出软件包的内容

apt-file update --更新apt-file的数据库


2、dpkg方式安装deb包


(1) 安装 : dpkg -i package_name.deb

(2) 简单卸载 : dpkg -r pkg1 pkg2 ...;

(3) 完全卸载 : dpkg -P pkg1 pkg2...;


dpkg扩展知识


dpkg 使用文本文件来作为数据库.通称在 /var/lib/dpkg 目录下. 通称在 status 文件中存储软件状态,和控制信息. 在 info/ 目录下备份控制文件, 并在其下的 .list 文件中记录安装文件清单, 其下的 .mdasums 保存文件的 MD5 编码.


dpkg -l 可以显示包的列表,后面也可以加上搜索的包的名字

每条记录对应一个软件包, 注意每条记录的第一, 二, 三个字符. 这就是软件包的状态标识, 后边依此是软件包名称, 版本号, 和简单描述.


第一字符为期望值,它包括:

u 状态未知,这意味着软件包未安装,并且用户也未发出安装请求.

i 用户请求安装软件包.

r 用户请求卸载软件包.

p 用户请求清除软件包.

h 用户请求保持软件包版本锁定.



第二列,是软件包的当前状态.此列包括软件包的六种状态.

n 软件包未安装.

i 软件包安装并完成配置.

c 软件包以前安装过,现在删除了,但是它的配置文件还留在系统中.

u 软件包被解包,但还未配置.

f 试图配置软件包,但是失败了.

h 软件包安装,但是但是没有成功.



第三列标识错误状态,可以总结为四种状态. 第一种状态标识没有问题,为空. 其它三种符号则标识相应问题.

h 软件包被强制保持,因为有其它软件包依赖需求,无法升级.

r 软件包被破坏,可能需要重新安装才能正常使用(包括删除).

x 软包件被破坏,并且被强制保持.


dpkg的具体使用说明,可以查阅手册,这里列出基本说明信息。


dpkg --info "软件包名" --列出软件包解包后的包名称.

dpkg -l --列出当前系统中所有的包.可以和参数less一起使用在分屏查看. (类似于rpm -qa)

dpkg -l |grep -i "软件包名" --查看系统中与"软件包名"相关联的包.

dpkg -s 查询已安装的包的详细信息.

dpkg -L 查询系统中已安装的软件包所安装的位置. (类似于rpm -ql)

dpkg -S 查询系统中某个文件属于哪个软件包. (类似于rpm -qf)

dpkg -I 查询deb包的详细信息,在一个软件包下载到本地之后看看用不用安装(看一下呗).

dpkg -i 手动安装软件包(这个命令并不能解决软件包之前的依赖性问题),如果在安装某一个软件包的时候遇到了软件依赖的问题,可以用apt-get -f install在解决信赖性这个问题.

dpkg -r 卸载软件包.不是完全的卸载,它的配置文件还存在.

dpkg -P 全部卸载(但是还是不能解决软件包的依赖性的问题)

dpkg -reconfigure 重新配置


3、源码安装(.tar、tar.gz、tar.bz2、tar.Z)


首先解压缩源码压缩包,可以参考这里ubuntu解压命令(http://tiankonguse.com/record/record.php?id=495)


然后进入到解压出的目录中,建议先读一下README之类的说明文件


一般依次执行 ./configure; make; sudo make install;  即可完成安装。


==========================

ubuntu 命令行安装 phpmyadmin

来源:http://tiankonguse.com/record/record.php?id=598

--------------

安装phpmyadmin

sudo apt-get install phpmyadmin

访问phpmyadmin

php -- /var/www

phpmyadmin -- /usr/share

创建一个链接:

sudo ln -s /usr/share/phpmyadmin /var/www



======================

ubuntu 下个目录的含义

来源:http://tiankonguse.com/record/record.php?id=604

----------------

/bin : bin是binary的缩写;

/boot :存放启动Linux时使用的一些核心文件;

/root :root(超级管理员)的用户主目录;

/sbin :s就是Super User,存放系统管理员使用的系统管理程序;

/dev :dev是device(设备)的缩写;这个目录下是所有Linux的外部设备;

/etc :所有的系统管理所需要的配置文件和子目录;

/home :用户的主目录;

/lib :存放系统最基本的动态链接共享库;几乎所有的应用程序都需要用到这些共享库;

/lost+found :这个目录平时是空的,当系统不正常关机后,一些丢失文件会存放到该目录下;

/mnt :空目录,系统提供这个目录是让用户临时挂载别的文件系统;

/proc :虚拟目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。

/tmp :存放一些临时文件;

/usr :这是个最庞大的目录,很多应用程序和文件几乎都放在这个目录下;包括以下内容:

    /usr/X11R6 :存放X-Windows的目录;

    /usr/bin :存放许多应用程序;

    /usr/sbin :存放给超级用户使用的一些管理程序;

    /usr/doc :存放Linux文档;

    /usr/include :Linux下开发和编译应用程序需要的头文件;

    /usr/lib :存放一些常用的动态链接共享库和静态档案库;

    /usr/local :一般用户的/usr目录,在这安装软件最适合;

    /usr/man :帮助文档目录;

    /usr/src :Linux开放的源代码就存在这个目录;

/var :存放那些不断在扩充着的东西;为了保持/usr的相对稳定,那些经常被修改的目录可以放在这个目录下;其中,系统的日志文件就在/var/log目录中;