Monday, April 23, 2007

维度建模当然不能缺少了事实表。事实表是维度建模的基本表,存放大量业务性能度量值。数据设计的时候因该尽量将文本度量值转换成维度,原因在于维度能够与其他文本维度属性更有效地关联起来,并且消耗少得多的空间。

所有的事实粒度都归属于三类之一:事务,周期快照和累计快照。事务粒度最为常见。在一个设计合理的维度模型中,维度表有许多列或者属性,这些属性给出对维度表的行所进行的描述。,每个维度用单一的主关键字。维度表一般使用雪花方案,也叫星型链接方案。

一张已经存在的规范化ER图,将他转换为一组维度模型的第一步是,将ER图分成一些分散的业务处理过程,然后分别单独建模。第二步是选出ER图中哪些含有数字型与可加性非关键字事实的多对多关系,并将它们标记为事实表。最后一步是,将剩下的所有表复合成具有直接链接倒事实表的单连关键字的平面表,这些表就成为维度表。
Posted by Picasa

Benefits of MDD
• Cognitive Advantages for the User
• Ease of Data Presentation and Navigation
– Obtaining the same views in a relational world requires the end user to either write complex SQL queries or use an SQL generator against the relational database to convert the table outputs into a more intuitive format.
• Ease of Maintenance
– Because data is stored in the same way as it is viewed (i.e. according to its fundamental attributes), no additional overhead is required to translate user queries into requests for data
• Performance
– Multidimensional databases achieve performance levels that are difficult to match in a relational environment.
Posted by Picasa
企业信息工厂(CIF), 在企业信息工厂的设计蓝图中,清除地描述了如何从各种业务系统当中捕获需要的数据,并在随后的流程中,为适应不同的需求,而逐渐演变为各种不同的形态,所有的这一切都围绕着一个最重要的部件来运转,这就是企业数据仓库。

Bill Inmon 将数据仓库定义为“一个面向主题的、集成的、随时间变化的、非易变的用于支持管理的决策过程的数据集合”(Building the data warehouse,第 2 版,第 33 页)。Inmon 通过“面向主题”表示应该围绕主题来组织数据仓库中的数据,例如客户、供应商、产品等等。每个主题区域仅仅包含该主题相关的信息。数据仓库应该一次增加一个主题,并且当需要容易地访问多个主题时,应该创建以数据仓库为来源的数据集市。换言之,某个特定数据集市中的所有数据都应该来自于面向主题的数据存储。 Inmon 的方法包含了更多上述工作而减少了对于信息的初始访问。但他认为这个集中式的体系结构持续下去将提供更强的一致性和灵活性,并且从长远来看将真正节省资源和工作。

这里展示了一个系统的架构,从底层数据操作系统到数据仓库,再到中间的联机分析,然后到客户端。其中联机分析有维度联机分析和关系联机分析两部分。
Posted by Picasa

Friday, April 20, 2007

数据建模经验谈--转载

