简洁的想法

仁爱、喜乐、和平、忍耐、恩慈、良善、信实、温柔、节制

来几个Linux命令

| Comments

1,常用:
UbuntuSkills
#uname -a
#lshw 察看硬件信息(要安装)
#cat /etc/issue
#cat /proc/cpuinfo
#lsb_release -a 查看Ubuntu版本
#du -hs /home/* | sort -nr 察看目录大小 -s 仅显示总计 -h  以K、M、G为单位

#find  /somewhere/ -name some.file找出文件
#find . -name some.file当前目录下找出文件 More…
#find . -name \* -type f -print | xargs grep “some text” \*所有文件,  -type f 普通文件 d 目录

#sof | grep deleted 找出已经被打开,但被删除的文件
#free -m 察看内存使用
#df 察看硬盘使用
#ls -d */ | wc -l 察看当前目录下子目录的个数
#lastlog last 察看最后登录的用户
#export PATH=$PATH:/usr/mysql/bin
#chmod ug+w,o-x file u=属主,g=属组,o=其它用户

apache2ctl -l 查看apache工作模式
pgrep apache2|wc -l 查看当前连接数
ps aux|grep -v grep|awk ‘/apache2/{sum+=$6;n++};END{print sum/n}’ 计算httpd占用内存的平均数
dpkg -l | grep ‘^ii’ 查看已经安装了的软件

find ./ -name “*.php” | xargs -n 1 sed -i -e ‘s/aaa/bbb/g’ 把aaa换成bbb

2,查看SuSE版本:# cat /etc/SuSE-release

3,查看进程,资源 top

4,kill进程

1
kill -9 进程号

常与ps连用
1
ps aux | grep firefox

5,nohup
我一般用ssh登录linux服务器,如果要用服务器下载某个文件,我就一直要使终端窗口保持打开状态,这是不合理的。好在用nohup帮忙,它可以让程序在后台运行,就算你关掉终端窗口也没关系。例如,我想下载MiCTeX的字体:

1
nohup wget ftp://user:user@219.153.35.69/MiCTeX/MiCTeX-GBKfonts.exe

这个命令运行后,屏幕输出:
1
ServerName:~ # appending output to nohup.out

鼠标这时一动不动,直到文件下载完毕前你再也不能输出任何命令了。不过在关掉这个窗口后,你可以观察到MiCTeX-GBKfonts.exe的文件大小一直在增加。

如果在命令最后加上&,就可以让这个下载命令彻底在后台运行,但我实验的结果表明,加了&以后,如果关掉终端,进程也同时关掉了:

1
nohup wget ftp://user:user@219.153.35.69/MiCTeX/MiCTeX-GBKfonts.exe &

6,screen
我其实是把文件下载到 /home/zhang/temp/ 里面,当我N久以后再联上服务器,想看看文件下载情况怎样,那又要 cd 老半天,这时候 screen 就是好帮手了。

顾名思义 screen 就是屏幕,这个命令可以让你有N个屏幕。那我先建一个名字叫做zhang的Screen,用来下载文件:

1
2
3
screen -S zhang
cd /home/zhang/temp
nohup wget ftp://user:user@219.153.35.69/MiCTeX/MiCTeX-GBKfonts.exe

然后按 Ctrl + a 再按 d。这时系统提示 : [detached] 表示离开这个屏幕了。

我再建一个名字叫做zhangvim的Screen,用来编一个vi文档:

1
2
screen -S zhangvim
vi test

编了几行字,我又想看看文件下载得如何了(我是个急性子),那像前面一样,按 Ctrl + a 再按 d。这时系统提示 : [detached] 离开zhangvim这个屏幕。接下来连上屏幕zhang:
1
screen -r zhang

这时,你看到的屏幕和你原来离开zhang时一模一样。让我很开心的是,就算我把断掉ssh,再连上Server的时候,还能找回这个屏幕。

