Linux环境下常用命令

作为一名算法工程师,通常都是在Linux环境中部署环境,所以总结了一些常用命令。

文件管理

cat 命令

cat(英文全拼:concatenate) 命令用于连接文件并打印到标准输出设备上。

参数说明:

-n 或 --number:由 1 开始对所有输出的行数编号,输出所有行号。

-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号,对非空输出行号。

-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。

-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。

-E 或 --show-ends : 在每行结束处显示 $。

-T 或 --show-tabs: 将 TAB 字符显示为 ^I。

-A, --show-all:等价于 -vET。

-e:等价于"-vE"选项;

-t:等价于"-vT"选项;

主要有三大功能:

cat filename  #一次显示整个文件
cat > filename  #从键盘创建一个文件,只能创建新文件,不能编辑已有文件
cat file1 file2 > file  #将几个文件合并为一个文件

实例:

cat -n log2012.log log2013.log  #把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里
cat -b log2012.log log2013.log log.log  #把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里

#使用 here doc 生成新文件
cat >log.txt <<EOF  
>Hello
>World
>PWD=$(pwd)
>EOF
ls -l log.txt
cat log.txt
Hello
World
PWD=/opt/soft/test
# 反向列示
tac log.txt  
PWD=/opt/soft/test
World
Hello

chmod 命令

 chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令用于改变 linux 系统文件或目录的访问权限。

每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找。

以文件 log2012.log 为例:

-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log

第一列共有 10 个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是 d,表示是一个目录。从第二个字符开始到第十个 9 个字符,3 个字符一组,分别表示了 3 组用户对文件或者目录的权限。权限字符用横线代表空许可,r 代表只读,w 代表写,x 代表可执行。

常用参数:

-c 当发生改变时,报告处理信息
-R 处理指定目录以及其子目录下所有文件

权限范围:

u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组

权限代号:

r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限

实例:

chmod a+x t.log  #增加文件 t.log 所有用户可执行权限
chmod u=r t.log -c  #撤销原来所有的权限,然后使拥有者具有可读权限,并输出处理信息
chmod 751 t.log -c(或者:chmod u=rwx,g=rx,o=x t.log -c)  #给 file 的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
chmod u+r,g+r,o+r -R text/ -c  #将 test 目录及其子目录所有文件添加可读权限

chown 命令

chown (英文全拼:change ownerp)将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID;组可以是组名或者组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符。

-c 显示更改的部分的信息
-R 处理指定目录及子目录

实例:

chown -c mail:mail log2012.log  #改变拥有者和群组 并显示改变信息
chown -c :mail t.log  #改变文件群组
chown -cR mail: test/  #改变文件夹及子文件目录属主及属组为 mail

cp 命令

cp(英文全拼:copy file)命令主要用于复制文件或目录。将源文件复制至目标文件,或将多个源文件复制至目标目录。

注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!

-i 提示
-r 复制目录及目录内所有项目
-a 复制的文件与原文件时间一样

实例:

cp -ai a.txt test  #复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖
cp -s a.txt link_a.txt  #为 a.txt 建议一个链接(快捷方式)

mv 命令

mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。

当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。

参数说明

  • -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
  • -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
  • -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
  • -n: 不要覆盖任何已存在的文件或目录。
  • -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。

实例:

mv test.log test1.txt  #将文件 test.log 重命名为 test1.txt
mv llog1.txt log2.txt log3.txt /test3  #将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中
mv -i log1.txt log2.txt  #将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖
mv * ../  #移动当前文件夹下的所有文件到上一级目录

rm 命令

删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

rm [选项] 文件…

参数

  • -i 删除前逐一询问确认。
  • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  • -r 将目录及以下之档案亦逐一删除。

实例:

rm -i *.log  #删除任何 .log 文件,删除前逐一询问确认
rm -rf test  #删除 test 子目录及子目录中所有档案删除,并且不用一一确认
rm -- -f*  #删除以 -f 开头的文件
rm  -rf    #要删除的文件名或目录  #删除当前目录下的所有文件及目录,并且是直接删除,无需逐一确认命令行为
rm  -rf   test.txt  #删除文件名 test.txt
rm  -rf   test/  #删除目录 test,不管该目录下是否有子目录或文件,都直接删除

touch命令 

touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

ls -l 可以显示档案的时间记录。

语法

touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]

参数说明

  • a 改变档案的读取时间记录。
  • m 改变档案的修改时间记录。
  • c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
  • f 不使用,是为了与其他 unix 系统的相容性而保留。
  • r 使用参考档的时间记录,与 --file 的效果一样。
  • d 设定时间与日期,可以使用各种不同的格式。
  • t 设定档案的时间记录,格式与 date 指令相同。
  • --no-create 不会建立新档案。
  • --help 列出指令格式。
  • --version 列出版本讯息。

