💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 简述 每个程序员基本都应该用过Linux操作系统,有的用来搭建服务器,有的用来安装前端扩展插件工具等等,但是无一例外都是需要操作Linux,所以我这次分享一些常见的实用的命令。 本文将持续更新... ## chkconfig chkconfig命令用于检查,设置系统的各种服务。 chkconfig 可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。 语法 ~~~ chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset] ~~~ 参数: * --add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。 * --del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。 * --level  指定读系统服务要在哪一个执行等级中开启或关毕。 实例列出chkconfig所知道的所有命令。 ~~~ # chkconfig -list ~~~ 开启服务。 ~~~ //列出chkconfig所知道的所有的服务的情况 # chkconfig -list //开启Telnet服务 # chkconfig telnet on ~~~ 关闭服务 ~~~ //列出chkconfig所知道的所有的服务的情况 # chkconfig -list //关闭Telnet服务 # chkconfig telnet off ~~~ ## hostname 这个命令主要是用来查看机器的域名活IP地址的。 * hostname 没有选项,显示主机名字 * hostname –d 显示机器所属域名 * hostname –f 显示完整的主机名和域名 * hostname –i 显示当前机器的ip地址 ## ping ping 命令将数据包发向用户指定地址。当包被接收。目标机器发送返回数据包。 ping 主要有两个作用 1. 用来确认网络连接是畅通的。 2. 用来查看连接的速度信息。 如果你 ping www.yahoo.com 它将返回它的ip地址 。你可以通过 ctrl+C 来停止命令。 ## ifconfig Linux中 ifconfig 命令用于显示或设置网络设备。 ifconfig 可设置网络设备的状态,或是显示目前的设置。 案例: 1、显示网络设备信息:ifconfig ~~~ eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:172220 errors:0 dropped:0 overruns:0 frame:0 TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB) Interrupt:185 Base address:0x2024 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2022 errors:0 dropped:0 overruns:0 frame:0 TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB) ~~~ 2、启动关闭指定网卡: ~~~ ifconfig eth0 down(关) ifconfig eth0 up(开) ~~~ 3、为网卡配置和删除IPv6地址: ~~~ ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡诶之IPv6地址 ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址 ~~~ 4、用ifconfig修改MAC地址 ~~~ ifconfig eth0 down //关闭网卡 ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址 ifconfig eth0 up //启动网卡 ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址 ifconfig eth1 up //启动网卡 ~~~ 5、配置IP地址 ~~~ //给eth0网卡配置IP地址 ifconfig eth0 192.168.1.56 // 给eth0网卡配置IP地址,并加上子掩码 ifconfig eth0 192.168.1.56 netmask 255.255.255.0 // 给eth0网卡配置IP地址,加上子掩码,加上个广播地址 ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255 ~~~ 6、启用和关闭ARP协议 ~~~ ifconfig eth0 arp //开启 ifconfig eth0 -arp //关闭 ~~~ 7、设置最大传输单元 ~~~ //设置能通过的最大数据包大小为 1500 bytes ifconfig eth0 mtu 1500 ~~~ ## nslookup nslookup命令是常用域名查询工具,就是查DNS信息用的命令。 nslookup 这个命令在 有ip地址时,可以用这个命令来显示主机名,可以找到给定域名的所有ip地址。(必须连接到互联网才能使用这个命令) 例子:nslookup www.baidu.com 你也可以使用 nslookup 从ip获得主机名或从主机名获得ip。 【系统没有nslookup命令?】 如果你的Linux系统没有nslookup命令,那么八成是你没有安装bind-utils包。 直接yum install bind-utils就可以解决问题了。 ## netstat Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。 netstat是发现主机连接最有用最通用的Linux命令。 你可以使用"netstat -g"查询该主机订阅的所有多播组(网络)。 ~~~ netstat -nap | grep port //将会显示使用该端口的应用程序的进程id netstat -a or netstat –all //将会显示包括TCP和UDP的所有连接 netstat --tcp or netstat –t //将会显示TCP连接 netstat --udp or netstat –u //将会显示UDP连接 netstat -g //将会显示该主机订阅的所有多播网络。 ~~~ ## chmod Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。 利用 chmod 可以藉以控制文件如何被他人所调用。 使用权限 : 所有使用者 语法: ~~~ chmod [-cfvR] [--help] [--version] mode file... ~~~ 参数说明: ~~~ mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...] 其中: u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。 + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。 -c : 若该文件权限确实已经更改,才显示其更改动作 -f : 若该文件权限无法被更改也不要显示错误讯息 -v : 显示权限变更的详细资料 -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) --help : 显示辅助说明 --version : 显示版本 ~~~ 实例: 将文件 file1.txt 设为所有人皆可读取 : ~~~ chmod ugo+r file1.txt ~~~ 将文件 file1.txt 设为所有人皆可读取 : ~~~ chmod a+r file1.txt ~~~ 将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 : ~~~ chmod ug+w,o-w file1.txt file2.txt ~~~ 将 ex1.py 设定为只有该文件拥有者可以执行 : ~~~ chmod u+x ex1.py ~~~ 将目前目录下的所有文件与子目录皆设为任何人可读取 : ~~~ chmod -R a+r * ~~~ 此外chmod也可以用数字来表示权限如 : ~~~ chmod 777 file ~~~ 语法为: ~~~ chmod abc file ~~~ ~~~ 其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 r=4,w=2,x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6; 若要r-x属性则4+1=5。 chmod a=rwx file 和 chmod 777 file 效果相同 chmod ug=rwx,o=x file 和 chmod 771 file 效果相同 ~~~ 若用chmod 4755 filename可使此程序具有root的权限。 ## find find 命令用来在指定目录下查找文件。 任何位于参数之前的字符串都将被视为欲查找的目录名。 如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 语法 ~~~ find path -option [ -print ] [ -exec -ok command ] {} ; ~~~ 参数说明 : ~~~ find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。 如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。 expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。 -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件 -amin n : 在过去 n 分钟内被读取过 -anewer file : 比文件 file 更晚被读取过的文件 -atime n : 在过去 n 天过读取过的文件 -cmin n : 在过去 n 分钟内被修改过 -cnewer file :比文件 file 更新的文件 -ctime n : 在过去 n 天过修改过的文件 -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写 -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写 -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 文件类型是 c 的文件。 d: 目录 c: 字型装置文件 b: 区块装置文件 p: 具名贮列 f: 一般文件 l: 符号连结 s: socket -pid n : process id 是 n 的文件 你可以使用 ( ) 将运算式分隔,并使用下列运算。 exp1 -and exp2 ! expr -not expr exp1 -or exp2 exp1, exp2 ~~~ 实例: 将目前目录及其子目录下所有延伸档名是 c 的文件列出来。 ~~~ find . -name "*.c" ~~~ 将目前目录其其下子目录中所有一般文件列出 ~~~ find . -ftype f ~~~ 将目前目录及其子目录下所有最近 20 分钟内更新过的文件列出 ~~~ find . -ctime -20 ~~~ 查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们: ~~~ find /var/logs -type f -mtime +7 -ok rm { } ; ~~~ 查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件: ~~~ find . -type f -perm 644 -exec ls -l { } ; ~~~ 为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径: ~~~ find / -type f -size 0 -exec ls -l { } ; ~~~ 查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们: ~~~ find /var/logs -type f -mtime +7 -ok rm { } ; ~~~ ## mv mv 命令用来为文件或目录改名、或将文件或目录移入其它位置。 语法: ~~~ mv [options] source dest mv [options] source... directory ~~~ 参数说明: ~~~ -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件; -f: 在mv操作要覆盖某已有的目标文件时不给任何指示; ~~~ mv参数设置与运行结果 命令格式 运行结果 mv 文件名 文件名 将源文件名改为目标文件名 mv 文件名 目录名 将文件移动到目标目录 mv 目录名 目录名 目标目录已存在,将源目录 移动到目标目录;目标 目录不存在则改名 mv 目录名 文件名 出错 实例: 将文件 aaa 更名为 bbb : ~~~ mv aaa bbb ~~~ 将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。 ~~~ mv info/ logs ~~~ 再如将/usr/student下的所有文件和目录移到当前目录下,命令行为: ~~~ mv /usr/student/* ~~~ ## cp cp命令主要用于复制文件或目录。 语法 ~~~ cp [options] source dest ~~~ 或 ~~~ cp [options] source... directory ~~~ 参数说明: ~~~ -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。 -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 -f:覆盖已经存在的目标文件而不给出提示。 -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。 -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。 -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 -l:不复制文件,只是生成链接文件。 ~~~ 实例: ~~~ // 使用指令"cp"将当前目录"test/"下的所有文件复制到新目录"newtest"下,输入如下命令: cp –r test/ newtest ~~~ 注意:用户使用该指令复制目录时,必须使用参数"-r"或者"-R"。 ## awk AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。 语法 ~~~ awk [选项参数] 'script' var=value file(s) ~~~ 或 ~~~ awk [选项参数] -f scriptfile var=value file(s) ~~~ 选项参数说明: ~~~ // 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。 -F fs or --field-separator fs // 赋值一个用户定义变量。 -v var=value or --asign var=value // 从脚本文件中读取awk命令。 -f scripfile or --file scriptfile // 对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。 // 这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 -mf nnn and -mr nnn // 在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。 -W compact or --compat, -W traditional or --traditional // 打印简短的版权信息。 -W copyleft or --copyleft, -W copyright or --copyright // 打印全部awk选项和每个选项的简短说明。 -W help or --help, -W usage or --usage // 打印不能向传统unix平台移植的结构的警告。 -W lint or --lint // 打印关于不能向传统unix平台移植的结构的警告。 -W lint-old or --lint-old // 打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。 -W posix // 允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。 -W re-interval or --re-inerval // 使用program-text作为源代码,可与-f命令混用。 -W source program-text or --source program-text // 打印bug报告信息的版本。 -W version or --version ~~~ 基本用法: log.txt文本内容如下: ~~~ 2 this is a test 3 Are you like awk This's a test 10 There are orange,apple,mongo ~~~ 用法一: ~~~ awk '{[pattern] action}' {filenames} // 行匹配语句 awk '' 只能用单引号 ~~~ 实例: // 每行按空格或TAB分割,输出文本中的1、4项 ~~~ awk '{print $1,$4}' log.txt ~~~ --------------------------------------------- 2 a 3 like This's 10 orange,apple,mongo ~~~ // 格式化输出 awk '{printf "%-8s %-10s\n",$1,$4}' log.txt ~~~ --------------------------------------------- 2 a 3 like This's 10 orange,apple,mongo 用法二: ~~~ awk -F // -F相当于内置变量FS, 指定分割字符 ~~~ 实例: // 使用","分割 ~~~ awk -F, '{print $1,$2}' log.txt ~~~ --------------------------------------------- 2 this is a test 3 Are you like awk This's a test 10 There are orange apple ~~~ // 或者使用内建变量 awk 'BEGIN{FS=","} {print $1,$2}' log.txt ~~~ --------------------------------------------- 2 this is a test 3 Are you like awk This's a test 10 There are orange apple ~~~ // 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割 awk -F '[ ,]' '{print $1,$2,$5}' log.txt ~~~ --------------------------------------------- 2 this test 3 Are awk This's a 10 There apple 用法三: ~~~ awk -v // 设置变量 ~~~ 实例: ~~~ awk -va=1 '{print $1,$1+a}' log.txt ~~~ --------------------------------------------- 2 3 3 4 This's 1 10 11 ~~~ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt ~~~ --------------------------------------------- 2 3 2s 3 4 3s This's 1 This'ss 10 11 10s 用法四: ~~~ awk -f {awk脚本} {文件名} ~~~ 实例: ~~~ awk -f cal.awk log.txt ~~~ * 关于awk命令的详情:[http://www.runoob.com/linux/linux-comm-awk.html](http://www.runoob.com/linux/linux-comm-awk.html)