学习驱动开发时:常用的命令,每次使用时候就来更新,便于查询。
1、解压指令
其实在Ubuntu下 tar xvf *tar.bz2
或 tar xvf *tar.gz
这两条解压命令足以!
解压到指定目录
tar -C /指定目录
.tar
解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
1.1 不解压查看文件目录
tar tvf a.tar.gz | grep ^d
---------------------------------------------
1.2 tar常见文件解压法:
.gz - z 小写;
.bz2 - j 小写;
.xz - J 大写;
.Z - Z大写;
1.3 .tar.xz 解压
tar Jxvf xxx.tar.xz 即可
1.4 .zip 解压
unzip命令
语法:unzip [选项] 压缩文件名.zip
各选项的含义分别为:
-x 文件列表 解压缩文件,但不包括指定的file文件。
-v 查看压缩文件目录,但不解压。
-t 测试文件有无损坏,但不解压。
-d 目录 把压缩文件解到指定目录下。
-z 只显示压缩文件的注解。
-n 不覆盖已经存在的文件。
-o 覆盖已存在的文件且不要求用户确认。
-j 不重建文档的目录结构,把所有文件解压到同一目录下。
例1:将压缩文件text.zip在当前目录下解压缩。
$ unzip text.zip
例2:将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。
$ unzip -n text.zip -d /tmp
例3:查看压缩文件目录,但不解压。
$ unzip -v text.zip
由于软件安装的地方不止一个地方,所有先说查看文件安装的所有路径(地址)。
这里以Oracle为例。比如说我安装了Oracle,但是不知道文件都安装在哪些地方、放在哪些文件夹里,可以用下面的命令查看所有的文件路径
在终端输入:
whereis oracle
回车,如果你安装好了Oracle,就会显示文件安装的地址,例如我的显示(安装地址可能会不同)
oracle: /usr/bin/oracle /usr/lib/oracle /usr/share/oracle /usr/share/man/man1/oracle.1.gz
可以看出来,Oracle安装在是个目录里。
如果你没有安装Oracle或者Oracle安装没成功,则不会显示文件路径出来。只提示:
oracle:
二、查询运行文件所在路径:
如果你只要查询文件的运行文件所在地址,直接用下面的命令就可以了(还是以Oracle为例):
which oracle
结果会显示:
/usr/bin/oracle
Linux copy 整个目录
cp -R /home/usera/ /mnt/temp
3、find 命令的学习
[root@localhost admin]# find / -name php.ini
/etc/php.ini
/usr/local/lib/php.ini
/usr/local/php-5.0.0b1/pear/tests/php.ini
$ find . -name 'my*'
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
$ find . -name 'my*' -ls
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
$ find . -type f -mmin -10
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
3.1 find 查找一段时间内被修改过的文件
比如我们要查找linux下指定时间内做过改动的文件,我们可以用find命令,其实find命令的功能十分强大,下面我们通过几个简单的例子来学习下find命令的简单用法:
find /opt -iname "*" -atime 1 -type f
找出 /opt 下一天前访问过的文件
选项 OPTIONS
所有的选项都总是返回真值,它们总会被执行,除非放在表达式中执行不到的地方。因此,清楚起见,最好把它们放在表达式的开头部分。
-daystart
从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime, -cmin, -ctime, -mmin, and -mtime)。
-amin n
对文件的最近一次访问是在 n 分钟之前。
-anewer file
对文件的最近一次访问比 file 修改时间要晚。如果命令行中 -follow 在 -anewer 之前,(也只有在这种情况下 -anewer会受 -follow 的影响)。
-atime n
对文件的最近一次访问是在 n*24 小时之前。
-cmin n
对文件状态的最近一次修改是在 n 分钟之前。
-cnewer file
对文件状态的最近一次修改比 file 修改时间要晚。如果命令行中 -follow 在 -cnewer 之前,(也只有在这种情况下-cnewer 会受 -follow 的影响)。
-ctime n
对文件状态的最近一次修改是在 n*24 小时之前。
-mmin n
对文件数据的最近一次修改是在 n 分钟之前。
-mtime n
对文件数据的最近一次修改是在 n*24 小时之前。
-mtime : 指定时间曾被改动过的文件,意思是文件內容被更改过
-ctime : 指定时间曾被更改过的文件,意思是文件权限被更改过
-atime : 指定时间曾被存取过的文件,意思是文件被读取过
1. 时间是以 24 小时为一个单位,而不是以天的
2. 2011/09/08 12:00 时间开始找一天內的,会列出 2011/09/07 12:00 ~ 2011/09/08 12:00 时间內的文件
找出 3 天"以前"被改动过的文件 (前第三天以前 → 2011/09/05 12:00 以前的文件) (> 72 小时)
- find /var/log/ -mtime +3 -type f -print
找出 3 天內被改动过的文件 (2011/09/05 12:00 ~ 2011/09/08 12:00 內的文件) (0 ~ 72 小时內)
- find /var/log/ -mtime -3 -type f -print
找出前第 3 天被改动过的文件 (2011/09/04 12:00 ~ 2011/09/05 12:00 內的文件) (72 ~ 96 小时)
- find /var/log/ -mtime 3 -type f -print
找出第 3 天被改动过的文件 (也可以这样写)
- find /var/log/ -mtime +2 -mtime -4 -type f -print
4. whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis命令的使用实例:
$ whereis grep
5. which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which命令的使用实例:
$ which grep
。
6、打印目录下名的树形结构图
tree /sys/module/globalmem
7、ubuntu 输入法
12、查看内核分配
# cat /proc/interrupts
CPU0
30: 25085 s3c S3C2410 Timer Tick
32: 0 s3c s3c2410-lcd
33: 0 s3c s3c-mci
13、查看USB 设备命令: lsusb 和 dmesmg
首先使用lsusb命令:
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 093a:2510 Pixart Imaging, Inc. Hama Optical Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 007: ID 18ec:3299 Arkmicro Technologies Inc.
Bus 001 Device 004: ID 0bda:0111 Realtek Semiconductor Corp. Card Reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
这里似乎没有看到什么,后来发现被标记的这个ID号就是这个摄像头的ID,说明系统可以检测到设备。
于是,在输入dmesg命令:
[ 3112.322542] uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (18ec:3299)
[ 3112.322830] uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
[ 3112.323439] input: USB2.0 PC CAMERA as /devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/input/input8
这里可以看出,系统检测出摄像头设备
14、查看磁盘 df 命令
Df命令是Linux查看磁盘空间系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令格式:
df -hl
Linux查看磁盘空间 显示格式为:
文件系统 容量 已用 可用 已用% 挂载点
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 45G 19G 24G 44% /
/dev/hda1 494M 19M 450M 4% /boot
/dev/hda6 4.9G 2.2G 2.5G 47% /home
/dev/hda5 9.7G 2.9G 6.4G31% /opt
none 1009M 0 1009M 0% /dev/shm
/dev/hda3 9.7G 7.2G 2.1G 78% /usr/local
/dev/hdb2 75G 75G 0 100% /
/dev/hdb2 75G 75G 0 100% /
以上面的输出为例,表示的意思为:
HD硬盘接口的第二个硬盘(b),第二个分区(2),容量是75G,用了75G,可用是0,因此利用率是100%, 被挂载到根分区目录上(/)。
下面是Linux查看磁盘空间命令的解释:
df -hl 查看磁盘剩余空间
df -h 查看每个根路径的分区大小
du -sh [目录名] 返回该目录的大小
du -sm [文件夹] 返回该文件夹总M数
更多功能可以输入一下命令查看:
df --help
du --help
15、SCP
#scp /home/administrator/news.txt root@192.168.6.129:/etc/squid
16、rpm 下载站点
rpmfind.net
谷歌浏览器 护眼设置
http://www.haogongju.net/art/1514042
17、获取Linux 命令的源码包
# which reboot <---which指令会在环境变量$PATH设置的目录里查找符合条件的文件 /sbin/reboot <--找到文件如下 # rpm -qf /sbin/reboot--通过文件查找起安装包 SysVinit-2.85.34 <-- rpm包名字 # rpm -qi SysVinit-2.85.34 <---查看安装包信息信息,查看源码安装包 然后就去网上找这个源码安装包,下载完源码安装包后,使用rpm2cpio来解压文件: RedHat下载网址:http://redhat.download.fedoraproject.org/pub/fedora/linux/core/3/SRPMS/ RPM包下载地址:http://ftp.freshrpms.net/pub/freshrpms/redhat/9/ $ rpm2cpio SysVinit-2.85.34.src.rpm | cpio -idv $ tar xvfz SysVinit-2.85.34.tar.gz 在后你就可以看到的源码目录:SysVinit-2.85.34
18、SSH常用命令
18.1、复制SSH密钥到目标主机,开启无密码SSH登录 ssh-copy-id user@host 如果还没有密钥,请使用ssh-keygen命令生成。 18.2、从某主机的80端口开启到本地主机2001端口的隧道 ssh -N -L2001:localhost:80 somemachine 现在你可以直接在浏览器中输入http://localhost:2001访问这个网站。 18.3、将你的麦克风输出到远程计算机的扬声器 dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp 这样来自你麦克风端口的声音将在SSH目标计算机的扬声器端口输出,但遗憾的是,声音质量很差,你会听到很多嘶嘶声。 18.4、比较远程和本地文件 ssh user@host cat /path/to/remotefile | diff /path/to/localfile – 在比较本地文件和远程文件是否有差异时这个命令很管用。 18.5、通过SSH挂载目录/文件系统 sshfs name@server:/path/to/folder /path/to/mount/point 从http://fuse.sourceforge.net/sshfs.html下载sshfs,它允许你跨网络安全挂载一个目录。 18.6、通过中间主机建立SSH连接 ssh -t reachable_host ssh unreachable_host Unreachable_host表示从本地网络无法直接访问的主机,但可以从reachable_host所在网络访问,这个命令通过到reachable_host的“隐藏”连接,创建起到unreachable_host的连接。 18.7、将你的SSH公钥复制到远程主机,开启无密码登录 – 简单的方法 ssh-copy-id username@hostname 18.8、直接连接到只能通过主机B连接的主机A ssh -t hostA ssh hostB 当然,你要能访问主机A才行。 18.9、创建到目标主机的持久化连接 ssh -MNf <user>@<host> 在后台创建到目标主机的持久化连接,将这个命令和你~/.ssh/config中的配置结合使用: Host host ControlPath ~/.ssh/master-%r@%h:%p ControlMaster no 所有到目标主机的SSH连接都将使用持久化SSH套接字,如果你使用SSH定期同步文件(使用rsync/sftp/cvs/svn),这个命令将非常有用,因为每次打开一个SSH连接时不会创建新的套接字。 18.10、通过SSH连接屏幕 ssh -t remote_host screen –r 直接连接到远程屏幕会话(节省了无用的父bash进程)。 18.12、删除文本文件中的一行内容,有用的修复 ssh-keygen -R <the_offending_host> 在这种情况下,最好使用专业的工具。 18 3、通过SSH运行复杂的远程shell命令 ssh host -l user $(<cmd.txt) 更具移植性的版本: ssh host -l user “`cat cmd.txt`” 18.14、通过SSH将MySQL数据库复制到新服务器 mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uUSER -pPASS OLD_DB_NAME | ssh -C user@newhost “mysql -uUSER -pPASS NEW_DB_NAME” 通过压缩的SSH隧道Dump一个MySQL数据库,将其作为输入传递给mysql命令,我认为这是迁移数据库到新服务器最快最好的方法。 18.15、删除文本文件中的一行,修复“SSH主机密钥更改”的警告 sed -i 8d ~/.ssh/known_hosts 18.16、从一台没有SSH-COPY-ID命令的主机将你的SSH公钥复制到服务器 cat ~/.ssh/id_rsa.pub | ssh user@machine “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys” 如果你使用Mac OS X或其它没有ssh-copy-id命令的*nix变种,这个命令可以将你的公钥复制到远程主机,因此你照样可以实现无密码SSH登录。 18.17、实时SSH网络吞吐量测试 yes | pv | ssh $host “cat > /dev/null” 通过SSH连接到主机,显示实时的传输速度,将所有传输数据指向/dev/null,需要先安装pv。 如果是Debian: apt-get install pv 如果是Fedora: yum install pv (可能需要启用额外的软件仓库)。 18.18、如果建立一个可以重新连接的远程GNU screen ssh -t user@some.domain.com /usr/bin/screen –xRR 人们总是喜欢在一个文本终端中打开许多shell,如果会话突然中断,或你按下了“Ctrl-a d”,远程主机上的shell不会受到丝毫影响,你可以重新连接,其它有用的screen命令有“Ctrl-a c”(打开新的shell)和“Ctrl-a a”(在shell之间来回切换),请访问http://aperiodic.net/screen/quick_reference阅读更多关于screen命令的快速参考。 18.19、继续SCP大文件 rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file 它可以恢复失败的rsync命令,当你通过VPN传输大文件,如备份的数据库时这个命令非常有用,需要在两边的主机上安装rsync。 rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file local -> remote 或 rsync –partial –progress –rsh=ssh $user@$host:$remote_file $destination_file remote -> local 18.23、使用cstream控制带宽 tar -cj /backup | cstream -t 777k | ssh host ‘tar -xj -C /backup’ 使用bzip压缩文件夹,然后以777k bit/s速率向远程主机传输。Cstream还有更多的功能,请访问http://www.cons.org/cracauer/cstream.html#usage了解详情,例如: echo w00t, i’m 733+ | cstream -b1 -t2 18.24、一步将SSH公钥传输到另一台机器 ssh-keygen; ssh-copy-id user@host; ssh user@host 这个命令组合允许你无密码SSH登录,注意,如果在本地机器的~/.ssh目录下已经有一个SSH密钥对,ssh-keygen命令生成的新密钥可能会覆盖它们,ssh-copy-id将密钥复制到远程主机,并追加到远程账号的~/.ssh/authorized_keys文件中,使用SSH连接时,如果你没有使用密钥口令,调用ssh user@host后不久就会显示远程sh
19 gcc 在编译线程 pthread_create 需要加的参数
即,gcc pthreadTest.c -lpthread -o pthreadTest
编译成功!20 建立设备节点
mknod /dev/hda2 b 3 2 这个是块设备节点(硬盘), 字符设备节点为 c
21 deb包,安装方法
1.一般在此类发行版中可以直接双击安装。 2.手动安装。如果您喜欢使用终端,您需要管理员权限来安装一个 .deb 文件。 打开终端后,输入: sudo dpkg -i package_file.deb 要卸载一个 .deb 文件,在您的软件包管理器中取消选中它。或者在终端中,输入: sudo dpkg -r package_name —————— 例如安装QQ,文件名为linuxqq_v1.0-preview3_i386.deb 可运行: sudo dpkg -i linuxqq_v1.0-preview3_i386.deb22 , Linux 查看被占有的端口号,命令
netstat -nlt
fdisk -l 查看分区 列表23, fdisk 磁盘命令
fdisk /dev/sdb 操作分区
参数
m 帮助
n 分区 p 主分区 e 扩展分区
w 写入
d 删除 分区
24. nm 查看 lib 信息
nm [option(s)] [file(s)]
有用的options:
- -A 在每个符号信息的前面打印所在对象文件名称;
- -C 输出demangle过了的符号名称;
- -D 打印动态符号;
- -l 使用对象文件中的调试信息打印出所在源文件及行号;
- -n 按照地址/符号值来排序;
- -u 打印出那些未定义的符号;
常见的符号类型:
- A 该符号的值在今后的链接中将不再改变;
- B 该符号放在BSS段中,通常是那些未初始化的全局变量;
- D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
- T 该符号放在代码段中,通常是那些全局非静态函数;
- U 该符号未定义过,需要自其他对象文件中链接进来;
- W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。
注意几点:
- -C 总是适用于c++编译出来的对象文件。还记得c++中有重载么?为了区分重载函数,c++编译器会将函数返回值/参数等信息附加到函数名称中去形成一个mangle过的符号,那用这个选项列出符号的时候,做一个逆操作,输出那些原始的、我们可理解的符号名称。
- 使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项,见 Linux:Gcc。
- 使用nm前,最好先用Linux:File查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。
举例
更详细的内容见man page。这里举例说明:
-
nm -u hello.o
- 显示hello.o 中的未定义符号,需要和其他对象文件进行链接.
-
nm -A /usr/lib/* 2>/dev/null | grep "T memset"
在 /usr/lib/ 目录下找出哪个库文件定义了memset函数.