我的Linux学习笔记

来源:互联网 发布:dns怎么解析域名 编辑:程序博客网 时间:2024/06/05 01:01

http://wiki.chinaunix.net/index.php/Linux



--------------------获得帮助 : man和info使用  --------------------
  因为同一个命令可能属于几个section,如open:就既有命令的open,程序函数的open,等等。每一个section有一个section号。  
  man   -aw   <命令>   察看所有的<命令>的手册页文件名,尤其想知道是哪个section很有用  
  man   <命令>   显示找到的<命令>、section号最小的那个手册页。  
  man   <section号>   <命令>   显示   section号为<section号>   中的     <命令>   手册页.  
  man   -k   <关键字>   在所有手册页的描述(Description)部分搜索<关键字>,并显示对应的手册。  
   
  info   <命令>   打开<命令>的info手册   ,大多数info手册是完整的手册,比man详细很多。     
    TAB键可以用来在菜单之间移动,  
    n   跳到下一个节点,  
    p   跳到前一个节点,  
    u   跳到上一层节点,  
    q   退出,    
    在info主列表   m<命令>可以跳到指定的<命令>手册   ,  
    Ctrl+s,r用于向前和向后搜索,  
  info的很多用法和emacs基本相同,你如果习惯用emacs那么你就会用info的大部分功能了

修改源路径:sudo vim /etc/apt/sources.list
配置快速入门:http://wiki.ubuntu.org.cn/index.php?title=%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97/FeistyFawn&variant=zh-cn
网络配置文件:/etc/network/interfaces
auto eth1
iface eth1 inet static //指定为static
address 192.168.0.2 //IP地址
gateway 192.168.0.1 //网关
netmask 255.255.255.0 //子网掩码

同样需要重启
sudo /etc/init.d/networking restart

dns配置文件:/etc/resolv.conf
nameserver 192.168.3.2

----环境配置----
安装openssh-server: sudo apt-get install openssh-server
察看系统版本:sudo lsb_release -a
察看内核版本:uname -a
设置时间:sudo date -s "03/03/2008 16:06:00"
测试温度: acpi -t
手动加载动态连接库: ldconfig /home/ncs/lib

设置系统编码方式:
1.sudo vi /var/lib/locales/supported.d/zh
加入
zh_CN.GB18030 GB18030 (最新汉字编码字符集,向下兼容GBK,GB2312)
zh_CN.GBK GBK (汉字扩展编码,向下兼容GB2312, 并包含BIG5全部汉字)
zh_CN.GB2312 GB2312 (简化汉字编码字符集)
zh_CN.GB18031 GB18031 (数字键盘汉字编码输入,面向手持设备)
zh_HK.BIG5 BIG5 (繁体)
zh_TW.BIG5 BIG5 (繁体)

2.执行 sudo locale-gen , 提示以下信息,成功了
zh_CN.GB18030... done
zh_CN.GBK... done
......

3.执行 sudo vi /etc/vim/vimrc
加入以下配置参数
let &termencoding=&encoding
set fileencodings=utf-8,gb18030,gbk,gb2312,big5

查看库依赖:ldd /bin/bash

----文件操作----
删除非空目录: rm -r dirname
查找文件:find / -name filename
察看文件属于哪个包:apt-file search filename
查找哪个文件包含特定字符:grep "string" *
grep工具多个条件查找:ls | grep '/.log/|/.txt' * (查找后缀为.log或.txt的文件)

清空文件:echo "" > filename
网络拷贝:scp verify_client.tar ncs@172.16.30.34:/home/ncs/active_client
排序并输出文件所有行:sort filename
统计文件行: wc -l filename
统计文件字数: wc -w filename
统计文件字符数: wc -c filename
返回不包含路径的文件名: basename file,如: basename /bin/tux 会返回 tux
返回文件开头几行:head -n filename
字典文件:/usr/lib/cracklib_dict.pwd
加载文件系统:mount /dev/sdc1 /media/cdrom0
静态加载文件系统列表:/etc/fstab