实例

使用指令"touch"修改文件"testfile"的时间属性为当前系统时间,输入如下命令:

$ touch testfile                #修改文件的时间属性,如果指定的文件不存在,则将创建一个新的空白文件"testfile" 

which 命令

在 linux 要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:

which     查看可执行文件的位置。
whereis 查看文件的位置。
locate  配合数据库查看文件位置。
find        实际搜寻硬盘查询文件名称。

which 是在 PATH 就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

常用参数:

-n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

实例:

which ls  #查看 ls 命令是否存在,执行哪个
which which  #查看 which
which cd  #查看 cd(显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令)
echo $PATH  #查看当前 PATH 配置,或使用 env 查看所有环境变量及对应值

whereis 命令

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。

常用参数:

-b   定位可执行文件。
-m   定位帮助文件。
-s   定位源代码文件。
-u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。

实例:

whereis locate  #查找 locate 程序相关文件
whereis -s locate  #查找 locate 的源码文件
whereis -m locate  #查找 lcoate 的帮助文件

磁盘管理

cd 命令

cd(changeDirectory) 命令语法:

cd [目录名]

说明:切换目录,切换当前目录至 dirName。

实例:

cd /  #进入要目录
cd ~  #进入 "home" 目录
cd -  #进入上一次工作路径
cd !$  #把上个命令的参数作为cd参数使用

df 命令

df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息,如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB 为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示:

-a 全部文件系统列表
-h 以方便阅读的方式显示信息
-i 显示inode信息
-k 区块为1024字节
-l 只显示本地磁盘
-T 列出文件系统类型

实例:

df -l  #显示磁盘使用情况
df -haT  #以易读方式列出所有文件系统及其类型

ls命令

就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)、查看目录信息等等。

实例:

ls -a 列出目录所有文件,包含以.开始的隐藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来(与ll功能相同)

注:

ll:罗列出当前文件或目录的详细信息,含有时间、读写权限、大小、时间等信息 ,像Windows显示的详细信息。ll是“ls -l"的别名。相当于Windows里的快捷方式。可以理解为 ll 和 ls -l 的功能是相同的, ll 是 ls -l 的别名。

mkdir 命令

mkdir 命令用于创建文件夹

可用选项:

  • -m: 对新建目录设置存取权限,也可以用 chmod 命令设置;
  • -p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。

实例:

mkdir t  #当前工作目录下创建名为 t的文件夹
mkdir -p /tmp/test/t1/t  #在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建

 

pwd 命令

pwd (英文全拼:print work directory) 命令用于查看当前工作目录路径

实例:

pwd   #查看当前路径
pwd -P  #查看软链接的实际路径

rmdir 命令

从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。

注意:不能删除非空目录

实例:

rmdir -p parent/child/child11  #当 parent 子目录被删除后使它也成为空目录的话,则顺便一并删除

【系统管理】

free 命令

显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。

命令参数:

-b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s <间隔秒数> 持续显示内存
-t 显示内存使用总合
-h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值

实例:

free     #显示内存使用情况
free -k  #显示内存使用情况,Kb
free -m  #显示内存使用情况,Mb
free -g  #显示内存使用情况,Gb
free -t  #以总和的形式显示内存的使用信息
free -s 10  #周期性查询内存使用情况

kill 命令

发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。

常用参数:

-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a  当处理当前进程时,不限制命令名和进程号的对应关系
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s  指定发送信号
-u  指定用户

实例:

kill -9 $(ps -ef | grep pro1)  #先使用ps查找进程pro1,然后用kill杀掉
kill 12345  #杀死进程
kill -KILL 123456  #强制杀死进程
kill -HUP pid  #发送SIGHUP信号,可以使用一下信号
kill -9 123456  #彻底杀死进程

ps 命令

ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top

linux上进程有5种状态:

  • 1. 运行(正在运行或在运行队列中等待)
  • 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  • 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  • 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  • 5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps 工具标识进程的5种状态码:

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

命令参数:

-A 显示所有进程
a 显示所有进程
-a 显示同一终端下所有进程
c 显示进程真实名称
e 显示环境变量
f 显示进程间的关系
r 显示当前终端运行的进程
-aux 显示所有包含其它使用的进程

实例:

ps -ef  #显示当前所有进程环境变量及进程间关系,显示所有命令,连带命令行
ps -A  #显示当前所有进程
ps -aux | grep apache  #与grep联用查找某进程
ps aux | grep '(cron|syslog)'  #找出与 cron 与 syslog 这两个服务有关的 PID 号码

top 命令

显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

常用参数:

