技术记录栈

记录点滴:java、datebase、linux、spring、javascript、nginx

2018/10/13

Linux常用命令(linux commands list)

ping、cron、nslookup、dd、vi、ls、traceroute、grep、chmod、gzip、wget、netstat、kill、chown、df、find、Netcat、nohup、ifconfig、xargs、mkdir、whoami、fdisk、tail、mount、su、rm、chroot、pwd、comm、 fsck、dpkg、rmdir、dmesg、md5sum、useradd、tee、expr、bzip2、init、unix2dos、crontab、tty、env、du、mv、modprobe、getopt、basename、cp

ping
常用的网络命令,它通常用来测试与目标主机的连通性。

>ping -c 5 www.example.com

vim

命令模式下
缩进 >> 或者<< 取消缩进
键入5>>向右移动5
x 删除当前光标所在处的字符

输入模式下
Ctrl-T缩进当前行
Ctrl-D 取消当前行缩进 

grep

在每个文件中搜索PATTERN

>grep ccc a.txt
>grep -e ccc a.txt

在a.txt中搜索所有ccc字符

>grep -f a.txt b.txt

对两个文件逐行进行匹配

find

搜索文件 

>find . -name *.txt -print

从当前目录开始的所有*.txt文件

>find /mydir1 /mydir2 -size +2000 -atime +30 -print

报告目录/mydir1和/mydir2中大于2,000个块(大约1,000KB)且在30天内未访问的所有文件。

>find /mydir -atime +100 -ok rm {} \;

/mydir目录中100天未访问过的所有文件

>find /mydir \(-mtime +20 -o -atime +40\) -exec ls -l {} \;

显示/mydir目录下20天内从未修改或未在40天内访问的文件列表

>find /prog -type f -size +1000 -print -name core -exec rm {} \;

列出并删除目录/prog中大于500KB以core开头的所有常规文件

xargs

从标准输入构建和执行命令。它将标准输入转换为命令的参数。

>find . -name *.txt|xargs ls
>find . -name *.txt|ls

可以体会一下这两个命令的区别

>echo 'one two three' | xargs mkdir
>ls
>echo 'one two three' | xargs -p touch

标准输入通过管道输出到xargs,并作为mkdir命令的参数,从而创建三个文件夹。

最常见的用法xargs是将其与find命令一起使用,用于find搜索文件或目录,然后用xargs操作结果。
典型的例子是删除文件,更改文件的所有权或移动文件。

>find /tmp -mtime +14 | xargs rm

tee

使用标准流读取输入并将其写入标准输出和一个或多个文件,从而有效地复制其输入。

>cat a.txt | tee b.txt c.txt

既把a.txt中内容输入到b.txt和c.txt中,同时在屏幕上打印

expr

计算表达式并输出结果

>expr length  "abcdef"  "<"  5  "|"  15  -  4  ">"  8

"abcdef" 的长度为6大于5,所以"|"左边返回为0(false),需要计算右边,右边的表达式成立,所以返回1(true)

init

计算机系统启动期间的第一个进程,init是一个守护进程,开启保持运行,直到系统关闭。

>init 0 - 停机(千万不能把initdefault 设置为0 ) 
>init 1 - 单用户模式 
>init 2 - 多用户,没有 NFS 不联网
>init 3 - 完全多用户模式(标准的运行级) 
> init 4 - 没有用到 
> init 5 - X11 (xwindow) 图形化界面模式 
>init 6 - 重新启动 (千万不要把initdefault 设置为6 )

Dos2Unix / Unix2Dos
文本文件格式转换器,将带有DOS或Mac行结尾的文本文件转换为Unix行结尾,反之亦然。

>dos2unix file 将DOS格 式文本文件转换成Unix格式
>dos2unix file1 file2 file3 一次转换多个文件,如果要保持文件时间戳不变加上-k参数

以上转换,都直接在源文件上修改,如果保留源文件,则使用-n参数。


netcat

Netcat是一个很有特色网络实用程序,它使用TCP / IP协议跨网络连接读取和写入数据。可以创建几乎任何类型的连接,并具有几个有趣的内置功能。

>nc -l 1567

通过netcat 命令在1567端口启动了一个tcp 服务器

>nc 127.0.0.1 1567

通过netcat 命令与127.0.0.1主机的1567端口建立tcp连接

>nc -l 1567 < file.txt

通过tcp协议传送文件

>nc -n 127.0.0.1 1567 > file.txt

通过tcp接收文件

>tar -cvf – dir_name | nc -l 1567

