Linux 基础命令

First Post:

Last Update:

Word Count:
6.2k

Read Time:
24 min

Linux 基础命令

ls

显示目录
参数:
-a 显示所有
-l 显示详细
-i 显示文件id

pwd

打印当前目录

cp

复制文件
 参数:
-r复制包括子目录
-p复制包括文件属性
例:如何在复制时重命名,把Downloads复制到home目录下
并命名为rename_file

cp -r /home/logan/Downloads /home/rename_file
# 前提是在home/目录下无rename_file文件夹才可命名成功

rm

删除文件或文件夹
 参数:
-r删除包括子目录文件或文件夹
-f强行执行

快捷键:Ctrl+L 可达到清屏目的,等同于输入命令clear

mv

移动或重命名文件

mkdir–make directory
创建目录
 参数:
-p创建连续父子目录

 rmdir—remove empty directory
删除空目录

 如何修改语言:输入locale 查看各种功能语言,在输入相应的值进行修改.  

touch

创建一个文件
注意,若创建含有空格的名称文件需要使用单引号或双引号括起来

cat

显示文件内容,从上往下输出,直到输出完毕
参数:
-n显示行号

tac

倒着打印,于cat相同,从下往上输出,直到输出完毕
不支持-n

more

显示文件内容-可以往下翻页

less

显示文件内容-可以往上翻页
 使用技巧:输入/+keyword可以查找你所需要的信息

head—show with text
 显示文件内容-指定行号进打印前几行内容
 参数:
-n指定行号

tail

显示文件内容-指定行号进行打印后几行内容
参数:
-n指定行号
-f动态显示文件末尾内容
注意,head与tail未指定行数时,默认为10行

ln

生成链接文件-默认硬链接
语法: ln -s [原文件] [目标文件]
参数: -s创建软链接

chmod

改变文件或文件目录的权限
语法:chomd [{ugoa}{+-=}{rwx}] {文件目录}
[mode=421] {文件目录}
参数:
-R递归修改 /Important!!!!

chown

改变文件或目录的所属者

chgrp

改变文件或目录的所属组

umask

显示,设置文件的缺省权限
参数:
-S以rwx形式显示新建文件缺省文件权限
注:///比如:
umask
0022
(0022)代表使用777-755 >>rwx-r_x-r_x

find

文件搜索
语法:find [搜索范围] [匹配条件]
例如:

find /etc/ -name woshi —-使用号代表搜索号里面的有关内容

find /etc/ -size +204800 —-搜索大于100M的文件
(+n 大于 -n小于 n等于)

find / -cmin -5 —在/目录下查找5min之内被修改属性的文件
 (若超过5min使用+)

find /etc -size +163840 -a -size -204800
在/etc下查找大于80MB小于100MB的文件

find /etc -name inittab -exec ls -l {} ;
在/etc下查找inittab文件并显示其详细信息
-exec/-ok 命令 {} ;

参数:
-name使用名称搜索
-size根据大小搜索

-amin根据改动的访问时间 access
-cmin根据文件改动的属性 change
-mmin根据文件内容改动 modify
-o条件中任意一各条件满足即可
-type根据文件类型查找(f文件 d目录 l软链接文件)
-inum根据i节点查寻 

压缩打包命令

若打包 a 目录
tar -cvf a.tar a
若打包并压缩为gz格式
tar -zcvf a.tar.gz
若打包并压缩为bz2格式
tar -jcvf a.tar.bz2
解包tar
tar -xvf a.tar -C ./		(-C代表指定的目录)
解包gz
tar -cxvf a.tar.gz -C ./
解包tar.bz2
tar -jxvf a.tar.bz2 -C ./

gzip
bzip2
rar
压缩: rar a ***
解压: rar x ***.rar
zip
压缩: zip ***
解压: unzip *** -d 目录

网络命令

write—给指定在线用户发送消息
按: Ctrl + D 保存结束

wall—发送广播信息

ping—测试网络的连通性
参数:
-c指定发送次数
例如:ping 192.168.03.01

nslookup—(翻译域名为IP)

ifconfig—查看当前计算机网卡还有ip地址
(interface configure)

mail—查看发送邮件
进入以后 h列出 d删除 q退出 邮件序列号-查看邮件

last—列出目前与过去登入系统的用户信息

lastlog—检查某特定用户上次登录的时间
参数:
-u
例如:lastlog -u logan

traceroute—显示数据包到主机之间的路径
例如:traceroute www.baidu.com