如果你有兴趣,你可以开n个Screen,还可以在一个Screen里面再嵌套一个。如果多到你都不记得要连哪个了,那加个参数看一看:

1
2
3
4
5
6
7
8
ServerName:~ # screen -ls
There are screens on:
25108.zhang     (Detached)
25130.zhangvim  (Attached)
25147.zhangpy   (Attached)
25183.zhangLaTex        (Attached)
25235.Zhangwget (Attached)
6 Sockets in /var/run/screens/S-root.

是不是有点太多了,有的联着的,有的是断开的,但是没关系,可以把它们一个一个关掉:
如果是(Detached),用这个命令:screen -r zhang
如果是(Attached),用这个命令:screen -x zhangvim
连上后,输入exit就可退出这个Screen。系统提示:[screen is terminating]

好了,足够清楚也足够啰嗦了。如果还想进阶请自己查man。

7,wget
虽然讯雷是好样的,但我还是希望介绍一位新朋友给大家:wget
我想下载MiCTeX目录下的所有文件,那个服务器还限线程,我又没那么多时间开着台式机拖文件,那ssh连上服务器,用wget是再好不过了。把上面的命令也用上:)

1
2
3
screen -S ZhangMiCTeX
cd /home/zhang/temp
nohup wget -c -r -nH --cut-dirs=1 ftp://user:user@219.153.35.69/MiCTeX/

按 Ctrl + a 再按 d,离开这个屏幕,再把ssh断开,睡一觉醒来,那些文件就会乖乖地躺在我的文件夹里了。
稍微解释一下wget参数:
1
-c
resume getting a partially-downloaded file. 断点续传

1
-r
specify recursive download.下载目录下所有文件,包括子目录

1
-nH
don’t create host directories.不要创建一个服务器名称的文件夹,通常这个文件夹用来存放下载的文件。

1
--cut-dirs=NUMBER
ignore NUMBER remote directory components.上面命令中出现的目录MiCTeX也cut掉。NUMBER 表示去掉几层目录。

这样一来,下载的文件都会放在 /home/zhang/temp 文件夹里面。如果没有参数

1
-nH --cut-dirs=1
的话,文件会放在/home/zhang/temp/219.153.35.69/MiCTeX/ 文件夹里面。

再来个例子:

1
nohup wget -c  --ftp-user=USER1 --ftp-password="a&&b.c" --no-passive-ftp ftp://ftp.neten.de/abc.rar &

简单解释:
用户:
1
--ftp-user=USER1