笔者从98年进入数据库及数据仓库领域工作至今已经有近八年的时间,对数据建模工作接触的比较多,创新性不敢谈,本文只是将工作中的经验总结出来,供大家一同探讨和指正。

  提起数据建模来,有一点是首先要强调的,数据建模师和DBA有着较大的不同,对数据建模师来说,对业务的深刻理解是第一位的,不同的建模方法和技巧是为业务需求来服务的。而本文则暂时抛开业务不谈,主要关注于建模方法和技巧的经验总结。

  从目前的数据库及数据仓库建模方法来说,主要分为四类。

  第一类是大家最为熟悉的关系数据库的三范式建模,通常我们将三范式建模方法用于建立各种操作型数据库系统。

   第二类是Inmon提倡的三范式数据仓库建模,它和操作型数据库系统的三范式建模在侧重点上有些不同。Inmon的数据仓库建模方法分为三层,第一层是 实体关系层,也即企业的业务数据模型层,在这一层上和企业的操作型数据库系统建模方法是相同的;第二层是数据项集层,在这一层的建模方法根据数据的产生频 率及访问频率等因素与企业的操作型数据库系统的建模方法产生了不同;第三层物理层是第二层的具体实现。

  第三类是Kimball提倡的数据仓库的维度建模,我们一般也称之为星型结构建模,有时也加入一些雪花模型在里面。维度建模是一种面向用户需求的、容易理解的、访问效率高的建模方法,也是笔者比较喜欢的一种建模方式。

  第四类是更为灵活的一种建模方式,通常用于后台的数据准备区,建模的方式不拘一格,以能满足需要为目的,建好的表不对用户提供接口,多为临时表。

  下面简单谈谈第四类建模方法的一些的经验。

  数据准备区有一个最大的特点,就是不会直接面对用户,所以对数据准备区中的表进行操作的人只有ETL工程师。ETL工程师可以自己来决定表中数据的范围和数据的生命周期。下面举两个例子:

  1)数据范围小的临时表

  当需要整合或清洗的数据量过大时,我们可以建立同样结构的临时表,在临时表中只保留我们需要处理的部分数据。这样,不论是更新还是对表中某些项的计算都会效率提高很多。处理好的数据发送入准备加载到数据仓库中的表中,最后一次性加载入数据仓库。

  2)带有冗余字段的临时表

  由于数据准备区中的表只有自己使用,所以建立冗余字段可以起到很好的作用而不用承担风险。

   举例来说,笔者在项目中曾遇到这样的需求,客户表{客户ID,客户净扣值},债项表{债项ID,客户ID,债项余额,债项净扣值},即客户和债项是一对 多的关系。其中,客户净扣值和债项余额已知,需要计算债项净扣值。计算的规则是按债项余额的比例分配客户的净扣值。这时,我们可以给两个表增加几个冗余字 段,如客户表{客户ID,客户净扣值,客户余额},债项表{债项ID,客户ID,债项余额,债项净扣值,客户余额,客户净扣值}。这样通过三条SQL就可 以直接完成整个计算过程。将债项余额汇总到客户余额,将客户余额和客户净扣值冗余到债项表中,在债项表中通过(债项余额×客户净扣值/客户余额)公式即可 直接计算处债项净扣值。

  另外还有很多大家可以发挥的建表方式,如不需要主键的临时表等等。总结来说,正因为数据准备区是不对用户提供接口的,所以我们一定要利用好这一点,以给我们的数据处理工作带来最大的便利为目的来进行数据准备区的表设计。

  行业借鉴经验:

  数据仓库架构经验谈

  对于数据仓库的架构方法,不同的架构师有不同的原则和方法,笔者在这里来总结一下当前常采用的架构方式及其优缺点。这些架构方式不限于某个行业,可以供各个行业借鉴使用。

   首先需要说明的一点是,目前在数据仓库领域比较一致的意见是在数据仓库中需要保留企业范围内一致的原子层数据。而独立的数据集市架构 (Independent data marts)没有企业范围内一致的数据,很可能会导致信息孤岛的产生,除非在很小的企业内或只针对固定主题,否则不建议建立这样的架构方式。联邦式的数据 仓库架构(Federated Data Warehouse Architecture)不管是在地域上的联邦还是功能上的联邦都需要先在不同平台上建立各自的数据仓库,再通过参考(reference)数据来实现 整合,而这样很容易造成整合的不彻底,除非联邦式的数据仓库架构也采用Kimball的总线架构(Bus Architecture)中类似的功能,即在数据准备区保留一致性维度(Conformed Table)并不断更新它。所以,这两种架构方式不在讨论范围之内。下面主要讨论剩下的三种架构方式。

  1)三范式(3NF)的原子层+数据集市

   这样的数据仓库架构最大的倡导者就是数据仓库之父Inmon,而他的企业信息工厂(Corporate Information System)就是典型的代表。这样的架构也称之为企业数据仓库(Enterprise Data Warehouse,EDW)。企业信息工厂的实现方式是,首先进行全企业的数据整合,建立企业信息模型,即EDW。对于各种分析需求再建立相应的数据集 市或者探索仓库,其数据来源于EDW。三范式的原子层给建立OLAP带来一定的复杂性,但是对于建立更复杂的应用,如挖掘仓库、探索仓库提供了更好的支 持。这类架构的建设周期比较长,相应的成本也比较高。

  2)星型结构(Star Schema)的原子层+HOLAP

   星型结构最大的倡导者是Kimall,他的总线架构是该类架构的典型代表。总线架构实现方式是,首先在数据准备区中建立一致性维度、建立一致性事实的计 算方法;其次在一致性维度、一致性事实的基础上逐步建立数据集市。每次增加数据集市,都会在数据准备区整合一致性维度,并将整合好的一致性维度同步更新到 所有的数据集市。这样,建立的所有数据集市合在一起就是一个整合好的数据仓库。正是因为总线架构这个可以逐步建立的特点,它的开发周期比其他架构方式的开 发周期要短,相应的成本也要低。在星型结构的原子层上可以直接建立聚集,也可以建立HOLAP。笔者比较倾向于Kimball的星型结构的原子层架构,在 这种架构中的经验也比较多。

  3)三范式(3NF)的原子层+ROLAP

  这样的数据仓库架构也称为集中式架 构(Centralized Architecture),思路是在三范式的原子层上直接建立ROLAP,做的比较出色的就是MicroStrategy。在三范式的原子层上定义 ROLAP比在星型结构的原子层上定义ROLAP要复杂很多。采用这种架构需要在定义ROLAP是多下些功夫,而且ROLAP的元数据不一定是通用的格 式,所以对ROLAP做展现很可能会受到工具的局限。这类架构和第一类很相似,只是少了原子层上的数据集市。

  总结来说,这三种数据仓库的架构方式都是不错的选择。对于需要见效快、成本低的项目可以考虑采用第二种总线架构,对于资金充足并有成熟业务数据模型的企业可以考虑采用第一种架构或第三种架构。

  应用难点技巧:

  变化数据捕获经验谈

  在数据仓库系统中,一个很重要的目的就是保留数据的历 史变化信息。而变化数据捕获(Change Data Capture,CDC)就是为这个目的而产生的一项技术。变化数据捕获常用的方法有:1)文件或者表的全扫描对比,2)DBMS日志获取,3)在源系统 中增加触发器获取,4)基于源系统的时间戳获取,5)基于复制技术的获取,6)DBMS提供的变化数据捕获方法等。其中,由DBMS提供变化数据捕获的方 法是大势所趋,即具体的捕获过程由DBMS来完成。

  像银行、电信等很多行业的操作记录生成后就不会改变,只有像客户、产品等信息会随时间发生缓慢的变化,所以通常的变化数据捕获是针对维度表而言的。Kimball对缓慢变化维的分析及应对策略基本上可以处理维度表的各种变化。

   而对于一些零售行业,像合同表中的合同金额类似的数值在录入后是有可能会发生改变的,也就是说事实表的数据也有可能发生变化。通常对于事实表数据的修改 属于勘误的范畴,可以采用类似缓慢变化维TYPE 1的处理方式直接更新事实表。笔者不太赞同对事实表的变化采用快照的方式插入一条新的事实勘误记录,这样会给后续的展现、分析程序带来太多的麻烦。

   接下来要讨论的是笔者曾经遇到的一个颇为棘手的事实表数据改变的问题,该事实表的主键随表中某些数据的变化发生改变。以其中的一个合同表为例,该合同表 的主键是由“供货单位编号”+“合同号”生成的智能主键,当其中的“供货单位编号”和“合同号”中任何一个发生变化时,该合同表的主键都会发生变化,给变 化数据捕获带来了很大的麻烦。

  项目中,笔者的处理方式是采用触发器的办法来实现变化数据捕获。具体的实现方式是:

  1)建立一个新表作为保存捕获的数据表使用,其中字段有“原主键”、“修改后主键”、及其他需要的字段,称为“合同捕获表”。

   2)在原合同表Delete和Update时分别建立触发器,当删除操作发生时,建在Delete上的触发器会插入一条记录到“合同捕获表”,其中“修 改后主键”字段为空,表示该记录是删除的记录;当发生更新时,将“原主键”、“修改后主键”及其他需要记录的字段都保存入“合同捕获表”中,表示该记录被 修改过,如果“原主键”和“修改后主键”不同,则表示主键被修改,如果相同,则表示主键没有被修改。

  3)由于操作系统中的主键通常会成为数据仓库中事实表的退化维度,可能仍会起主键的作用。所以在数据加载时,需要分情况判断“合同捕获表”的数据来决定是否更新事实表中的退化维度。

  可以说,这样的基于触发器的变化数据捕获方法并不是一个很好的选择。首先这需要对源系统有较大的权限;其次,触发器会给源系统的性能带来很大的影响。所以除非是没有别的选择,否则不建议采用这种方法。

   而对于这样的情况,我们在建立操作型数据库系统时完全可以避免。下面是对操作型数据库系统建立者的几点建议:1)操作型系统的主键不要建立成智能型的, 至少不要建立成会变化的。2)操作型系统的表中需要加入操作人和操作时间字段,或者直接加入时间戳。3)操作型系统中操作型数据最好不要直接在原值上修 改,可以采用“冲红”的方式加入新的记录。这样后续建立数据仓库时就不需要考虑事实表数据的变化问题。

  最后,期待各大数据库管理系统的厂商能尽快在DBMS层提供功能强大、简单好用的变化数据捕获功能,目前Oracle已经有了这个功能。毕竟技术方面复杂的事情留给厂商做是一个趋势,而我们做应用的则更关注于业务。