-c 显示完整的进程命令
-s 保密模式
-p <进程号> 指定进程显示
-n <次数>循环显示次数

 sudo命令

sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

使用权限:在 /etc/sudoers 中有出现的使用者。

su 命令

su(英文全拼:swith user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。

使用权限:所有使用者。

网络通讯

netstat 命令

netstat 命令用于显示网络状态。

利用 netstat 指令可让你得知整个 Linux 系统的网络情况。

语法

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

参数说明

  • -a或--all 显示所有连线中的Socket。
  • -A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
  • -c或--continuous 持续列出网络状态。
  • -C或--cache 显示路由器配置的快取信息。
  • -e或--extend 显示网络其他相关信息。
  • -F或--fib 显示FIB。
  • -g或--groups 显示多重广播功能群组组员名单。
  • -h或--help 在线帮助。
  • -i或--interfaces 显示网络界面信息表单。
  • -l或--listening 显示监控中的服务器的Socket。
  • -M或--masquerade 显示伪装的网络连线。
  • -n或--numeric 直接使用IP地址,而不通过域名服务器。
  • -N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
  • -o或--timers 显示计时器。
  • -p或--programs 显示正在使用Socket的程序识别码和程序名称。
  • -r或--route 显示Routing Table。
  • -s或--statistics 显示网络工作信息统计表。
  • -t或--tcp 显示TCP传输协议的连线状况。
  • -u或--udp 显示UDP传输协议的连线状况。
  • -v或--verbose 显示指令执行过程。
  • -V或--version 显示版本信息。
  • -w或--raw 显示RAW传输协议的连线状况。
  • -x或--unix 此参数的效果和指定"-A unix"参数相同。
  • --ip或--inet 此参数的效果和指定"-A inet"参数相同。

实例:

netstat -anlp | grep 8888
# netstat命令各个参数说明如下:
# -t : 指明显示TCP端口 
# -u : 指明显示UDP端口 
# -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序) 
# -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。 
# -n : 不进行DNS轮询,显示IP(可以加速操作) 

netstat -tupln | grep 80  #并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户

系统设置

crontab 命令

crontab是用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

而 linux 任务调度的工作主要分为以下两类:

  • 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
  • 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

参数说明

  • -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
  • -r : 删除目前的时程表
  • -l : 列出目前的时程表
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

备份压缩

tar 命令

 tar(英文全拼:tape archive )命令用于备份文件。

tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。

tar -czvf test.tar.gz a.c   #压缩 a.c文件为test.tar.gz,压缩文件 非打包
tar -tzvf test.tar.gz  #列出压缩文件内容
tar -xzvf test.tar.gz   #解压文件
tar -cvf log.tar 1.log,2.log 或tar -cvf log.*  #将文件全部打包成 tar 包
tar -zcvf /tmp/etc.tar.gz /etc  #将 /etc 下的所有文件及目录打包到指定目录,并使用 gz 压缩
tar -ztvf /tmp/etc.tar.gz  #查看刚打包的文件内容(一定加z,因为是使用 gzip 压缩的)
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc  #要压缩打包 /home, /etc ,但不要 /home/dmtsai
gzip实例:压缩 gzip fileName .tar.gz 和.tgz  解压:gunzip filename.gz 或 gzip -d filename.gz
          对应:tar zcvf filename.tar.gz     tar zxvf filename.tar.gz

bz2实例:压缩 bzip2 -z filename .tar.bz2 解压:bunzip filename.bz2或bzip -d filename.bz2
       对应:tar jcvf filename.tar.gz         解压:tar jxvf filename.tar.bz2 

zip实例:
zip -q -r html.zip /home/html  #将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
zip -q -r html.zip *  #如果在我们在 /home/html 目录下,可以执行以下命令
zip -dv cp.zip a.c  # 从压缩文件 cp.zip 中删除文件 a.c 
zip -r mysql.zip mysql #将mysql文件夹压缩成mysql.zip
zip -r abcdef.zip abc def.txt #将文件夹abc和文件def.txt压缩成一个压缩包abcdef.zip
unzip mysql.zip #在当前目录下直接解压mysql.zip

【其他】

tail 命令

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

实例:

tail notes.log  #显示 notes.log 文件的最后 10 行
tail -f notes.log  #跟踪名为 notes.log 的文件的增长情况,此命令显示 notes.log 文件的最后 10 行。当将某些行添加至 notes.log 文件时,tail 命令会继续显示这些行。 显示一直继续,直到您按下(Ctrl-C)组合键停止显示。
tail +20 notes.log  #显示文件 notes.log 的内容,从第 20 行至文件末尾
tail -c 10 notes.log  #显示文件 notes.log 的最后 10 个字符:

参考

1、Linux 命令大全

2、Linux 常用命令学习 | 菜鸟教程

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值