密码:
1
--ftp-password="a&&b.c"
(之所以加",是因为密码含有特殊字符&)
非PASV模式:
1
--no-passive-ftp

wget的man会很长,大家还是自己研究吧,这样印象会深点。

8,ps

使用方式:

1
ps [options] [--help]

说明:显示瞬间行程 (process) 的动态
参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程

au(x) 输出格式 :

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令

9,md5sum

输入文件的md5码:

1
2
md5sum file > file.md5
md5sum file >> file.md5

注:>和>>的区别在于:
>只产生当前文件的md5码 file.md5,
>>则将输出的md5码附加到file.md5文件的后面。

也可以把多个文件的md5码输出到一个md5文件中,这要使用通配符*,比如某目录下有几个iso文件,要把这几个iso文件的摘要输出到iso.md5文件中,命令如下:

1
md5sum *.iso > iso.md5

使用md5报文摘要验证文件,方法有二:
(1)把文件file.iso和file.md5文件放在同一个目录下,然后用如下命令进行验证:md5sum -c file.md5然后如果验证成功,则会输出file.iso:OK
(2)比如下载了文件file,然后运行下面的命令:md5sum file.iso
命令会输出一个md5码,然后把这个md5码直接与file.md5中的内容比较,如果一样,就说明验证正确。

另外,在linux下还有一个md5验证的图形界面,http://www.md5summer.org

10,删除巨量文件

1
find 0*.php|xargs rm

11,Ubuntu的软件安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo apt-get install packagename
sudo apt-get remove packagename #(保留配置文档)
sudo apt-get --purge remove packagename #(删除配置文档)
sudo dpkg --force-all --purge packagename #(有些软件很难卸载,而且还阻止了别的软件的应用,就能够用这个,但是有点冒险。)
sudo apt-get clean #(会把安装的软件的备份删除,但是这样不会影响软件的使用。)
sudo apt-get upgrade #(更新任何已安装的软件包)
sudo apt-get dist-upgrade #(将系统升级到新版本)
sudo apt-cache search string
sudo apt-cache showpkg firefox #(显示软件包信息。)
sudo apt-get autoclean #(清除那些已卸载的软件包的.deb文档。)
sudo dpkg -i -force-all linuxqq.deb #(强制安装软件包)
sudo dpkg -r linuxqq #(卸载软件包)

sudo add-apt-repository ppa:showard314/ppa #ppa
sudo apt-get update
sudo apt-get install librecad

12,Ubuntu改root密码

1
sudo passwd root

13,查看Linux文件夹大小
统计总数大小

1
2
du -sh folder/
du -sm * | sort -n #统计当前目录大小 并安大小 排序

14,查找文件

1
2
find . -name "*.conf"
find . -size +1000000c #文件大于1M

更多…

15,traceroute
windows下tracert的对应命令

16,批量改名
把 wort* 文件加一个前缀 abc_

1
2
3
4
for files in `ls wort*`
do
mv $files `echo abc_${files}`
done

16,排错
Unable to open env file: /etc/default/locale: No such file or directory
请运行

1
sudo locale-gen en_US.UTF-8

17,硬盘测速

1
2
sudo fdisk -l
sudo hdparm -Tt /dev/sdb

这个命令还可以把硬盘休眠
1
sudo hdparm -Y /dev/sdb

17,SSH建立代理

1
ssh -qTfnN -p 12345 user@123.234.123.234 -D 127.0.0.1:7070

q : be very quite, we are acting only as a tunnel.
T : Do not allocate a pseudo tty, we are only acting a tunnel.
f : move the ssh process to background, as we don’t want to interact with this ssh session directly.
N : Do not execute remote command.
n : redirect standard input to /dev/null.

18,ps查找进程

1
ps aux | grep program_filter_word

ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
ps -e 此参数的效果和指定"A"参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信号的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
ps u 以用户为主的格式来显示程序状况。
ps x 显示所有程序,不以终端机来区分。
最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。

19,Debian/Ubuntu下如何查看已经安装了哪些软件包?
如果安装了Synaptic软件包管理器直接打开管理器就可以看见(不过不是默认安装的)
apt-get也是用dpkg的包装,直接使用dpkg -l就可以查看已经安装的软件包

1
dpkg -l | grep '^ii'

对于server版,推荐使用aptitude来查看、安装、删除deb包。
1
sudo apt-get install aptitude

然后执行
1
sudo aptitude

进入管理界面即可
已安装的deb包默认放在
/var/cache/apt/archives/下

20,用户&用户组

1
2
3
adduser neten
groupadd
groupdel

查看所有用户

1
cat /etc/passwd

第一字段:用户名(也被称为登录名);
第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;
第三字段:UID ;
第四字段:GID;
第五字段:用户名全称,这是可选的,可以不设置;
第六字段:用户的家目录所在位置;
第七字段:用户所用SHELL 的类型;
例:
neten:x:1001:1001:neten,,,:/home/neten:/bin/bash

查看用户组

1
cat /etc/group

第一字段:用户组名称;
第二字段:用户组密码;
第三字段:GID
第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;
例:
neten:x:1001:neten

usermod:
-g initial_group 改变用户的默认用户组。
-G group,[…] 把用户规入很多组, 组名用逗号分开。如果用户现在的用户组不再此列,则将用户由该用户组中移除。
neten默认组为neten.
-aG append group,[…] 不管原来用户属于多少个组, 再加上一些组.

例:
1, 默认neten属于neten组:

1
2
id neten
uid=1001(neten) gid=1001(neten) groups=1001(neten)

2, 把用户加入cdrom组:

1
2
3
usermod -G cdrom neten
id neten
uid=1001(neten) gid=1001(neten) groups=1001(neten), 24(cdrom)

3, 把用户加入www-data组:

1
2
3
usermod -aG www-data neten
id neten
uid=1001(neten) gid=1001(neten) groups=1001(neten), 24(cdrom), 33(www-data)

4, 再把用户加入mysql组:

1
2
3
usermod -aG mysql neten
id neten
uid=1001(neten) gid=1001(neten) groups=1001(neten), 24(cdrom), 33(www-data), 125(mysql)

5, 上面三个命令加起来可以用下面一个命令实现:

1
usermod -G cdrom, www-data, mysql neten

6, 也可以用下面两条命令实现:

1
2
usermod -G cdrom neten
usermod -aG www-data, mysql neten

7, 要回到原始用户组:

1
usermod -G neten neten

8, 我现在把neten的原始组换成www-data, 原来的原始组地位就下降了:

1
2
3
usermod -g www-data neten
id neten
id=1001(neten) gid=1001(neten) groups=33(www-data), 1001(neten)

9, 我再加入一个组:

1
2
3
usermod -aG cdrom neten
id neten
uid=1001(neten) gid=1001(neten) groups=33(www-data), 1001(neten), 24(cdrom)

10, 变回上一步的样子:

1
2
3
usermod -G neten neten
id neten
id=1001(neten) gid=1001(neten) groups=33(www-data), 1001(neten)

11, 如果要把neten变回原始组:

1
2
3
usermod -g neten neten
id neten
id=1001(neten) gid=1001(neten) groups=1001(neten)

这一步和第8步不同, neten本来就是原始组, 现在变回去的话, 那www-data就不会再附加在后面了.

顺便记录一下, 第一个默认sudo用户的id

1
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),20(dialout),24(cdrom),46(plugdev),109(lpadmin),110(sambashare),111(admin)