把目录通过tar压缩,通过-在控制台重定向,然后使用管道重定向给netcat通过tcp传输出去

>nc -n 127.0.0.1 1567 | tar -xvf -

通过netcat管道下载并打开文件

>nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt

使用mcrypt工具加密数据

>mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1567

使用mcrypt工具解密数据

以上两个命令会提示需要密码,确保两端使用相同的密码

>cat video.avi | nc -l 1567

从一个视频文件中读入并重定向输出到netcat客户端

>nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -

从socket中读入数据并重定向到mplayer

克隆系统目录文件批量安装linux

>dd if=/dev/sda | nc -l 1567

通过dd复制系统所在目录,通过网络发送出去

>nc -n 127.0.0.1 1567 | dd of=/dev/sda

取回目标机器上的系统备份文件,并覆盖本地系统目录

mv

将一个或多个文件或目录从一个地方移动到另一个地方。
如果两个文件名都在同一个文件系统上,则会导致简单的文件重命名; 否则,文件内容将复制到新位置,并删除旧文件。

>mv myfile mynewfilename     重命名.
>mv myfile ~/myfile          # 移动当前目前下的文件到当前用户目录下

cp

用于复制文件和目录,语法:

cp [-fHip] [ - ] sourcefile targetfile
将文件复制到另一个文件

cp [-fHip] [ - ] sourcefile ... targetdirectory
将文件复制到目录

cp -r | -R [-fHip] [ - ] sourcedirectory ... targetdirectory
将目录复制到目录(必须使用-r或-R)

gzip

压缩产生后缀为 .gz 的压缩文件

>gzip a.txt b.txt  分别压缩 a.txt b.txt两个文件,并且不保留原文件
>gzip -rv a.txt
>gzip *%  把当前目录下的每个文件压缩成 .gz 文件
>gzip -l *%  详细文件压缩信息,并不解压
>gzip -dv a.gz 解压a.gz文件并显示压缩比,压缩文件会消失
>gzip -cd a.gz 直接输出解压文件

tar

>tar -cf a.tar a.txt

压缩文件a.txt为a.tar,保留原文件

>tar -xf a.tar

解压文件a.tar

comm

逐行比较已排序的文件

comm [选项]... file1 file2

dd
主要目的是转换和复制文件,也常用于备份操作。

wget

>wget -e robots = off -r -l 1 - no-parent -A .gif ftp://www.example.com/dir/