awk: awk 用来提取文本文件中的字段。缺省的字段分割符是空格,可以使用 -F 指定其它分割符。cat file.txt | awk -F, '{print $1 "," $3 }',这里我们使用 , 作为字段分割符,同时打印第一和第三个字段。如果该文件内容为 Adam Bor, 34, IndiaKerry Miller, 22, USA,则上述命令的输出为:Adam Bor, IndiaKerry Miller, USA

linux sed 批量替换多个文件中的字符串
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`
例如:替换/home下所有文件中的www.bcak.com.cn为bcak.com.cn
sed -i "s/www.bcak.com.cn/bcak.com.cn/g" `grep www.bcak.com.cn -rl /home`

显示目录或文件的大小: du -h

----命令相关----
把程序转至后台执行:[Ctrl]+z
把程序转至前台执行:fg %1 (%后面为编号,通过jobs查看)
查看后台执行的程序:jobs
把后台执行的程序由stopped变成running: bg %1

----压缩解压----
解压.tar.gz: tar -zxvf filename

----vi指令----
h光标左移   l光标右移    j光标下移    k光标上移                         ctrl+r 重做
dd删除整行  yy复制整行   p粘贴        nohlsearch 去掉搜索的高亮显示
$移到行尾   ^移到行首                 set tabstop=4 设置TAB键宽度4
nG 跳到n行
配色方案目录:/usr/share/vim/vimcurrent/colors
自动缩进: sudo vim /etc/vim/vimrc
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set cindent
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
set nu
if &term=="xterm"
set t_Co=8
    set t_Sb=^[[4%dm
set t_Sf=^[[3%dm
endif

字符串替换  :%s/old/new/gc
在每行前插入#符号  :1,$s/^/#/
匹配一定数量范围的字符,例如:/a/{1,5/} 匹配1-5个连续a
匹配固定数的字符,例如:/[a-zA-Z]/{5/} 匹配5个字符
匹配至少个数的字符,例如:/[a-zA-Z]/{5,/} 匹配至少5个字符

vim插件:
snapMate: 自动补全代码,如if,for
将插件目录拷贝至~/.vim/下, 编辑~/.vimrc, 加入filetype plugin on


-----------------访问共享-------------------
sudo mkdir /media/sharename
sudo mount //172.16.30.120/linux /media/sharename/ -o username=myusername,password=mypassword,dmask=777,fmask=777

----boost安装----
1 下载 boost-1_32.tar.gz
2 tar jxvf boost-1_32.tar.gz
3 下载 bjam
4 进入 boost-1_32 目录
5 bjam -s TOOLs=gcc install.另外,可以 ln -s /usr/local/include/boost-1_32/boost/ /usr/local/include 把boost文件目录链接进 gcc 头文件的搜索路径。以及 设定 LD_LIBRARY_PATH 环境变量,使 gcc 能自动找到 lib 文件。


----gdb的使用----
编译生成调试文件:gcc -ggdb hello.c -o hello.o
运行调试:gcc hello.o
加断点:b 11    //第11行加断点
加断点:b filename.cpp:23    //filename.cpp第11行加断点
执行到下一个断点:cont
删除所有断点:delete breakpoints
传参数:
gdb server
run -f server.conf

运行程序 r
察看变量:print i
退出:quit

nohup:运行进程,退出帐户时该进程继续运行
exa: nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
使用 jobs 查看任务, 使用 fg %n 关闭。

----环境变量----
设置环境变量:export ORACLE_HOME="/home/wdb/oracle"
显示环境变量:echo $ORACLE_PATH,或者env

----mysql应用与开发----
mysql.h所在包:libmysqlclient15-dev
编译命令:gcc -o mysql.o mysql.c -I/usr/include/mysql -lmysqlclient

----进程----
查看内存使用情况: free -m[-k -b]

ps ax                     显示当前系统进程列表,包括其他用户进程
ps ax | grep programname (ex:emacs)    查看程序是否运行
ps aux | less                防止列表过长
查看端口由哪个程序占用            lsof -i :端口

可以和 top 一起使用的互动命令包括:
命令     描述
[Space]     立即刷新显示
[h]     显示帮助屏幕
[k]     杀死某进程。你会被提示输入进程 ID 以及要发送给它的信号。
[n]     改变要显示的进程数量。你会被提示输入数量。
[u]     按用户排序。
[M]     按内存用量排序。
[P]     按 CPU 用量排序。
[q]    退出top。

----启动级别----
1-6
0关机
1单用户,无网络服务
2 多用户,默认无网络服务
3 多用户,网络服务,文本环境
4 保留,默认同运行级别3
5 多用户,网络服务,图形环境
6 重启

----svn----
清除目标文件:svn distclean

----esx server----

----python----
时间格式化:time_str = time.strftime("[%H:%M:%S]")


-----tar工具------
打tar包:tar cvf backup.tar /etc
解tar包:tar xvf backup.tar

压缩tar.gz包:tar cvfz backup.tar.gz /etc/   或gzip -q backup.tar
解压tar.gz包:tar xvf backup.tar             或gunzip backup.tar.gz

解开tar.Z包:tar xvfz backup.tar.Z           或uncompress backup.tar.Z
解开.tgz包:gunzip backup.tgz

7.如何压缩和解压缩.bz2的包?
#bzip2 /etc/smb.conf
这将压缩文件smb.conf成smb.conf.bz

#bunzip2 /etc/smb.conf.bz2
这将在当前目录下还原smb.conf.bz2为smb.conf
注: .bz2压缩格式不是很常用,你可以man bzip2

解tar.gz2包:tar -jxvf name.tar.gz2


--------c++---------
编译:g++ -o test test.cpp

cannot find input file ...Makefile.in  先执行: automake --add-missing   试试./missing aclocal.m4
来自网上(没试过):
aclocal
automake --add-missing
autoconf

-----------mysql---------------
启动服务:/sbin/service mysql start
      /etc/init.d/mysql start

远程客户端无法连接服务器:vim /etc/mysql/my.cnf
    更改:            bind-address = 0.0.0.0
   
更改字符集:default_character_set=utf8

------------电源------------
安装laptop-mode-tools,并修改文件/etc/laptop-mode/laptop-mode.conf,设置CONTROL_HD_POWERMGMT=1。
注:以上复制和修改文件操作均需要提升权限

------------多媒体-----------
mp3播放器:sudo apt-get install beep-media-player
乱码解决方法:ctrl+p, 插件,MPEG插件, 勾选:禁用ID3v2标签, 将非UTF-8 ID3标签转换成UTF-8, ID3编码填入GBK,重新载入列表

--------------apache and php---------------


-------------快捷键---------------
* 打开主菜单 = Alt + F1
* 运行 = Alt + F2
* 显示桌面 = Ctrl + Alt + d
* 最小化当前窗口 = Alt + F9
* 最大化当前窗口 = Alt + F10
* 关闭当前窗口 = Alt + F4
* 截取全屏 = Print Screen
* 截取窗口 = Alt + Print Screen
默认特殊快捷键
* 展示所有窗口程序 = F10
* 展示当前窗口最上层程序 = F11
* 展示当前窗口所有程序 = F12
* 切换窗口 = Alt + Tab
* 旋转3D桌面 = Ctrl + Alt + 左/右箭头(也可以把鼠标放在标题栏或桌面使用滚轮切换)
* 旋转3D桌面( 活动窗口跟随) = Ctrl + Shift + Alt + 左/右箭头
* 手动旋转3D桌面 = Ctrl + Alt + 左键单击并拖拽桌面空白处
* 窗口透明/不透明 = possible with the “transset” utility or Alt + 滚轮
* 放大一次 = 超级键 + 右击
* 手动放大 = 超级键 + 滚轮向上
* 手动缩小 = 超级键 + 滚轮向下
* 移动窗口 = Alt + 左键单击
* 移动窗口时贴住边框 = 左键开始拖动后再 Ctrl + Alt
* 调整窗口大小 = Alt + 中击
* Bring up the window below the top window = Alt + middle-click
* 动态效果减速 = Shift + F10
* 水纹 = 按住 Ctrl+超级键
* 雨点 = Shift-F9
* 桌面展开= Ctrl + Alt + 下箭头,然后按住 Ctrl + Alt 和左/右箭头选择桌面

-------------------------------------------------------
查看软件xxx安装内容
dpkg -L xxx


查找软件
apt-cache search 正则表达式


查找文件属于哪个包
dpkg -S filename           apt-file search filename


查询软件xxx依赖哪些包
apt-cache depends xxx

查询软件xxx被哪些包依赖
apt-cache rdepends xxx


增加一个光盘源
sudo apt-cdrom add

系统升级
sudo apt-get update       sudo apt-get upgrade       sudo apt-get dist-upgrade


--------------------------------------------------------------------------------
编译时缺少h文件的自动处理
sudo auto-apt run ./configure


查看安装软件时下载包的临时存放目录 ls /var/cache/apt/archives

备份当前系统安装的所有包的列表 dpkg --get-selections | grep -v  deinstall > ~/somefile

从上面备份的安装包的列表文件恢复所有包
dpkg --set-selections 清理旧版本的软件缓存
sudo apt-get autoclean

清理所有软件缓存
sudo apt-get clean

删除系统不再使用的孤立软件
sudo apt-get autoremove
----------------------------------------------------------------------
查看内核
uname -a

查看ubuntu版本
cat /etc/issue

查看内核加载的模块
lsmod

查看PCI设备
lspci

查看网卡状态
sudo ethtool eth0

查看USB 设备
lausb

查看cpu信息
vat /proc/cpuinfo

查看当前硬件信息
Lshw

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

查看硬盘的分区
sudo fdisk -l

查看IDE硬盘信息
sudo hdparm -i /dev/hda

查看sata硬盘信息
sudo hdparm -I /dev/sda
或 sudo apt-get install blktool        sudo blktool dev/sda id

查看硬盘胜于空间
df -hdf -H

查看目录占用空间
du -hs  目录名

U盘无法卸载
syncfuser -km /media/usbdisk

查看当前内存使用情况
free -l

--------------------------------------------------------------------------------
查看当前进程
ps -A

杀死一个进程
kill  进程号(就是 ps -A 中第一列数字  或者 killall 进程名)

强制杀死一个进程(上面的方法没有成功时)
kill -9 进程号   或者 killall -9  进程名

查看当前进程的实时状况
top

查看进程打开的文件
lsof -p

配置 ADSL
sudo pppoeconf

ADSL 手工拨号
sudo pon dsl-provider

激活 ADSL
sudo /etc/ppp/pppoe_on_boot

断开ADSL
sudo poff

查看拨号日志
sudo plog

根据IP查看网卡地址
atping IP地址

查看当前IP地址
sudo ifconfig eth0 |awk '/inet addr/{split($2,x,":");print x[2]}'

查看当前外网的IP地址
w3m -no-cookie -dump ip.loveroot.com |grep -o '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}'

查看当前监听80端口的程序
lsof -i :80

--------------------------------------------------------------------------------
查看当前网卡的物理地址
sudo arp -a | awk '{print $4}'
sudo ifconfig eth0 | head -1 | awk '{print $5}'

立即让网络支持nat
sudo echo 1 >/proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -I POSTROUTING - j MASQUERADE

查看路由信息netstat -rn
sudo route -n

手工增加删除一条路由
sudo route add -net 192.168.0.0
netmask 255.255.255.0 gw 172.16.0.1
sudo route del -net 192.168.0.0
netmask 255.255.255.0 gw 172.16.0.1

修改网卡MAC地址的方法
sudo ifconfig eth0 down #关闭网卡
sudo ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #然后改地址
sudo ifconfig eth0 up #然后启动网卡

--------------------------------------------------------------------------------
添加一个服务sudo update-rc.d 服务名 defaults 99

删除一个服务
sudo update-rc.d 服务名 remove

临时重启一个服务
/etc/init.d/服务名 restart

临时关闭一个服务
/etc/init.d/服务名 stop

配置默认Java使用哪个sudo update-alternatives --config java

修改用户资料
sudo chfn userid

给apt设置代理
export
http_proxy=http://xx.xx.xx.xx:xxx

修改系统登录信息
sudo vim /etc/motd

转换文件名由GBK为UTF8
sudo apt-get install convmv
convmv -r -f cp936 -t utf8 --notest --nosmart *

快速查找某个文件
whereis filename
find 目录 -name 文件名

查看文件类型
file filename

显示xxx文件倒数6行的内容
tail -n 6 xxx

--------------tr,sed,cut,paste,grep工具-----------------
查找包含aaa的txt文件:grep -l 'aaa' *.txt
显示不包含'aaa'的行: grep -v 'aaa' *.txt
显示不包含'aaa'的.txt文件: grep -v 'aaa' *.txt

安装 .deb 套件包:sudo dpkg -i package_file.deb
反安装 .deb 套件包: sudo dpkg -r package_name
利用tr工具进行大小写转换:tr < low.txt [a-z] [A-Z] > up.txt

---------------正则表达式-------------------
搜索st前面不是e的串:grep "[^e]st" test.txt
搜索所有字母串:grep -e "[a-zA-Z]" test.txt
行首字符与行尾字符:^ $
任意一个字符: .    如:grep "g..d" test.txt, 输出good
0个或一个: ?      如:grep -E "go?d" test.txt 输出gd god
一个或多个:+       如:grep -E "go+d" test.txt 输出god good goood

---------------shell 编程-------------------
变量的声明:
declare
    -a array
    -f function
    -i integer
    -r readonly
    -x 通过环境输出变量
例如:declare -i a=2; declare -i b=3; declare -i c=$a*$b; echo $c;
取字符串长度:
var="string"
echo ${#var}

字符串是否空:if [ -z "$str" ]; then echo "string is empty";fi;

整数比较:
-eq等于
-ne不等于
-gt大于
-ge大于等于
-lt小于
-le小于等于

函数使用:
functionquit
{
    exit
}

functionquit

单字符匹配,如:ls test?.cpp                 结果:显示test1.cpp test2.cpp testa.cpp等
               ls ???.cpp                   结果:显示所有三个字母加.cpp的文件
               ls [ab].cpp ls [0-9].cpp   结果:匹配[]中的一个,显示a.cpp b.cpp 0.cpp
               ls [a-ce-g].cpp              结果:匹配所有a-c或e-g中的一个
               ls [!a-z].cpp                结果:匹配所有a-z以外的一个
               ls *[!o]                     结果:匹配任何不以o结尾的文件
              
如wc,sort等命令,如果不带参数,则从终端读入,按ctrl+d表示执行
wc
012345
ctrl+d
结果:1 1 7

参数: $*表示所有参数,例如: echo $*    结果:显示所有参数

$? 参数:保存最后一个命令的执行退出状态,0表示执行成功退出。

              
判断文件属性:是否存在 if [ -e filename ]
              是否进程可读 if [ -r filename ]
              是否进程可读 if [ -w filename ]
              是否为目录 if [ -d filename ]
              是否为 普通文件 if [ -f filename ]
              长度不为0  if [ -s filename ]
              是否可执行 if [ -x filename ]
              是否是连接 if [ -L filename ]
              逻辑非操作 if [ ! -e filename ]
              逻辑与     if [ -e filename -a -x filename ]  (存在且可执行)
              逻辑或     if [ -e filename -o -x filename ] 
         
         例如:who | grep 'wdb';echo $?;    返回:0(成功,找到)
               who | grep 'wdbb';echo $?;   返回:1(失败)

从标准输入读入变量:read $var_name; echo $var_name;

数组的用法,如下例:
#############################
#!/bin/bash

#array demo
arr[0]="a"
arr[1]="b"
arr[2]="c"

i=0
while [ $i -lt 3 ]
do
        echo ${arr[$i]}
        ((i++))
done
#############################

随机函数:echo $RANDOM

变量的迭代:eval
days=365
year=$days
eval echo /$$year

连续命令:command1; command2
      command1 && command2 #第一个 command1 如果执行结果有错误,第二个就不被执行
      command1 || command2 #command1 有错误讯息时, command2 才会执行

bash 命令执行的过程中,主要有三种输出入的状况,分别是:
         1. 标准输入;代码为 0 ;或称为 stdin ;使用的方式为 <
         2. 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
         3. 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>
    如: ls -l / 1>list.txt 2>/dev/null #将正确信息输入list.txt,错误信息丢弃

---------------------------------------------------------------------
为用户添加管理员权限:
usermod -g admin username  
useradd -g users -s /bin/bash wdb

在/etc/group 中的每条记录分四个字段:
第一字段:用户组名称;
第二字段:用户组密码;
第三字段:GID
第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;
Gpasswd –a username groupname 把某用户加入到某个组中
Gpasswd –d username groupname 把组中的某个用户删除
Smbpasswd –a username          在SMB中加入用户
Smbpasswd –x username          在 SMB中删除用户

创建组,并把用户添加进组里
sudo addgroup subversion
sudo usermod -G subversion -a www-data

--------------------------------------错误处理---------------------------------------
1。编译mysql报如下错误:no acceptable C compiler found in $PATH。 解决办法:apt-get install build-essential
2. ./configure 抱错:checking for termcap functions library... configure: error: No curses/termcap library found     解决:sudo apt-get install libncurses5-dev



---------------------------建立本地源----------------------------
安装dpkg-dev
sudo apt-get install dpkg-dev

备份已经下载到本机的软件包和更新
mkdir ~/hardy #在根目录建立hardy文件夹,该目录名可选
sudo cp -a /var/cache/apt/archives/* ~/hardy

建立包列表及依赖信息文件
cd ~/
sudo dpkg-scanpackages hardy /dev/null |gzip >hardy/Packages.gz

保存建立好的本地包及Packages.gz sudo mv ~/edgy media/hda7/linux/soft/packs
#后面这个保存路径随个人喜好而定

至此,本地源就基本建好了,下面是添加源 sudo vim /etc/apt/sources.list
加入下面的源地址,注意与常见的网络源格式不同

 deb file:///media/hda7/linux/soft/packs hardy/

------------------Ulimit的用法------------------------
在*NIX将TCP/IP也作为文件来访问,而一般系统默认的访问文件数是1024。如果是在运营级别服务器上面就需要调整系统的最大访问文件数来提高网络并发性能。
调整方法就是ulimit命令,比如ulimit -SHn 65535

ulimit 参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes

一般可以设置 ulimit -SHn 65535
请注意,该命令只在当前shell环境下有效,而且只能由root权限来设置,一般可以放在需要启动服务的命令脚本里,另外,如果你是用root登录来启动服务的话,防止忘记这条命令,一般可以设置在~/.root 下的 .bash_profile 文件或者/etc/rc.local文件中,不建议在/etc/profile 中设置,因为该命令只有root用户有权限将数字增加到超过系统默认的上限(比如 -n 打开文件数 1024 )。

原创粉丝点击