21,mount新磁盘
首先找到新磁盘:

1
2
3
4
5
6
7
8
9
10
11
12
sudo fdisk -l
Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xff81ff81

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9327    74919096   83  Linux
/dev/sda2            9328        9729     3229065    5  Extended
/dev/sda5            9328        9729     3229033+  82  Linux swap / Solaris

然后mount它

1
sudo mount /dev/sda1 /mnt/olddisk

22,查看硬件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#CPU
lscpu
cat /proc/cpuinfo

#内存
cat /proc/meminfo

#IO端口
cat /proc/ioports

#交换分区
cat /proc/swaps

#中断信息
cat /proc/interrupts

#磁盘分区
fdisk -l
cat /proc/partitions

#磁盘参数
hdparm -i /dev/sda

#磁盘分区信息
df -h

#USB
lsusb
cat /proc/bus/usb/devices

#输入设备
cat /proc/bus/input/devices

#PCI设备
lspci
cat /proc/bus/pci/devices

#系统负载
cat /proc/loadavg

#查看开机检查的硬件,可以使用grep过虑:eth,cpu,mem,pci,usb,vga,sda……
dmesg
cat /var/log/demsg

#报告虚拟内存统计信息
vmstat

#读取系统DMI表来显示硬件和BIOS信息。
dmidecode

#当前加载的驱动
lsmod

#查看系统负载
uptime

23,mount ftp & iso

1
2
3
sudo apt-get install curlftpfs
curlftpfs user:pass@ftp.yourdomain.com ~/ftpfolder/
sudo umount ~/ftpfolder/

1
sudo mount -o loop R2011a_UNIX_OSX.iso /media/matlab

Comments