ERWin的设计效果。最近学习使用ERWin做数据库设计,感觉效果就是好,界面很友好,支持数据库的同步,再一点好就是文件不大,不像PD那样硕大。唯一遗憾的是不支持mysql,要不然小型数据库的设计也一样可以用了。
Posted by Picasa
ubuntu一句话技巧

查看软件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
清除所以删除包的残余配置文件
*
dpkg -l grep ^rcawk '{print $2}' tr ["\n"] [" "]sudo xargs dpkg -P -
编译时缺少h文件的自动处理
*
sudo auto-apt run ./configure
查看安装软件时下载包的临时存放目录
*
ls /var/cache/apt/archives
备份当前系统安装的所有包的列表
*
dpkg --get-selections grep -v deinstall > ~/somefile
从上面备份的安装包的列表文件恢复所有包
*
dpkg --set-selections < ~/somefile sudo dselect 清理旧版本的软件缓存 * sudo apt-get autoclean 清理所有软件缓存 * sudo apt-get clean 删除系统不再使用的孤立软件 * sudo apt-get autoremove 系统 查看内核 * uname -a 查看Ubuntu版本 * cat /etc/issue 查看内核加载的模块 * lsmod 查看PCI设备 * lspci 查看USB设备 * lsusb 查看网卡状态 * sudo ethtool eth0 查看CPU信息 * cat /proc/cpuinfo 显示当前硬件信息 * lshw 硬盘 查看硬盘的分区 * sudo fdisk -l 查看IDE硬盘信息 * sudo hdparm -i /dev/hda 查看STAT硬盘信息 * sudo hdparm -I /dev/sda 或 sudo apt-get install blktool sudo blktool /dev/sda id 查看硬盘剩余空间 * df -h df -H 查看目录占用空间 * du -hs 目录名 优盘没法卸载 * sync fuser -km /media/usbdisk 内存 查看当前的内存使用情况 * free -m 进程 查看当前有哪些进程 * ps -A 中止一个进程 * kill 进程号(就是ps -A中的第一列的数字) 或者 killall 进程名 强制中止一个进程(在上面进程中止不成功的时候使用) * kill -9 进程号 或者 killall -9 进程名 图形方式中止一个程序 * xkill 出现骷髅标志的鼠标,点击需要中止的程序即可 查看当前进程的实时状况 * top 查看进程打开的文件 * lsof -p ADSL 配置 ADSL * sudo pppoeconf ADSL手工拨号 * sudo pon dsl-provider 激活 ADSL * sudo /etc/ppp/pppoe_on_boot 断开 ADSL * sudo poff 查看拨号日志 * sudo plog 网络 根据IP查网卡地址 * arping IP地址 查看当前IP地址 * ifconfig eth0 awk '/inet addr/ {split($2,x,":");print x[2]}' 查看当前外网的IP地址 * w3m -no-cookie -dump www.ip138.comgrep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' w3m -no-cookie -dump ip.loveroot.comgrep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 查看当前监听80端口的程序 * lsof -i :80 查看当前网卡的物理地址 * arp -a awk '{print $4}' 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 #然后启动网卡
统计当前IP连接的个数
*
netstat -nagrep ESTABLISHEDawk '{print $5}'awk -F: '{print $1}'sortuniq -csort -r -n
netstat -nagrep SYNawk '{print $5}'awk -F: '{print $1}'sortuniq -csort -r -n
统计当前20000个IP包中大于100个IP包的IP地址
*
tcpdump -tnn -c 20000 -i eth0 awk -F "." '{print $1"."$2"."$3"."$4}' sort uniq -c sort -nr awk ' $1 > 100 '
屏蔽IPV6
*
echo "blacklist ipv6" sudo tee /etc/modprobe.d/blacklist-ipv6
服务
添加一个服务
*
sudo update-rc.d 服务名 defaults 99
删除一个服务
*
sudo update-rc.d 服务名 remove
临时重启一个服务
*
/etc/init.d/服务名 restart
临时关闭一个服务
*
/etc/init.d/服务名 stop
临时启动一个服务
*
/etc/init.d/服务名 start
设置
配置默认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 *
转换文件内容由GBK为UTF8
*
iconv -f gbk -t utf8 $i > newfile
转换 mp3 标签编码
*
sudo apt-get install python-mutagen
find . -iname “*.mp3” -execdir mid3iconv -e GBK {} \;
控制台下显示中文
*
sudo apt-get install zhcon
使用时,输入zhcon即可
文件
快速查找某个文件
*
whereis filename
*
find 目录 -name 文件名
查看文件类型
*
file filename
显示xxx文件倒数6行的内容
*
tail -n 6 xxx
让tail不停地读地最新的内容
*
tail -n 10 -f /var/log/apache2/access.log
查看文件中间的第五行(含)到第10行(含)的内容
*
sed -n '5,10p' /var/log/apache2/access.log
查找包含xxx字符串的文件
*
grep -l -r xxx .
查找关于xxx的命令
*
apropos xxx
man -k xxx
通过ssh传输文件
*
scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上
scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地
查看某个文件被哪些应用程序读写
*
lsof 文件名
把所有文件的后辍由rm改为rmvb
*
rename 's/.rm$/.rmvb/' *
把所有文件名中的大写改为小写
*
rename 'tr/A-Z/a-z/' *
删除特殊文件名的文件,如文件名:--help.txt
*
rm -- --help.txt 或者 rm ./--help.txt
查看当前目录的子目录
*
ls -d */. 或 echo */.
将当前目录下最近30天访问过的文件移动到上级back目录
*
find . -type f -atime -30 -exec mv {} ../back \;
将当前目录下最近2小时到8小时之内的文件显示出来
*
find . -mmin +120 -mmin -480 -exec more {} \;
删除修改时间在30天之前的所有文件
*
find . -type f -mtime +30 -mtime -3600 -exec rm {} \;
查找guest用户的以avi或者rm结尾的文件并删除掉
*
find . -name '*.avi' -o -name '*.rm' -user 'guest' -exec rm {} \;
查找的不以java和xml结尾,并7天没有使用的文件删除掉
*
find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} \;
统计当前文件个数
*
ls /usr/binwc -w
显示当前目录下2006-01-01的文件名
*
ls -l grep 2006-01-01 awk '{print $8}'
压缩
解压缩 xxx.tar.gz
*
tar -zxvf xxx.tar.gz
解压缩 xxx.tar.bz2
*
tar -jxvf xxx.tar.bz2
压缩aaa bbb目录为xxx.tar.gz
*
tar -zcvf xxx.tar.gz aaa bbb
压缩aaa bbb目录为xxx.tar.bz2
*
tar -jcvf xxx.tar.bz2 aaa bbb
Nautilus
显示隐藏文件
*
Ctrl+h
显示地址栏
*
Ctrl+l
特殊 URI 地址
*
* computer:/// - 全部挂载的设备和网络
* network:/// - 浏览可用的网络
* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录
* smb:/// - 可用的 windows/samba 网络资源
* x-nautilus-desktop:/// - 桌面项目和图标
* file:/// - 本地文件
* trash:/// - 本地回收站目录
* ftp:// - FTP 文件夹
* ssh:// - SSH 文件夹
* fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装
* themes:/// - 系统主题文件夹
查看已安装字体
*
在nautilus的地址栏里输入”fonts:///“,就可以查看本机所有的fonts
程序
详细显示程序的运行信息
*
strace -f -F -o outfile
日期和时间
设置日期
*
#date -s mm/dd/yy
设置时间
*
#date -s HH:MM
将时间写入CMOS
*
hwclock --systohc
读取CMOS时间
*
hwclock --hctosys
从服务器上同步时间
*
sudo ntpdate time.nist.gov
控制台
不同控制台间切换
*
Ctrl + ALT + ←
Ctrl + ALT + →
指定控制台切换
*
Ctrl + ALT + Fn(n:1~7)
控制台下滚屏
*
SHIFT + pageUp/pageDown
控制台抓图
*
setterm -dump n(n:1~7)
数据库
mysql的数据库存放在地方
*
/var/lib/mysql
从mysql中导出和导入数据
*
mysqldump 数据库名 > 文件名 #导出数据库
mysqladmin create 数据库名 #建立数据库
mysql 数据库名 < 文件名 #导入数据库 忘了mysql的root口令怎么办 * sudo /etc/init.d/mysql stop sudo mysqld_safe --skip-grant-tables & sudo mysqladmin -u user password 'newpassword'' sudo mysqladmin flush-privileges 修改mysql的root口令 * sudo mysqladmin -uroot -p password '你的新密码' 其它 下载网站文档 * wget -r -p -np -k http://www.21cn.com · -r:在本机建立服务器端目录结构; · -p: 下载显示HTML文件的所有图片; · -np:只下载目标站点指定目录及其子目录的内容; · -k: 转换非相对链接为相对链接。 如何删除Totem电影播放机的播放历史记录 * rm ~/.recently-used 如何更换gnome程序的快捷键 * 点击菜单,鼠标停留在某条菜单上,键盘输入任意你所需要的键,可以是组合键,会立即生效; 如果要清除该快捷键,请使用backspace[/url]
查看软件xxx安装内容
dpkg -L xxx
查找软件
apt-cache search 正则表达式
查找文件属于哪个包
dpkg -S filenameapt-file search filename
查询软件xxx依赖哪些包
apt-cache depends xxx
查询软件xxx被哪些包依赖
apt-cache rdepends xxx
增加一个光盘源
sudo apt-cdrom add
系统升级
sudo apt-get updatesudo apt-get dist-upgrade
清除所以删除包的残余配置文件
dpkg -l grep ^rcawk '{print $2}' tr ["\n"] [" "]sudo xargs dpkg -P -
编译时缺少h文件的自动处理
sudo auto-apt run ./configure
查看安装软件时下载包的临时存放目录
ls /var/cache/apt/archives
系统
查看内核
uname -a
查看Ubuntu版本
cat /etc/issue
查看内核加载的模块
lsmod
查看PCI设备
lspci
查看USB设备
lsusb
查看网卡状态
sudo ethtool eth0
查看CPU信息
cat /proc/cpuinfo
显示当前硬件信息
lshw
硬盘
查看硬盘的分区
sudo fdisk -l
查看硬盘剩余空间
df -hdf -H
查看目录占用空间
du -hs 目录名
优盘没法卸载
syncfuser -km /media/usbdisk
内存
查看当前的内存使用情况
free -l
进程
查看当前有哪些进程
ps -A
中止一个进程
kill 进程号(就是ps -A中的第一列的数字)或者 killall 进程名
强制中止一个进程(在上面进程中止不成功的时候使用)
kill -9 进程号或者 killall -9 进程名
查看当前进程的实时状况
top
查看进程打开的文件
lsof -p
非常实用的Ubuntu命令大全