netststat—显示网络相关的信息
参数:
-t TCP协议
-u UDP协议
-l 监听
-r 路由
-n 显示IP地址和端口号
范例:
netstat -tlun 查看本地监听端口
netstat -an  查看本地所有的网络链接
netstat -rn 查看本机路由表

mount—挂载
umount—

关机重启命令

shutdown—(优先使用)
参数:
-h 关机
-r 重启
-c 取消
 halt—关机

poweroff—关机
reboot—重启

init 0—关机
 init 6—重启
系统运行级别
0 关机
1 单用户
2 不完全多用户,不含NFS服务
3 完全多用户
4 未分配
5 图形界面
6 重启

runlevel—查询系统运行级别

logout—退出登录

文本编辑器Vim

进入插入模式:

a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在光标所在行首插入
o 在光标下插入新行
O 在光标上插入新行

定位命令:

set nu 设置行号
set nonu 取消行号
gg  到第一行
G   到最后一行
nG  到第n行
n   到第n行
$   移至行尾
0   移至行首

删除命令:

x   删除光标标所在处字符
nx  除光标所在后n个字符
dd  删除光标所在行
ndd 删除光标所在的n行
dG  删除光标删除光标所在行到文件末尾内容
D   删除光标所在处到行尾内容
nl,n2d  删除指定内容

复制和剪切命令:

yy   复制当前行
nyy  复制当前行的以下n行
dd   剪切当前行
ndd  剪切当前行以下n行
p,P  粘贴在当前光标所在行下或行上

替换和取消命令:

r    取代光标所在字符
R    从光标所在处开始替换字符,按Esc结束
u    撤销

搜索命令:

/string  搜索指定字符串,若搜索时忽略大小写:set ic
n	 搜索
s/old/new/g      替换当前行
%s/old/new/g     全文替换指定字符串
n1,n2s/old/new/g 在一定范围内替换指定字符串

!cmd —-(执行shell命令)

分屏操作:
水平分屏: sp + file
垂直分屏: vsp + file
切换屏幕:   Ctrl +ww
保存并全部退出: wqall 后加all
保存和退出命令:
w    保存修改
w new_filename 保存为指定文件
wq   保存修改并退出
ZZ   快捷键,保存修改并退出
q!   不保存修改退出
wq!  保存修改并退出(文件所有者及root可使用)

vim使用技巧

r !命令	 导入命令执行结果
map 快捷键 触发命令    定义快捷键
例如:
map ^P I#<ESC>
map ^B 0x
连续注释技巧:
n1,n2s/^/内容/g
n1,n2s/^#//g
n1,n2s/^/\/\//g	(使用转义符\)
替换
ab 输入内容 变成内容
若想永久保存自定义命令或快捷键,修改用户目录下.vimrc配置文件

用户配置文件

查看配置文件的帮助信息: man 5 配置文件名
用户信息文件/etc/passwd
第1字段:用户名
第2字段:密码标志
第3字段:UID
UID:
0         root
1~499 	  系统用户
500~65535 普通用户
第4字段:GID(用户初始组)
第5字段:用户说明
第6字段:家目录
第7字段:登录之后的Shell
影子文件    /etc/	密码存放文件
组密码文件   /etc/gshadow
第一字段:组名
第二字段:组密码	
第三字段:组管理员用户名	
第四字段:组中附加用户
组信息文件   /etc/group
第一字段:组名
第二字段:组密码标志
第三字段:GID
第四字段:组中附加用户

如何使其他用户变为超级用户

更改/etc/passwd的UID为0即可
用户的邮箱文件: /var/spool/mail/用户名/
用户模板目录: /etc/skel/ (就是创建用户时家目录中出现的文件,用户的家目录中的文件就是从这拷贝来的)

用户管理命令

useradd

添加用户
参数:
-u 指定用户UID
-d 指定家目录
-c 用户说明
-g 指定初始组
-G 指定用户的附加组
-s 指定用户登录的shell,默认是/bin/bash
-m 指定用户的家目录,若不存在,则创建一个
用户默认值文件:
/etc/default/useradd —创建用户的默认属性
/etc/login.defs —密码有效期文件

adduser—添加用户脚本
可以添加完整的目录

passwd—-修改或添加用户密码
参数:
-S 查询用户密码的密码状态
-l 暂时锁定用户 -u 解锁用户
usermod—修改用户信息

whoami—查看当前用户

change—-修改用户密码状态

userdel—删除用户 -r 删除用户同时删除用户家目录