从网站下载* .gif (如“wget http://www.server.com/dir/*.gif”,仅适用于ftp) 

netstat
 

>netstat -sp tcp
>netstat -sp udp

显示TCP或UDP协议的统计信息

>netstat -aop | grep "pid"

显示由id为pid的进程打开的所有端口

df

列出文件系统的整体磁盘空间使用情况
-k
以1024字节为单位,而不是默认的512字节。
-h
以KB, MB或GB为单位显示

du

查看指定目录或文件所占用磁盘空间大小,和df命令有一些区别的。
du采用单个参数,指定du工作的路径名; 如果未指定,则使用当前目录。

-a,除了默认输出外,还包括每个非目录条目的信息
-c,显示其他参数找到的磁盘使用量的总计
-d #,求和的深度。-d 0在当前级别求和,-d 1在子目录中求和,-d 2在子子目录中等等。
-H,计算命令行上指定的链接引用的磁盘使用情况
-k,显示大小为1024 字节的倍数,而不是512字节
-L,计算链接引用的磁盘使用情况
-s,仅报告当前目录中的使用总和,而不是其中包含的每个目录
-x,仅遍历指定了pathname参数的设备上的文件和目录。

cron

基于时间的作业调度程序,配置文件称为“crontab”,目录分别在:

>/var/spool/cron/

存放每个用户包括root的crontab任务,

>/var/spool/cron/ 创建者用户名

系统管理员制定的维护系统以及其他任务的crontab

>/etc/crontab

任何要执行的crontab文件或脚本

>/etc/cron.d/

例:每天早上6点输出Good morning到/tmp/hi.txt

>0 6 * * * echo "Good morning." >> /tmp/hi.txt

crontab任务配置基本格式:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                   7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command to execute
chmod

改变文件系统对对象(文件和目录)的访问权限

#    Permission    rwx    Binary
7    read, write and execute    rwx    111
6    read and write    rw-    110
5    read and execute    r-x    101
4    read only    r--    100
3    write and execute    -wx    011
2    write only    -w-    010
1    execute only    --x    001
0    none    ---    000

赋予执行权限

>chmod +x 

防止关键文件被修改或删除

>sudo chattr +i fileName 

取消锁定操作

>sudo chattr -i

指定文件的拥有者,设置用户组,授权某用户组、控制用户权限。

>sudo chown root:root fileName

kill

SIGTERM信号被发送到进程以请求终止,它可以被进程捕获,解释或忽略。允许进程执行释放资源的动作。

>kill 1234
>kill -s TERM 1234
>kill -TERM 1234
>kill -15 1234

SIGKILL信号被发送到进程以使其立即终止(kill)。此信号无法捕获或忽略,进程无法在接收到此信号时执行任何清理。

>kill -s KILL 1234
>kill -KILL 1234
>kill -9 1234

挂后台的方式启动程序

>nohup  abcd &

以较低优先级运行

>nohup nice abcd &

tail

增量显示文本文件或管道数据的-

从第二行开始
>tail -n +2 fileName

最后20行
>tail -20 filename

最后50个字节
>tail -50c filename

chroot

修改系统默认的根目录,在使用 chroot 之后,系统的目录结构将以指定的位置作为根目录('\')。

>chroot .  以当前目录为根目录

nslookup
通过DNS查找IP地址

>nslookup  www.domain.com

traceroute

Traceroute检查从UltraTools服务器到指定主机的路由数据包。

dpkg

基于Debian的系统的包管理器

>dpkg -l
列出系统上安装的所有软件包

>dpkg -l | grep apache2
通过grep管道输出,以查看是否安装了特定的包

>sudo dpkg -r zip
卸载指定软件包

fsck

检查和可选地修复一个或多个Linux文件系统。

fsck程序将尝试并行处理不同物理磁盘驱动器上的文件系统,以减少检查所有文件系统所需的总时间。

fsck默认以串行方式检查/etc/fstab中的文件系统 ,当然可能通过参数调整。

dmesg

设备故障的诊断命令

dmesg可以进行硬件的连接或断开连接操作时,看到硬件的检测或者断开连接的信息。dmesg可以查看到开机信息,printk产生的信息等。若研究内核代码,在代码中插入printk函数,然后通过dmesg观察是一个很好地方法。

>dmesg -c
显示的同时clean dmesg缓存中的信息。

>dmesg -T
以当前时区显示时间信息

modprobe

用于在Linux内核中添加和删除模块。modprobe可载入指定的个别模块,或是载入一组想到依赖的模块。modprobe会根据depmod所产生的依赖关系,决定要载入哪些模块。若在载入过程中发生错误,modprobe会卸载整组的模块。

语 法:

modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值]

>modprobe -c
查看modules的配置文件

>modprobe -l
列出内核中所有已经或者未挂载的模块

>modprobe vfat
挂载vfat模块

>modprobe -r 模块名
移除已经加载的模块

getopt

getopt被用来解析命令行参数项,假如程序命令行启动时,需要指定一系列参数,那么,getopt()与getopt_long()是你的不二选择。

basename

用于去掉文件名的目录和后缀,对应的dirname命令用于截取目录。

>basename /usr/bin/sort
#sort

>dirname /usr/bin/sort
#/usr/bin

md5sum

用于计算和验证128位MD5 哈希值
>md5sum filetohashA.txt filetohashB.txt filetohashC.txt> hash.md5

创建MD5哈希文件hash.md5
>cat hash.md5

>md5sum -c hash.md5
检查MD5 

>echo 'D43F2404CA13E22594E5C8B04D3BBB81  filetohashA.txt' | md5sum -c
检查单个文件的MD5值

useradd

创建新用户或更新默认新用户信息

>adduser t_user 以默认参数值创建新用户t_user

>useradd -u 544 -d /usr/user2  -g users -m user2 

建立一个新用户账户user2,并设置UID为544,主目录为/usr/user2,属于users组,-m 如果主目录不存在则自动创建

>userdel t_user 删除用户t_user

>userdel -f t_user 连同用户目录一并删除

命令w查看当前登陆用户列表

>pkill -kill -t t_user

强制t_use退出

tty

在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下,可以执行tty(teletypewriter)指令查询目前使用的终端机的文件名称。

env

打印环境变量列表或在更改的环境中运行另一个实用程序,而无需修改当前存在的环境。使用 env,可以添加或删除变量,并且可以通过为它们分配新值来更改现有变量。env有另一种常见用途。shell脚本经常使用它来启动解释器,在此用法中,通常不会更改环境。

>env  打印当前用户的环境变量

>env -i NAME1=VALUE1 NAME2=VALUE2 <command-line>

指定的环境变量执行命令行<command-line>