1 文件管理 # ls ls -a 列出当前目录下的所有文件,包括以.头的隐含文件
文件管理 # ls ls -l或ll 列出当前目录下文件的详细信息
文件管理 # pwd pwd 查看当前所在目录的绝对路经
文件管理 # cd cd .. 回当前目录的上一级目录
文件管理 # cd cd - 回上一次所在的目录
文件管理 # cd cd ~ 或 cd 回当前用户的宿主目录
文件管理 # cd cd ~用户名 回指定用户的宿主目录
2 文件管理 # mkdir mkdir 目录名 创建一个目录
文件管理 # mkdir mkdir –p 递归式去创建一些嵌套目录
文件管理 # rmdir Rmdir 空目录名 删除一个空目录
3 文件管理 # rm rm 文件名 文件名 删除一个文件或多个文件
文件管理 # rm rm -rf 非空目录名 递归删除一个非空目录下的一切,不让提式-f
4 文件管理 # cat cat文件名 一屏查看文件内容
5 文件管理 # more more文件名 分页查看文件内容
6 文件管理 # less less 文件名 可控分页查看文件内容
7 文件管理 # grep grep字符 文件名 根据字符匹配来查看文件部分内容
8 文件管理 # mv mv 路经/文件 /经/文件 移动相对路经下的文件到绝对路经下
文件管理 # mv mv 文件名 新名称 在当前目录下改名
9 文件管理 # cp cp /路经/文件 ./ 移动绝对路经下的文件到当前目录下
10 文件管理 # find find 路经 -name “字符串” 查找路经所在范围内满足字符串匹配的文件和目录
11 文件管理 # ln ln 源文件 链接名 创建当前目录源文件的硬链接
ln /home/test /usr/test1 在/usr下建立/home/test的硬链接
12 文件管理 # ln Ln -s a b 创建当前目录下a的符号链接b
13 文件管理 # touch touch file1 file2 创建两个空文件
14 磁盘管理 # df df 用于报告文件系统的总容量,使用量,剩余容量。
15 磁盘管理 # du du -b /home 查看目前/HOME目录的容量(k)及子目录的容量(k)。
16 磁盘管理 # fdisk fdisk -l 查看系统分区信息
17 磁盘管理 # fdisk fdisk /dev/sdb 为一块新的SCSI硬盘进行分区
18 磁盘管理 # mkfs.ext3 Mkfs.ext3 /dev/sdb1
为第一块SCSI硬盘的第一主分区格式化成
ext3的文件系统
mkfs.ext2 Mkfs.ext2/dev/sdb2 格式化成ext2文件系统
19 磁盘管理 # mount mount -t 文件系统类型 设备路经 访问路经 磁盘管理 # 文件系统类型
ISO9660 光驱文件系统
vfat Fat文件系统(windows)
挂载光驱 # mount –t iso9660 /dev/cdrom /mnt/cdrom
挂载FAT # mount –t vfat /dev/hda5 /mnt/cdrom 挂第一个ide的第五个逻辑分区
17 磁盘管理 # Umount /mnt/cdrom 卸载/mnt/cdrom为空
18 文件权限 # chmod chmod u+s file 为file的属主加上特殊权限
chmod g+r file 为file的属组加上读权限
chmod o+w file 为file的其它用户加上写权限
chmod a-x file 为file的所有用户减去执行权限
chmod 765 file 为file的属主设为完全权限,属组设成读写权,其它用户具有读和执心权限
19 文件权限 # chown chown root /home 把/home的属主改成root用户
20 文件权限 # chgrp chgrp root /home 把/home的属组改成root组
21 打印管理 # redhat-config-printer-tui 进入安装打印机界面
22 打印管理 # lp lp –d hptr file 打印file到hptr的打印机上
23 打印管理 # lpq Lpq –P 打印机名 查看打印机的状态
24 打印管理 # lprm Lprm –P 打印机名 a 删除打印机内的打印作业
25 打印管理 # disable Disable –r “changing paper” HPtr 禁用打印机并提示原因
26 打印管理 # enable Enable HPtr 重新启用被禁用的
27 用户管理 # useradd Useradd 创建一个新的用户
28 用户管理 # groupadd Groupadd 组名 创建一个新的组
29 用户管理 # passwd Passwd 用户名 为用户创建密码
30 用户管理 # Passwd -d Passwd -d用户名 删除用户密码也能登陆
31 用户管理 # Passwd -l Passwd -l用户名 锁定账号密码
32 用户管理 # Passwd -u Passwd -u用户名 解锁账号密码
33 用户管理 # Passwd -S Passwd -S用户名 查询账号密码
34 用户管理 # Usermod -l Usermod -l 新用户名 老用户名 为用户改名
35 用户管理 # Usermod -L Usermod -L 要锁定用户名 锁定用户登陆
36 用户管理 # Usermod -U Usermod –U解锁用户名 解锁用户登陆
37 用户管理 # Usermod -u Usermod –u 501用户名 改变用户UID
38 用户管理 # Userdel Userdel–r 用户名 删除用户一切
39 用户管理 # Groupmod -n Groupmod –n新用户名 老用户名 为组改名
40 用户管理 # Groupmod -g Groupmod –g 501 组名 改变组GID
41 用户管理 # groupdel Groupdel组名 先应删它的用户 删除组
42 用户管理 # gpasswd -a gpasswd -a 用户名 组名 增加用户到组
43 用户管理 # Id id 用户名 查用户信息
44 软件管理 # rpm -qa rpm –qa less 查询已安装RPM
45 软件管理 # rpm –qa grep ftp 查询指定RPM
46 软件管理 # rpm -q rpm -q 已安装的RPM包 查是否安装
47 软件管理 # rpm -q telnet-server 查看telnet服务器包
48 软件管理 # rpm -qi rpm –qi 软件包名称 查看软件的描述信息
49 软件管理 # rpm -ql rpm –ql软件包名称 查询软件包的文件列表
50 软件管理 # rpm -qf rpm –qf软件包名称 查询某个文件所属的软件包
51 软件管理 # rpm -qp rpm –qp软件包全名 查询未安装的软件包信息
52 软件管理 # rpm -e rpm –e 软件包名称 删除具体的软件包
53 软件管理 # rpm -U rpm –Uvh软件包全名 升级软件包并显示过程
54 软件管理 # rpm -ivh rpm –ivh 软件包全名 安装软件包并显示过程
55 软件管理 # rpm -V rpm –V软件包名称 验证软件包的大小,类型等
56 软件管理 # tar -c 创建包 –x 释放包 -v 显示命令过程 –z 代表压缩包
57 软件管理 # tar -cf tar –cvf benet.tar /home/benet 把/home/benet目录打包
58 软件管理 # tar -czf tar –zcvf benet.tar.gz /mnt 把目录打包并压缩
59 软件管理 # tar –tf tar –tf benet.tar 看非压缩包的文件列表
60 软件管理 # tar –tzf tar –tf benet.tar.gz 看压缩包的文件列表
61 软件管理 # tar –xf tar –xf benet.tar 非压缩包的文件恢复
62 软件管理 # tar –zxvf tar –zxvf benet.tar.gz 压缩包的文件解压恢复
63 软件管理 # tar -jxvf tar –jxvf benet.tar.bz2
64 软件管理 # diff diff file1 file2 > 补丁名.patch 为新旧文件生成补丁文件
65 软件管理 # diff diff file1 file2 比较两个文件的区别
66 软件管理 # Patch Patch file补丁名.patch 打补丁
67 软件管理 # ./configure --prefix=/usr/local/ 编译前配置
68 软件管理 # make 编译
69 软件管理 # make install 安装编译好的源码包
70 启动管理 # reboot Init 6 重启LINUX系统
71 启动管理 # Halt Init 0 Shutdown –h now 关闭LINUX系统
72 启动管理 # runlevel 显示系统运行级
73 启动管理 # Init [0123456] 改变系统运行级,7种
74 启动管理 # Chkconfig –-list [服务名称] 查看服务的状态
75 启动管理 # Chkconfig –-level <运行级> <服务名> onoffset 设置服务的启动状态
76 启动管理 # Chkconfig <服务名> onoffset 设置非独立服务启状态
77 进程管理 # Top动态 Ps-aux静态 进程树pstree 查看系统进程
78 进程管理 # 程序名 & 后台运行程序
79 进程管理 # fg 把后台运行的进程调回前台
80 进程管理 # bg 把前台运行进程调到后台
81 进程管理 # renice Renice +1 180 把180号进程的优先级加1
82 进程管理 # kill Kill PID 终止某个PID进程
83 进程管理 # at at 5pm + 3 days /bin/ls 指定三天后下午5:00执行/bin/ls
84 进程管理 # crontab Crontab -e 用VI的形式来编辑自动周期性任务
85 进程管理 # crontab Crontab -l 查看自动周期性任务
86 进程管理 # crontab Crontab -r 删除自动周期性任务
87 进程管理 # crond Service crond 马上启动自动周期性服务 Service crond <启动停止重启状态>
实现磁盘配额 (注安装LINUX时建立/home分区)
目标:对用户zhao在/home目录上实现soft limit为5k,hard limit 为10k的磁盘配额
实现步骤:
1. 修改包含/home的行, #vi /etc/fstab, 改为:defaults,usrquota。也就是增加usrquota项。然后保存退出。
2、卸载/home目录 #umount /home
3. 挂接/home目录 #mount /home
4、增加用户zhao #useradd zhao
5、修改密码 #passwd zhao
6、生成关于/home目录的quota信息 # quotacheck -cmug /home
#quotacheck -vu /home
7、查看所有用户的信息 #repquota -au
8、设置配额 #edquota -u zhao
将soft 和hard 分别改为5和10
9、保存并退出 #wq!
10、修改时间 #edquota -t
11、 #wq!
12.开启/home上的磁盘配额功能 #quotaon /home
13.查询配额 #quota -u zhao
14.验证配额 #su - zhao
$touch myfile