su——–用户切换
注意:直接使用su并不能全部切换为切换的用户
参数:
- 选项只使用"-"代表连带用户环境变量一起切换
-c 仅执行一次命令,而不切换用户身

手动删除用户

vi /etc/passwd
vi /etc/shadow
vi /etc/group
vi /etc/gshadow
rm -rf /var/spool/mail/用户名
rm -rf /home/用户名

id

查看用户ID

env

查看环境变量

用户组管理命令

groupadd

添加组
参数:
-g 指定GID

groupmod

修改组
-g 修改组GID
-n 修改组名

groupdel

删除组

gpasswd

把用户添加入组或从组里删除
-a 把用户加入组
-d 把用户从组中删除

权限管理

ACL权限

查看分区ACL权限是否开启:dumpe2fs -h /dev/sda3 (-h仅显示超级块中的信息)
临时开启分区ACL权限: mount -o remount,acl /
永久开启ACL权限:修改 /etc/fstab
重新挂载文件系统 mount -o remount /

getfacl + 目录—查看ACL

setfacl—-设定ACL权限命令

参数:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
例如: setfacl -m u:用户名:rwx 目录 //给用户
setfacl -m g:组名:rwx 目录 //给组

最大权限mask:

mask是用来指定最大有效权限的.如果我妈给用户赋予ACL权限,是需要
和mask的权限”相与”才能利亚到用户的真正权限
例如: setfacl -m m:rx 目录/文件

删除ACL: setfacl u:用户名 目录/文件
递归ACL权限: setfacl -m  u:用户名:权限 -R  目录 注意:-R 只能在后面

默认ACL权限: setfacl -m d:u:用户名:权限 -R 目录 (防止子目录中产生的新文件没有该用户的ACL权限)

文件特殊权限

SetUID (灵魂附体,只能是对可执行文件有效)
chmod 4755 文件名 4代表是SUID
chmod u+s  文件名 2代表是SGID
          1代表是SID
可利用修改一些命令文件,可获得暂时的root身份
取消SUID: 直接输入 chmod 755 文件名

SetGID(暂时升级为组的该文件的所属组)
chmod g+s 目录/文件名

Sticky BIT------SBIT
chmod 1755 目录
chmod o+t  目录

技巧: echo 文本内容 >> 文件 —–向文件中写入数据
文件系统属性权限:chattr[+-=][选项] 文件/目录
选项:
-i 如果对文件设了i属性,那么对文件不能修改,也对root有效
-a 只能增加文件内容,其他不能做其他的
lsattr—查看文件系统属性权限
参数:
-a 显示所有文件和目录
-d 仅显示目标目录或文件

系统命令权限: sudo

描述:把本来只能超级用户的执行命令赋予普通命令执行
操作对象是系统命令

visudo—实际修改的是/etc/sudoers文件
例如:
用户名 ALL=/sbin/shutdown -r now
sudo -l 可查看可用的sudo命令
使用: sudo /sbin/shutdown -r now

文件管理

mount—挂载
语法: mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备名 挂载点
参数:
-a 根据 /etc/fstab的内容,自动挂载
-t 加入文件系统类型来指定挂载类型,可以以ext3,ext4,iso9660等文件系统
-L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项:可以指定挂载的额外选项
常见额外选项:
remount rw/ro exec/noexec

fdisk分区-自动挂载与fstab文件修复

fstab文件: /etc/fstab 开机自动挂载文件
第1字段:UUID/设备文件名
第5字段:分区是否被dump备份0代表不备份,1代表每天备份,2代表不定期备份
第6字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高

!!!!!!! 注意:若手动修改/etc/fasab文件之后,写之后记得去使用 mount -a命令来自动挂载,防止下次开机系统崩溃.
若系统出错后,一般进入只读状态,使用命令:mount -o remount,rw /进行重新挂载

df—文件系统查看
参数:
-a 显示所有文件系统信息,包括特殊文件系统,如/proc,/sysfs
-h 使用习惯单位显示容量,如KB,MB或GB等
-T显示文件系统类型
-m 以MB为显示单位
-k 以KB为显示单位
du—查看文件总的大小
注意:ls命令只能查看本目录和子目录下的文件名大小之和
常用: du -sh 目录

fsck—文件系统修复命令
参数:
-a 不用显示用户提示,自动修复文件系统
-y 自动修复.和-a作用一致,不过有些文件系统只支持-y

dumpe2fs—显示磁盘状态命令

分区命令:
fdisk
参数:
-l 显示分区信息

!!! 注意: 在分区之后要得重新读取分区表信息
命令: partprobe

