Linux那些冷僻但实用的命令
来源:互联网 发布:linux 运行脚本 编辑:程序博客网 时间:2024/05/17 02:03
lsblk命令
"lsblk"就是列出块设备。除了RAM外,以标准的树状输出格式,整齐地显示块设备。
01
root@tecmint:~
# lsblk
02
03
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
04
sda 8:0 0 232.9G 0 disk
05
├─sda1 8:1 0 46.6G 0 part /
06
├─sda2 8:2 0 1K 0 part
07
├─sda5 8:5 0 190M 0 part /boot
08
├─sda6 8:6 0 3.7G 0 part [SWAP]
09
├─sda7 8:7 0 93.1G 0 part /data
10
└─sda8 8:8 0 89.2G 0 part /personal
11
sr0 11:0 1 1024M 0 rom
“lsblk -l”命令以列表格式显示块设备(而不是树状格式)。
01
root@tecmint:~
# lsblk -l
02
03
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
04
sda 8:0 0 232.9G 0 disk
05
sda1 8:1 0 46.6G 0 part /
06
sda2 8:2 0 1K 0 part
07
sda5 8:5 0 190M 0 part /boot
08
sda6 8:6 0 3.7G 0 part [SWAP]
09
sda7 8:7 0 93.1G 0 part /data
10
sda8 8:8 0 89.2G 0 part /personal
11
sr0 11:0 1 1024M 0 rom
注意:lsblk是最有用和最简单的方式来了解新插入的USB设备的名字,特别是当你在终端上处理磁盘/块设备时。
md5sum命令
“md5sum”就是计算和检验MD5信息签名。md5 checksum(通常叫做哈希)使用匹配或者验证文件的文件的完整性,因为文件可能因为传输错误,磁盘错误或者无恶意的干扰等原因而发生改变。
1
root@tecmint:~
# md5sum teamviewer_linux.deb
2
3
47790ed345a7b7970fc1f2ac50c97002 teamviewer_linux.deb
注意:用户可以使用官方提供的和md5sum生成签名信息匹对以此检测文件是否改变。Md5sum没有sha1sum安全,这点我们稍后讨论。
dd命令
“dd”命令代表了转换和复制文件。可以用来转换和复制文件,大多数时间是用来复制iso文件(或任何其它文件)到一个usb设备(或任何其它地方)中去,所以可以用来制作USB启动器。
1
root@tecmint:~
# dd if=/home/user/Downloads/debian.iso of=/dev/sdb1 bs=512M; sync
注意:在上面的例子中,usb设备就是sdb1(你应该使用lsblk命令验证它,否则你会重写你的磁盘或者系统),请慎重使用磁盘的名,切忌。
dd 命令在执行中会根据文件的大小和类型 以及 usb设备的读写速度,消耗几秒到几分钟不等。
uname命令
"uname"命令就是Unix Name的简写。显示机器名,操作系统和内核的详细信息。
1
root@tecmint:~
# uname -a
2
3
Linux tecmint 3.8.0-19-generic
#30-Ubuntu SMP Wed May 1 16:36:13 UTC 2013 i686 i686 i686 GNU/Linux
注意: uname显示内核类别, uname -a显示详细信息。上面的输出详细说明了uname -a
- “Linux“: 机器的内核名
- “tecmint“: 机器的节点名
- “3.8.0-19-generic“: 内核发布版本
- “#30-Ubuntu SMP“: 内核版本
- “i686“: 处理器架构
- “GNU/Linux“: 操作系统名
history命令
“history”命令就是历史记录。它显示了在终端中所执行过的所有命令的历史。
01
root@tecmint:~
# history
02
03
1
sudo
add-apt-repository ppa:tualatrix/ppa
04
2
sudo
apt-get update
05
3
sudo
apt-get
install
ubuntu-tweak
06
4
sudo
add-apt-repository ppa:diesch/testing
07
5
sudo
apt-get update
08
6
sudo
apt-get
install
indicator-privacy
09
7
sudo
add-apt-repository ppa:atareao/atareao
10
8
sudo
apt-get update
11
9
sudo
apt-get
install
my-weather-indicator
12
10
pwd
13
11
cd
&&
sudo
cp
-r unity/6 /usr/share/unity/
14
12
cd
/usr/share/unity/icons/
15
13
cd
/usr/share/unity
注意:按住“CTRL + R”就可以搜索已经执行过的命令,它可以在你写命令时自动补全。
1
(reverse-i-search)`
if
':
ifconfig
cmp命令
比较两个任意类型的文件并将结果输出至标准输出。如果两个文件相同, ‘cmp‘默认返回0;如果不同,将显示不同的字节数和第一处不同的位置。
以下面两个文件为例:
file1.txt
1
root@tecmint:~
# cat file1.txt
2
3
Hi My name is Tecmint
file2.txt
1
root@tecmint:~
# cat file2.txt
2
3
Hi My name is tecmint [dot] com
比较一下这两个文件,看看命令的输出。
1
root@tecmint:~
# cmp file1.txt file2.txt
2
3
file1.txt file2.txt differ: byte 15, line 1
service命令
‘service‘命令控制服务的启动、停止和重启,它让你能够不重启整个系统就可以让配置生效以开启、停止或者重启某个服务。
在Ubuntu上启动apache2 server:
1
root@tecmint:~
# service apache2 start
2
3
* Starting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1
for
ServerName
4
httpd (pid 1285) already running [ OK ]
重启apache2 server:
1
root@tecmint:~
# service apache2 restart
2
3
* Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1
for
ServerName
4
... waiting .apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1
for
ServerName [ OK ]
停止apache2 server:
1
root@tecmint:~
# service apache2 stop
2
3
* Stopping web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1
for
ServerName
4
... waiting [ OK ]
注意:要想使用service命令,进程的脚本必须放在‘/etc/init.d‘,并且路径必须在指定的位置。
如果要运行“service apache2 start”实际上实在执行“service /etc/init.d/apache2 start”.
sudo !!命令
以管理员权限运行最后一个命令
1
$ apt-get update
2
3
E: Could not
open
lock
file
/var/lib/apt/lists/lock -
open
(13: Permission denied)
4
E: Unable to lock directory /var/lib/apt/lists/
5
E: Could not
open
lock
file
/var/lib/dpkg/lock -
open
(13: Permission denied)
6
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
1
$
sudo
!!
2
3
sudo
apt-get update
4
[
sudo
] password
for
server:
5
…
6
..
7
Fetched 474 kB
in
16s (28.0 kB/s)
8
Reading package lists... Done
9
server@localhost:~$
python命令
下面的命令生产一个通过HTTP显示文件夹结构树的简单网页,可以通过浏览器在端口8000访问,直到发出中断信号。
1
# python -m SimpleHTTPServer
Ctrl+x+e命令
这个命令对于管理员和开发者非常有用。为了使每天的任务自动化,管理员需要通过输入vi、vim、nano等打开编辑器。
仅仅从命令行快速的敲击“Ctrl-x-e”,就可以在编辑器中开始工作了。
nl命令
“nl命令”添加文件的行数。一个叫做'one.txt'的文件,其每行的内容是(Fedora、Debian、Arch、Slack和Suse),给每行添加行号。首先使用cat命令显示“one.txt”的文件内容。
1
# cat one.txt
2
3
fedora
4
debian
5
arch
6
slack
7
suse
1
# nl one.txt
2
3
1 fedora
4
2 debian
5
3 arch
6
4 slack
shuf命令
“Shut”命令随机从一个文件或文件夹中选择行/文件/文件夹。首先使用ls命令来显示文件夹的内容。
1
# ls
2
3
Desktop Documents Downloads Music Pictures Public Templates Videos
01
# ls | shuf (shuffle Input)
02
03
Music
04
Documents
05
Templates
06
Pictures
07
Public
08
Desktop
09
Downloads
10
Videos
1
# ls | shuf -n1 (pick on random selection)
2
3
Public
1
# ls | shuf -n1
2
3
Videos
1
# ls | shuf -n1
2
3
Templates
1
# ls | shuf -n1
2
3
Downloads
ss命令
“ss”表示socket统计。这个命令调查socket,显示类似netstat命令的信息。它可以比其他工具显示更多的TCP和状态信息。
1
# ss
2
3
State Recv-Q Send-Q Local Address:Port Peer Address:Port
4
ESTAB 0 0 192.168.1.198:41250 *.*.*.*:http
5
CLOSE-WAIT 1 0 127.0.0.1:8000 127.0.0.1:41393
6
ESTAB 0 0 192.168.1.198:36239 *.*.*.*:http
7
ESTAB 310 0 127.0.0.1:8000 127.0.0.1:41384
8
ESTAB 0 0 192.168.1.198:41002 *.*.*.*:http
9
ESTAB 0 0 127.0.0.1:41384 127.0.0.1:8000
last命令
“last”命令显示的是上次登录用户的历史信息。这个命令通过搜索文件“/var/log/wtmp”,显示logged-in和logged-out及其tty‘s的用户列表。
01
# last
02
server pts/0 :0 Tue Oct 22 12:03 still logged
in
03
server tty8 :0 Tue Oct 22 12:02 still logged
in
04
…
05
...
06
(unknown tty8 :0 Tue Oct 22 12:02 - 12:02 (00:00)
07
server pts/0 :0 Tue Oct 22 10:33 - 12:02 (01:29)
08
server tty7 :0 Tue Oct 22 10:05 - 12:02 (01:56)
09
(unknown tty7 :0 Tue Oct 22 10:04 - 10:05 (00:00)
10
reboot system boot 3.2.0-4-686-pae Tue Oct 22 10:04 - 12:44 (02:39)
11
12
wtmp begins Fri Oct 4 14:43:17 2007
tree命令
以树式的格式得到当前文件夹的结构。
1
# tree
01
.
02
|-- Desktop
03
|-- Documents
04
| `-- 37.odt
05
|-- Downloads
06
| |-- attachments.zip
07
08
| |-- ttf-indic-fonts_0.5.11_all.deb
09
| |-- ttf-indic-fonts_1.1_all.deb
10
| `-- wheezy-nv-
install
.sh
11
|-- Music
12
|-- Pictures
13
| |-- Screenshot from 2013-10-22 12:03:49.png
14
| `-- Screenshot from 2013-10-22 12:12:38.png
15
|-- Public
16
|-- Templates
17
`-- Videos
18
19
10 directories, 23 files
pstree
这个命令显示当前运行的所有进程及其相关的子进程,输出的是类似‘tree’命令的树状格式。
01
# pstree
02
init─┬─NetworkManager───{NetworkManager}
03
├─accounts-daemon───{accounts-daemon}
04
├─acpi_fakekeyd
05
├─acpid
06
├─apache2───10*[apache2]
07
├─at-spi-bus-laun───2*[{at-spi-bus-laun}]
08
├─atd
09
├─avahi-daemon───avahi-daemon
10
├─bluetoothd
11
├─colord───{colord}
12
├─colord-sane───2*[{colord-sane}]
13
├─console-kit-dae───64*[{console-kit-dae}]
14
├─
cron
15
├─cupsd
16
├─2*[dbus-daemon]
17
├─dbus-launch
18
├─dconf-service───2*[{dconf-service}]
19
├─dovecot─┬─anvil
20
│ ├─config
21
│ └─log
22
├─exim4
23
├─gconfd-2
24
├─gdm3─┬─gdm-simple-slav─┬─Xorg
25
│ │ ├─gdm-session-wor─┬─x-session-manag─┬─evolution-a+
26
│ │ │ │ ├─gdu-notific+
27
│ │ │ │ ├─gnome-scree+
28
│ │ │ │ ├─gnome-setti+
29
│ │ │ │ ├─gnome-shell+++
30
│ │ │ │ ├─nm-applet──+++
31
│ │ │ │ ├─
ssh
-agent
32
│ │ │ │ ├─tracker-min+
33
│ │ │ │ ├─tracker-sto+
34
│ │ │ │ └─3*[{x-sessi+
35
│ │ │ └─2*[{gdm-session-wor}]
36
│ │ └─{gdm-simple-slav}
37
│ └─{gdm3}
38
├─6*[getty]
39
├─gnome-keyring-d───9*[{gnome-keyring-d}]
40
├─gnome-shell-
cal
───2*[{gnome-shell-
cal
}]
41
├─goa-daemon───{goa-daemon}
42
├─gsd-printer───{gsd-printer}
43
├─gvfs-afc-volume───{gvfs-afc-volume}
检查远程端口是否对bash开放:
echo >/dev/tcp/8.8.8.8/53 && echo "open"
让进程转入后台:
Ctrl + z
将进程转到前台:
fg
产生随机的十六进制数,其中n是字符数:
openssl rand -hex n
在当前shell里执行一个文件里的命令:
source /home/user/file.name
截取前5个字符:
${variable:0:5}
SSH debug 模式:
ssh -vvv user@ip_address
SSH with pem key:
ssh user@ip_address -i key.pem
用wget抓取完整的网站目录结构,存放到本地目录中:
wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs
一次创建多个目录:
mkdir -p /home/user/{test,test1,test2}
列出包括子进程的进程树:
ps axwef
创建 war 文件:
jar -cvf name.war file
测试硬盘写入速度:
dd if=/dev/zero of=/tmp/output.img bs=8k count=256k; rm -rf /tmp/output.img
测试硬盘读取速度:
hdparm -Tt /dev/sda
获取文本的md5 hash:
echo -n "text" | md5sum
检查xml格式:
xmllint --noout file.xml
将tar.gz提取到新目录里:
tar zxvf package.tar.gz -C new_dir
使用curl获取HTTP头信息:
curl -I http://www.example.com
修改文件或目录的时间戳(YYMMDDhhmm):
touch -t 0712250000 file
用wget命令执行ftp下载:
wget -m ftp://username:password@hostname
生成随机密码(例子里是16个字符长):
LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;
快速备份一个文件:
cp some_file_name{,.bkp}
访问Windows共享目录:
smbclient -U "DOMAIN\user" //dc.domain.com/share/test/dir
执行历史记录里的命令(这里是第100行):
!100
解压:
unzip package_name.zip -d dir_name
输入多行文字(CTRL + d 退出):
cat > test.txt
创建空文件或清空一个现有文件:
> test.txt
与Ubuntu NTP server同步时间:
ntpdate ntp.ubuntu.com
用netstat显示所有tcp4监听端口:
netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*'
qcow2镜像文件转换:
qemu-img convert -f qcow2 -O raw precise-server-cloudimg-amd64-disk1.img \ precise-server-cloudimg-amd64-disk1.raw
重复运行文件,显示其输出(缺省是2秒一次):
watch ps -ef
所有用户列表:
getent passwd
Mount root in read/write mode:
mount -o remount,rw /
挂载一个目录(这是不能使用链接的情况):
mount --bind /source /destination
动态更新DNS server:
nsupdate < <EOFupdate add $HOST 86400 A $IPsendEOF
递归grep所有目录:
grep -r "some_text" /path/to/dir
列出前10个最大的文件:
lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB "$9 }' | sort -n -u | tail
显示剩余内存(MB):
free -m | grep cache | awk '/[0-9]/{ print $4" MB" }'
打开Vim并跳到文件末:
vim + some_file_name
Git 克隆指定分支(master):
git clone git@github.com:name/app.git -b master
Git 切换到其它分支(develop):
git checkout develop
Git 删除分支(myfeature):
git branch -d myfeature
Git 删除远程分支
git push origin :branchName
Git 将新分支推送到远程服务器:
git push -u origin mynewfeature
打印历史记录中最后一次cat命令:
!cat:p
运行历史记录里最后一次cat命令:
!cat
找出/home/user下所有空子目录:
find /home/user -maxdepth 1 -type d -empty
获取test.txt文件中第50-60行内容:
< test.txt sed -n '50,60p'
创建临时RAM文件系统 – ramdisk (先创建/tmpram目录):
mount -t tmpfs tmpfs /tmpram -o size=512m
Grep whole words:
grep -w "name" test.txt
在需要提升权限的情况下往一个文件里追加文本:
echo "some text" | sudo tee -a /path/file
列出所有kill signal参数:
kill -l
在bash历史记录里禁止记录最后一次会话:
kill -9 $$
扫描网络寻找开放的端口:
nmap -p 8081 172.20.0.0/16
设置git email:
git config --global user.email "me@example.com"
To sync with master if you have unpublished commits:
git pull --rebase origin master
将所有文件名中含有”txt”的文件移入/home/user目录:
find -iname "*txt*" -exec mv -v {} /home/user \;
将文件按行并列显示:
paste test.txt test1.txt
shell里的进度条:
pv data.log
使用netcat将数据发送到Graphite server:
echo "hosts.sampleHost 10 `date +%s`" | nc 192.168.200.2 3000
将tabs转换成空格:
expand test.txt > test1.txt
Skip bash history:
< space >cmd
去之前的工作目录:
cd -
拆分大体积的tar.gz文件(每个100MB),然后合并回去:
split –b 100m /path/to/large/archive /path/to/output/filescat files* > archive
使用curl获取HTTP status code:
curl -sL -w "%{http_code}\\n" www.example.com -o /dev/null
设置root密码,强化MySQL安全安装:
/usr/bin/mysql_secure_installation
当Ctrl + c不好使时:
Ctrl + \
获取文件owner:
stat -c %U file.txt
block设备列表:
lsblk -f
找出文件名结尾有空格的文件:
find . -type f -exec egrep -l " +$" {} \;
找出文件名有tab缩进符的文件
find . -type f -exec egrep -l $'\t' {} \;
用”=”打印出横线:
printf '%100s\n' | tr ' ' =
- Linux那些冷僻但实用的命令
- linux不常用但非常实用的命令
- 实用Linux命令,不求最全但求实用-------iptables命令实战
- 一些实用但不为人知的Unix命令
- 一些实用但不为人知的Unix命令
- 一些实用但不为人知的Unix命令
- 一些实用但不为人知的Unix命令
- 实用但不常用的linux命令行
- 实用的LINUX命令
- 实用的linux命令
- matlab 不常见但实用的命令和方法
- 实用Linux命令,不求最全但求实用-------磁盘使用情况du,df
- linux最实用的命令
- 一些实用的Linux命令
- 几个实用的linux命令
- 几个实用的linux命令
- Linux最实用的命令
- linux 网络分析实用的命令
- Android利用广播监听设备安装和卸载应用程序
- 【链表专题】:合并两个有序链表
- SRM 452 DIV 1 总结
- 跟我一起学Python之一:数字和表达式
- MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子
- Linux那些冷僻但实用的命令
- hdu 4578 Transformation 线段树
- NYOJ 242题 计算球的体积
- 十五个只有程序员会乐的事情
- HDU 4634 - BFS + 状态压缩
- ISO文件
- Java菜鸟学习笔记--多线程篇(三):线程死锁
- c++ 动态判断基类指针指向的子类类型(typeid)
- 第四章函数--函数进阶(递归函数)项目3汉诺塔