Linux指令学习 — 不定期更新

  学习驱动开发时:常用的命令,每次使用时候就来更新,便于查询。

  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


2、查看文件安装路径:

由于软件安装的地方不止一个地方,所有先说查看文件安装的所有路径(地址)。

这里以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 小时)

  1. find /var/log/ -mtime +3 -type f -print  

找出 3 天內被改动过的文件 (2011/09/05 12:00 ~ 2011/09/08 12:00 內的文件) (0 ~ 72 小时內)

  1. find /var/log/ -mtime -3 -type f -print  

找出前第 3 天被改动过的文件 (2011/09/04 12:00 ~ 2011/09/05 12:00 內的文件) (72 ~ 96 小时)

  1. find /var/log/ -mtime 3 -type f -print  

找出第 3 天被改动过的文件 (也可以这样写)

  1. find /var/log/ -mtime +2 -mtime -4 -type f -print  
本文地址:http://www.92csz.com/11/921.html

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 输入法

安装中文语言支持包
sudo apt-get install language-pack-zh language-support-zh
1. set命令可以显示出当前shell下所有全局参量定义及其值;安装 fcitx
  sudo apt-get install fcitx
  . 配置默认输入法为 fcitx

  im-switch -s fcitx  // 注意无须加 sudo
重启 x-window

linux下查找字符串的命令

8 查找并删除当前目录下小文件:
find . -type f -size -10k -exec rm {} ;
说明:
-type f 查找文件
-size -10k,
小于10k的。"+"是表示要求系统只列出大于指定大小的文件,而使用"-"则表示要求系统列出小于指定大小的文件。
9 遍历文件夹grep一个字符串
find . -name "*c" | xargs grep "strings"
在当前文件夹下所有c文件中查找字符串“string”  
10. 在某目录下文件中查找某字符串
grep -r youcode dir
例如:查找home下文件中查找hello
grep -r hello /home
例如:在当前所有目录下文件中查找hello,不区分大小写
grep -ir hello .
从文件内容查寻匹配指定字符串的行:
  $ grep "被查寻的字符串" 文件名
从文件内容查寻与正则表达式匹配的行:
  $ grep –e “正则表达式” 文件名
查寻时不区分大小写:
  $ grep –i "被查寻的字符串" 文件名
查寻匹配的行数   $ grep -c "被查寻的字符串" 文件名
从文件内容查寻不匹配指定字符串的行:
  $ grep –v "被查寻的字符串" 文件名
从根目录开始查寻所有扩展名为.log的文本文件,并找出包罗”ERROR”的行  11 Linux 中创建一个连接目录、软连接
ln /var a(字符链接)。硬链接。
ln -s /var a (字符链接)。软连接。
硬链接的特点:不能跨文件系统,不能跨分区。占用系统资源。与源文件同步。
软连接:可以存放于任何文件系统。
综合利弊,我们一般采用软链接。

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.deb

22 , Linux 查看被占有的端口号,命令

netstat -nlt


23, fdisk 磁盘命令
fdisk -l 查看分区 列表


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函数. 





阅读更多
个人分类: Linux学习
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