作为一名算法工程师,通常都是在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 个字符:
参考