文件操作相关
ls – list
ls – list
ls -l 可指定目录或文件 不指定就是列出当前目录下的文件信息
ls -a 显示所有文件 包含隐藏文件
ls -R 递归显示文件信息
测试:
root@650508c3a324:/# ls -l test/
total 0
-rw-r--r-- 1 root root 0 Aug 2 07:13 a.txt
pwd – print working directory
$ pwd
/Users/software
cd --change directory
$ cd workspace/
mkdir – make directories
mkdir hello
mkdir -p a/b/c 如果没有父目录,会递归的创建父目录
rmdir – remove directories
递归删除
$ mkdir -p a/b/c
$ cd a
$ rmdir -p b/c
目录必须为空目录
$ touch a.txt
$ ls
a.txt
$ cd ..
$ rmdir -p a
rmdir: a: Directory not empty
touch
$ touch a.txt
rm – remove
-r:--recursive
-f:--force
echo
输出变量,字符串的值
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
>和>>命令
输出重定项 >表示覆盖 >>表示追加
$ echo xiaoxiao >> a.txt
$ cat a.txt
xiaoxiao
<< EOF
<<EOF…EOF:将<<EOF…EOF之间的多行内容传给前面的命令
<<EOF是shell脚本中使用sqlplus的基础
softwaredeMacBook-Pro:test software$ cat <<EOF
> Hello
> world
> hi
> i
> am
> xx
> EOF
Hello
world
hi
i
am
xx
cp --copy
$ cd test
$ ls
$ cp ../a.txt b.txt
$ ls
b.txt
scp-- secure cpoy
远程拷贝
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp -r 复制当前目录
-r Recursively copy entire directories. Note that scp follows sym‐
bolic links encountered in the tree traversal.
从本地到远端服务器:
scp ${local_file} r e m o t e u s e r n a m e @ {remote_username}@ remoteusername@{remote_ip}😒{remote_folder}
从远端服务器到本地
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
mv – move
移动文件
move ${source_file} ${dest}
如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator
wh家族
who whoaim whereis which
查看系统中登录的用户
$ who
software console Jun 29 09:41
software ttys000 Jun 29 11:22
software ttys001 Jun 29 11:30
查看当前用户
$ whoami
software
$ whereis java 查看系统安装软件路径
$ which 查看可执行文件路径
man
查看命令文档 man ps
文件查看命令
cat
查看文件所有内容
more
查看到文件末尾自动退出
按回车:默认下一行数据;
按空格键盘,默认下一页,以当前屏幕为单位;
按Ctrl+ B 上一页,以当前屏幕大小为单位;
less
查看到文件末尾不自动退出
按回车:默认下一行数据;
按空格键盘,默认下一页,以当前屏幕为单位;
按Ctrl+ B 上一页,以当前屏幕大小为单位;
head
从文件开始查看
-n :查看文件行数
head -15
tail
从文件末尾开始查看
tail -n
tail -15
tail -f #动态查看,CRTL+C:表示暂停进程 CTRL+Z:表示停止进程
文件编辑命令
vi/vim
非编辑模式
yy:复制光标当前行-- copy copy
p:粘贴 --prase
dd:剪切
gg:跳转至行首 -- go go
Ngg:跳转到指定行
Shift+方向键 :跳至当前行 行首 行尾
CTRL+F:上下翻页
CTRL+B:向上翻译
:s/原字符/新字符/ :替换光标当前行内容
:%s/原字符/新字符/g :%s表示全文替换 g:global i表示ignore忽略大小写
/${word} :查找的内容 从光标当前行开始向后查找内容
?${word}: 从光标当前行开始往前查找内容
n查找下一个
N查找上一个
:set nu:显示行号
:set nonu: 去掉行号显示
u:撤销 编辑操作
ctrl+r:恢复撤销
i:进去编辑模式
o:进入编辑模式 光标在下一行
编辑模式
esc:退出编辑模式
可视化模式
按v:进入可视化模式,以字节为单位
按V:以行为单位选择类容
y:复制
p:粘贴
d:删除
source
让当前配置文件生效
source ~/.bash_profile
cut
截取命令
-f 参数,指定列
-d 参数,指定列和列之间的分隔符,默认是\t 行向制表符
输出所有用户
cat /etc/passwd | grep *:* | cut -f 1 -d ":"
wc --word count
wc
-w: --words显示字数
-l:–lines 显示行数
-c:显示bytes数
printf
$ printf '%s,%s\n' abc efg
abc,efg
文本处理语言
awk
模式扫描和文本处理语言 pattern scanning and text processing language
创建测试文件:
software@ubuntu:~$ cat > test.txt <<EOF
> hello
> world
> 2 this is test
> 4 omg
> hi,bob
> 10 abc,123,efg
> EOF
$ cat test.txt
hello
world
2 this is test
4 omg
hi,bob
10 abc,123,efg
用法一:
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
software@ubuntu:~$ awk '{print $1,$4}' test.txt
hello
world
2 test
4
hi,bob
10
用法二:
指定分隔符
awk -F #-F相当于内置变量FS, 指定分割字符
software@ubuntu:~$ awk -F, '{print $1,$4}' test.txt
hello
world
2 this is test
4 omg
hi
10 abc
或者使用内置变量
$ awk 'BEGIN{FS=","} {print $1,$2}' log.txt
https://www.runoob.com/linux/linux-comm-awk.html
sed
sed - stream editor for filtering and transforming text
sed [options] ‘${cmd}’ file
-n 一般sed命令会把所有数据都输出到屏幕,如果加-n 则只会把经过sed名利处理的行输出到屏幕
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取的数据的文件,而不是修改屏幕输出
software@ubuntu:~$ sed '' test.txt
hello
world
2 this is test
4 omg
hi,bob
10 abc,123,efg
查询第二行
software@ubuntu:~$ sed -n '2p' test.txt
world
修改内容10为100
software@ubuntu:~$ sed -i 's/10/100/g' test.txt
software@ubuntu:~$ cat test.txt
hello
world
2 this is test
4 omg
hi,bob
100 abc,123,efg
追加一行内容到第二行内容:
software@ubuntu:~$ sed -i '2a !' test.txt
software@ubuntu:~$ cat test.txt
hello
world
!
4 omg
hi,bob
100 abc,123,efg
删除第三行内容:
software@ubuntu:~$ sed -i '3d' test.txt
software@ubuntu:~$ cat test.txt
hello
world
4 omg
hi,bob
100 abc,123,efg
查找命令
find
find命令 查找文件
find *.txt
grep
查找内容
softwaredeMacBook-Pro:test software$ ps -ef | grep grep
501 5343 1337 0 8:20下午 ttys000 0:00.00 grep grep
压缩命令
zip uzip tar
压缩和解压.zip文件
zip a.zip a.txt
unzip a.zip data
unzip -l a.zip 查看文件,不解压
tar 压缩和解压.tar .tar.gz
tar cvf a.tar a.txt或dir
tar xvf a.tar -C a/ 解压到a文件夹下
tar zcvf tm.tar.gz tm
tar zxvf tm.tar.gz 解压到当前文件夹下
用户权限命令
groupadd groupdel
用户组:
添加用户组
~$ sudo groupadd supermans
删除用户组(用户组中必须没有用户)
~$ sudo groupdel supermans
software@ubuntu:~$ sudo groupadd superman
software@ubuntu:~$ sudo groupadd superman1
software@ubuntu:~$ sudo groupadd superman2
software@ubuntu:~$ sudo groupadd superman3
查看用户组
software@ubuntu:~$ cat /etc/group
software@ubuntu:~$ cat /etc/group | grep superman*
superman:x:1001:
superman1:x:1002:
superman2:x:1003:
superman3:x:1004:
useradd userdel
用户:
useradd 用户名 [-g 主用户组名 -G 其他用户组名]
创建一个用户,-g指定用户的主用户组,-G指定用户的其他用组
useradd bob -g superman
userdel bob
查看所有用户
cat /etc/passwd
查看指定group下的所有user
software@ubuntu:~$ cat /etc/group | grep superman:
superman:x:1001:
找到groupid:1001
cat /etc/passwd | grep 1001
bob:x:1001:1001::/home/bob:/bin/sh
切换用户:
su 用户名,不加载用户的环境变量
su - 用户名 加载用户的环境变量
passwd
修改用户密码:
passwd 用户名
文件权限 ls -l
权限:
文件类型
- rw- r-- r-- 1 software software 3.7K May 17 07:30 .bashrc
chmod u+x a.txt
chmod u-x a.txt
chmod -R dir 加R保证目录下所有文件的权限被更改
chown命令,更改文件所属用户
chown bob2 1.txt
系统服务相关
ps --process status
ps -- process status
options:
-a --all
-u
Select by effective user ID (EUID) or name.
-x
include pro-cesses which do not have a controlling terminal 包括没有控制终端的进程
-e 和-a一样
-f Do full-format listing
u
Display user-oriented format.
x
Lift the BSD-style "must have a tty" restriction
解除"must "
踩坑:由于-u后面需要跟具体的该进程属于哪个userID或username,由于没有x这个user
所以当执行ps -aux时,执行的是 ps aux
kill命令
kill -9 ${pid} :强制结束进程
free
free -h 查看系统内存
total used free shared buff/cache available
Mem: 1.9Gi 877Mi 102Mi 2.0Mi 978Mi 909Mi
Swap: 923Mi 93Mi 830Mi
df – display file system
查看系统硬盘
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1 233Gi 151Gi 80Gi 66% 2414109 9223372036852361698 0% /
devfs 338Ki 338Ki 0Bi 100% 1170 0 100% /dev
/dev/disk1s4 233Gi 2.0Gi 80Gi 3% 2 9223372036854775805 0% /private/var/vm
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
/dev/disk2s1 134Mi 105Mi 29Mi 79% 393 4294966886 0% /Volumes/DeepL Installer
service
service ${service_name} ${cmd}
cmd:enable|disable|start|stop|restart|status
$ service network-manager restart
$ service iptables stop #centos6及centos6以下版本,关闭防火墙(只是临时关闭)
chkconfig
chkconfig命令检查,设置系统的各种服务,通过chkconfig设置的服务永久生效
chkconfig iptables on #打开防火墙
chkconfig iptables off ##永久关闭防火墙
防火墙
centos7以上:
systemctl start firewalld #启动防火墙
systemctl stop firewalld
systemctl status firewalld
systemctl disable firewalld
systemctl enable firewalld #打开防火墙(不是启动防火墙)
设置防火墙规则
firewall-cmd
ubuntu :
sudo ufw status
网络配置文件
ubuntu:
Ubuntu系统进行网络配置涉及到几个配置文件
1./etc/network/interfaces
2./etc/resolv.conf
3./etc/resolvconf/resolv.conf.d/base
操纵步骤:
1.打开ubuntu的/etc/network/interfaces文件默认的内容如下:
auto lo
iface lo inet loopback
动态获取的配置方法:
auto eth0
iface eth0 inet dhcp
静态分配的配置方法:
auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.1
根据配置要求(是动态分配还是自动获取)修改该配置文件保存。
2.添加域名服务器:打开/etc/resolv.conf文件,添加这行:
nameserver 1.2.4.8
nameserver 8.8.8.8
3.同第2步打开/etc/resolvconf/resolv.conf.d/base文件,没有就创建,同样添加这行:
nameserver 1.2.4.8
nameserver 8.8.8.8
4.重启下网络
$/etc/init.d/networking restart(这条命令是重启网卡)
或者
$ifdown eth0
$ifup eth0(这两条命令是有针对性的重启某个网络接口,因为一个系统可能有多个网络接口)
5.查看网络配置的参数是不是正确(每进行一次操作都可以查看一下是不是修改了网络配置)
$ifconfig
centos:
1、网卡配置文件/etc/sysconfig/network-scripts/ifcfg-enp0s3
DEVICE=eth0 //表示网卡物理设备的名字
BOOTPROTO=dhcp //表示为网卡配置静态还是动态IP地址(none:表示无须启动协议;bootp:表示使用BOOTP协议;
//dhcp :使用dhcp协议动态获取ip地址; static:表示手工设置静态IP地址)
ONBOOT=yes //表示启动系统时是否激活网卡,yes为激活,no不激活
TYPE=Ethernet //网络类型
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=1
HWADDR= //表示网卡的MAC地址
GATEWAY = //表示该网关地址
NETMASK //表示子网掩码
IPADDR= //表示IP地址
2、 /etc/resolv.conf 域名解析配置文件
nameserver :表示解析域名使用该IP地址指定的主机为域名服务器;
search : 表示DNS搜索路径
3 、/etc/hosts 主机名匹配IP地址
4 、/etc/networks 网络名和网络地址之间的映射关系
]# vim /etc/networks
default 0.0.0.0
loopback 127.0.0.0
link-local 169.254.0.0
5、 /etc/protocols 定义了主机使用的协议,及每个协议的协议号等相关信息
]# vim /etc/protocols
6、/etc/services 定义了系统中所有服务的名称、协议类型、服务端口号等信息,该文件是一个服务名和服务端口号对应的数据库文件
]# vim /etc/services
注意:networkmanager与network配置有冲突,服务器,虚拟机一般关闭networkmanager
systemctl start NetworkManager
systemctl disable NetworkManager
sudo
非root用户,获取sudo的执行权限,或者修改一些文件
查看并配置/etc/sudoers
$ sudo tail -n 20 /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
修改文件
$ sudo vim /etc/profile
ping
ping ip
ifconfig
查看 ip 等信息
netstat
查看监听端口
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
netstat命令各个参数说明如下:
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
-n : 不进行DNS轮询(可以加速操作)
[root@localhost ~]# netstat -nlp |grep LISTEN //查看当前所有监听端口·
[root@localhost ~]# netstat -nlp |grep 80 //查看所有80端口使用情况·
[root@localhost ~]# netstat -an | grep 3306 //查看所有3306端口使用情况·
rpm 命令
rmp是linux上的安装命令,用来安装.rpm格式的安装包
rpm -qa #查看已安装的软件
rpm -qa | grep mysql #查看已安装的mysql软件包
rpm -ivh .rpm # 安装软件包
rpm -e -nodeps 安装包名 # -e表示卸载 --nodeps 表示不理会依赖关系