格式化命令:
mkfs -t ext4 /dev/sdb1
注意:拓展分区不能格式化

分配swap
free-查询swap占用情况
fdisk中使用l查看ID,swap为82,分配好内存分区后,使用t来改变该分区的ID,改为swap.
修改之后使用命令mkswap 来格式化该分区
改好之后可使用swapon /dev/sdb6 来挂载swap(暂时)
spwaoff可来umount swap
若想永久修改,可修改 /etc/fstab 按着要求填写

shell基础

环境变量

source—重新读取配置文件
source等效于’.’
. 配置文件 or source 配置文件
shell支持的配置文件: /etc/shells

shell 脚本

如何run shell脚本:
1-使用绝对路径 2-使用相对路径 3-bash + 当前目录下的shell脚本
在shell脚本中必写:#!/bin/bash —告诉计算机这是shell脚本

windows中编写的shell脚本的回车符是M$,而Linux是$,这造成了
windows和linux不兼容,使用命令 dos2unix可以改变格式.:

echo

打印字符串在终端
参数:
-e 支持反斜线控制的字符转换
若想颜色输出: echo -e “\e[1;31m abcd \e[0m”
30m=黑色 31m=红色 32m=绿色 33m=黄色
34m=蓝色 35m=洋红 36m=青色 37m=白色

history

历史命令
参数:
-c 清楚历史
-w 把缓存历史命令写入保存中 ~/.bash_history
历史命令默认保存1000条 可以在环境变量配置文件/etc/profile中修改
历史命令的调用:
使用上下键,!n 执行第n行命令 !!重复执行上一条,!字符串

alias

别名=’原命令’ —设定别名
alias 查询别名
让别名永久生效:修改 ~/.bashrc
命令执行顺序
1—绝对路径\相对路径
2—别名
3—bash内部命令
4—$PATH环境变量 查看—echo $PATH

多命令执行顺序

命令1;命令2 命令1&&命令2 命令||命令2
顺序执行   逻辑与    逻辑或

dd if=输入文件 of=输出文件 bs=字节数 count=个数

管道符

命令1 | 命令2 —命令1的正确输出作为命令2的输入
例如:分屏显示: ls -al /etc | more

grep—搜索内容
-i 忽略大小写
-n 输出行号
-v 反向查找
–color=auto 搜索出的关键字用颜色显示
 例如: netstat -an | grep “ESTABLISHED” 查看多少人连接

数值运算与运算符

declare—声明变量类型

- :给变量设定类型属性
+ :取消变量类型的属性
-i:给变量声明为整数型(integer)
-x:给变量声明为环境变量
-p:显示指定变量的被声明类型

例:a=1;b=2;declare -i c=$a+$b;echo $c
使用expr或let数值运算工具
例:a=1;b=2;c=$(expr $a + $b)
注:+号的左右两侧必须有空格

法三:(常用)

$((运算式))或$[运算式]

变量的测试与变量的替换
x=${y-New_Value} 
x=${y:-New_value}
x=${y+New_value}
x=${y:+New_value}
x=${y=New_value}
x=${y:=New_value}
x=${y?New_value}
x=${y:?New_value}

环境变量的配置文件

/etc/profile
USER
LOGNASME
MAIL
PATH
HOSTNAME
HISTSIZE
HISTSIZE

/etc/profile.d/*.sh

~/.bash_profile
~/.bashrc
/etc/bashrc

Shell欢迎信息

/etc/issue /etc/issue.net (登录前)
/etc/issue  (本地生效)
\d 显示当前系统日期
\s 显示操作系统名称
\l 显示登录的终端号(比较常用)
\m 显示硬件结构体系
\n 显示主机名
\o 显示域名
\r 显示内核版本
\t 显示当前系统时间
\u 显示当前登录用户的序列号

/etc/issue.net (远程生效)
转义符不生效,只能为纯文本
是否显示欢迎信息,有SSH的配置文件/etc/ssh/sshd_config决定
加入”Banner /etc/issue.net”行才能显示,(重启SSH服务) service sshd restart

/etc/motd(登录后)

正则表达式与通配符

正则表达式
用来在文件中匹配符合条件的字符串,正则是包含匹配.grep,awk,sed

Linux通配符号:* ? []
通配符用来匹配符合条件的文件名,通配符是完全匹配.ls,find,cp
这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了.

shell编程

cut—截取字符段截取命令

printf—格式化输出

服务管理

RPM包安装服务
chkconfig –list 查看自启动服务状态 0~6 代表Linux的运行级别
ps aux 查看进程
源码包安装服务:
安装位置默认: usr/local

Terminal快捷键

Ctrl+p    //上一行命令
Ctrl+n	  //下一行命令
Ctrl+b    //光标向后移动
Ctrl+f	  //光标向前移动
Ctrl+a    //光标移动到行首
Ctrl+e	  //光标移动到行未
Ctrl+h	  //backspace	
Ctrl+j    //Enter 回车
Ctrl+i	  //TAb键
Ctrl+d    //Delete
Ctrl+u    //删除光标前面的内

如何使用linux创建U盘启动器

0.格式化U盘,mkfs.vfat /dev/设备名称

  1. 使用 fdisk -h 查看各储存设备名称
  2. 找到U盘盘符名称,使用umont /dev/设备名称–//注意,必须umount掉
  3. 使用dd if=sio镜像目录 of=/dev/设备名称 bs=2M—设置刻录速度
  4. 回车.—完毕!

linux文件字符串批量查找, 替换

有时候要找一些字符串,但是又不知道在哪个文件,只记得一些字符串

查找目录下的所有文件中是否含有某个字符串

find .|xargs grep -ri “SMS_ISSEND”

查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名

find .|xargs grep -ri “SMS_ISSEND” -l

批量替换

1
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

防火墙 打开 关闭

Debian原来用的是UFW防火墙,之前没接触过这种类型防火墙,懵逼了半天,这里记录一下简单的使用规则,后期在使用过程中慢慢完善UFW防火墙的使用操作方法;

查看防火墙现有规则:

ufw status

开启/关闭防火墙:

ufw enable #开启
ufw disable #关闭

开启指定tcp或者udp端口:

ufw allow 22/tcp

同时开启tcp与udp端口:

ufw allow 445

删除53端口:

ufw delete allow 53

拒绝指定tcp或者udp端口:

allow/deny 20/tcp
allow/deny 20/udp

突出显示的输出表示网络接口名称,它们通常被命名为eth0或enp3s2

因此,如果您的服务器具有名为eth0的公共网络接口,则可以使用以下命令允许HTTP流量(端口80 ):

sudo ufw allow in on eth0 to any port 80

这样做将允许您的服务器从公共互联网接收HTTP请求
或者,如果您希望MySQL数据库服务器(端口3306 )监听专用网络接口eth1上的连接,例如,您可以使用此命令:

sudo ufw allow in on eth1 to any port 3306

这将允许专用网络上的其他服务器连接到MySQL数据库

如何实现免密钥登录linux

1
2
3
4
5
6
ssh-keygen # 生产密钥
# 直接写入, 会造成服务器其他密钥的丢失
scp ~/.ssh/id_rsa.pub root@*****:/root/.ssh/authorized_keys

# 正确写入
ssh-copy-id -i ~/.ssh/id_rsa.pub root@39.97.119.22

然后即可免密钥登录远程了

nohup

nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用
nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
nohup 是 no hang up 的缩写,就是不挂断的意思。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令
可以在你退出帐户/关闭终端之后继续运行相应的进程。
在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。
回到顶部
案例

  1. nohup command > myout.file 2>&1 &
    在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
    2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到myout.file文件中。

  2. 0 22 * * * /usr/bin/python /home/pu/download_pdf/download_dfcf_pdf_to_oss.py >
    /home/pu/download_pdf/download_dfcf_pdf_to_oss.log 2>&1

这是放在crontab中的定时任务,晚上22点时候怕这个任务,启动这个python的脚本,并把日志写在download_dfcf_pdf_to_oss.log文件中
回到顶部
nohup和&的区别

& : 指在后台运行
nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,
例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出
那么,我们可以巧妙的吧他们结合起来用就是
nohup COMMAND &
这样就能使命令永久的在后台执行
例如:

  1. sh test.sh &
    将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失(缺少的日志的输出)

将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。

  1. nohup sh test.sh
    将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,
    即使关闭xshell退出当前session依然继续运行。
  2. nohup sh test.sh &
    将sh test.sh任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,
    即使关闭xshell退出当前session依然继续运行。

配置dns服务器

执行vim/etc/resolv.conf命令编辑/etc/resolv.conf文件

1
vim /etc/resolv.conf

格式:

1
nameserver server_ip

执行以下命令,验证文件系统域名是否可以解析到IP地址。

nslookup

更改磁盘名称

1
e2label /dev/sdxN <New Name>
打赏点小钱
支付宝 | Alipay
微信 | WeChat