Linux
文章平均质量分 80
youngyoungla
alway be young
展开
-
Linux命令总结合集
Linux 命令总结合集1、实时查看日志tailf /data/log-collect/17xue-test.log | grep "getAdFromPlatform result"2、连接服务器ssh root@10.200.3.2053、从本地上传文件到服务器scp /path/test.txt root@10.200.3.205:/var/ftp/appserver从本地上传文件夹到服务器scp /path/test/* root@10.200.3.205:/var/原创 2020-08-11 20:34:27 · 249 阅读 · 0 评论 -
select实现I/O复用
select:系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的对应的FILE *结构的表示就是stdin、std原创 2016-06-12 12:48:51 · 390 阅读 · 0 评论 -
I/O多路转接之poll
不同与select使用三个位图来表示三个fdset的方式,poll使用一个 pollfd的指针实现。 pollfd结构包含了要监视的event和发生的event,不再使用select“参数-值”传递的方式。同时,pollfd并没有最大数量限制(但是数量过大后性能也是会下降)。 和select函数一样,poll返回后,需要轮询pollfd来获取就绪的描述符。从上面看,select和poll都需要在返原创 2016-06-12 12:48:54 · 384 阅读 · 0 评论 -
正则表达式--------SED
一、sed简介sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。sed命令行的基本格式为:sed option 'script' file1 file2 ...sed option -f scriptfile file1 file2 ...原创 2016-06-28 20:44:41 · 389 阅读 · 0 评论 -
正则表达式--------awk
一、awk的基本使用awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab。awk命令行的基本形式为:awk option 'script' file1 file2 ...awk option -f scriptfile file1 file2 ..和sed一样,awk处理的文件既可以由标准输入重定向原创 2016-06-29 16:14:52 · 259 阅读 · 0 评论 -
git基础使用
一、git的简介Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git跟踪并管理的是修改,而非文件。二、git的安装(lin原创 2016-06-11 14:55:28 · 1196 阅读 · 0 评论 -
shell 脚本之语法
一、条件测试 test和[[root@www SHELL]# cat shell.sh#!/bin/bashval=10test $val -gt 9 //test 传给各命令的参数之间用空格隔开echo $?test $val -gt 10echo $?[ $val -gt 9 ] // [echo $?[ $val -gt 10 ]echo $?原创 2016-06-13 12:16:17 · 356 阅读 · 0 评论 -
shell 脚本
一、shell简介Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲 命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shel原创 2016-06-12 19:00:54 · 642 阅读 · 0 评论 -
crond命令
crondcrond的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。而crond正是它的守护进程。(1)crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现。(2)cr原创 2016-06-14 21:12:39 · 3172 阅读 · 0 评论 -
字符串截取
字符串截取》用#截取var="http://www.baidu.com" # 用#截取:删除左边字符,保留右边字符 echo ${var#*:}其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符结果:[root@localhost SHELL]# ./shell.sh//www.baid原创 2016-06-18 15:36:25 · 492 阅读 · 0 评论 -
SHELL----easy
一、求和结果:二、斐波那契数列三、字符串拼接四、进度条五、最大值、最小值原创 2016-06-22 16:40:42 · 247 阅读 · 0 评论 -
进程和线程的区别与联系
1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.进程概念:程序的一个实例,正在执行的程序,能分配处理器并由处理器执行的实体;内核概念:担当分配系统资源(cpu时间、内存)的实体线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有原创 2016-09-10 09:29:05 · 411 阅读 · 0 评论 -
自旋锁和互斥锁
自旋锁的概念:何谓自旋锁?它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,原创 2016-09-11 19:51:01 · 675 阅读 · 0 评论 -
死锁问题
死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。1.如果线程A锁住了记录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线程就发生了死锁现象。2.如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂原创 2016-06-12 12:47:16 · 428 阅读 · 0 评论 -
exit和return的区别
1. exit用于结束正在运行的整个程序,它将参数返回给OS,把控制权交给操作系统;而return 是退出当前函数,返回函数值,把控制权交给调用函数。2. exit是系统调用级别,它表示一个进程的结束;而return 是语言级别的,它表示调用堆栈的返回。3. 在main函数结束时,会隐式地调用exit函数,所以一般程序执行到main()结尾时,则结束主进程。exit将删除进程使用的内存空间原创 2016-09-06 08:22:28 · 1183 阅读 · 0 评论 -
用户态和内核态的区别
内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。用户态:只能受限的访问内存,且bu转载 2016-11-09 22:49:17 · 38896 阅读 · 3 评论 -
linux 标准i/o缓存机制
一、什么是缓存I/O(Buffered I/O)缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。1.缓存I/O有以下优点:转载 2017-01-04 16:50:25 · 917 阅读 · 0 评论 -
基于UDP协议的socket通信
UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据。具体实现:udp_server.c 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 void usage(char* argv)原创 2016-06-12 12:48:48 · 621 阅读 · 0 评论 -
网络中进程通信-----socket
一、什么是socket?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。 (1)socket()函数int socket(int d原创 2016-06-12 12:48:46 · 561 阅读 · 0 评论 -
进程通信(管道 单向通信)
1 #include 2#include 3#include 4#include 5#include 6int main() 7 { 8 int pipefd[2]; 9 if(pipe(pipefd)==-1) 10 { 11 perror("pipe"); 12 return -1; 13 } 14 pid_t pid=fo原创 2016-06-12 12:46:53 · 629 阅读 · 0 评论 -
进程通信 (命名管道 单向通信)
client.c: 1 #include 2#include 3#include 4#include 5#include 6#include 7#include 8#define _PATH_ "./tmp" 9#define SIZE 100 10int main() 11 { 12 if(mkfifo(_PATH_,0666|S_IFIFO)<0) 1原创 2016-06-12 12:46:56 · 399 阅读 · 0 评论 -
进程通信(消息队列)
消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定是先入先出。消息队列与命名管道有一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限(MSGMNI)。IPC对象数据结构内核为每个IPC对象维护一个数据结构(/usr/include/linux/ipc原创 2016-06-12 12:46:59 · 249 阅读 · 0 评论 -
进程通信(信号量)
信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求,等于0,无资源可用,进程会进入睡眠状态直至资源可用。当进程不再使用一个信号量控制的共享资源时,信号量原创 2016-06-12 12:47:01 · 534 阅读 · 0 评论 -
进程通信(共享内存)
共享内存:用于进程间数据传输,是最高效的,并不提供同步,互斥 shm.h: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 10 #define _PATH_ "." 11 #define _PROJ_ID 0x666 12 #defin原创 2016-06-12 12:47:04 · 272 阅读 · 0 评论 -
线程的创建、终止、等待
线程的概念:同一进程的多个线程共享同一地址空间,因此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:1. 文件描述符表2. 每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数)3. 当前工作目录4. 用户id和组id但有些资源是每个线原创 2016-06-12 12:47:07 · 551 阅读 · 0 评论 -
分离线程
线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。默认情况下,线程被创建成可结合的。为了避免存储器泄漏,每个可结合线程都应该要么被显示地回收,即调用pthread_join;要么通过调用原创 2016-06-12 12:47:10 · 2666 阅读 · 0 评论 -
线程同步
互斥锁: 一、 对于多个线程访问共享资源时,会发生冲突,引入互斥锁能够解决这个问题,如果一个线程获得锁,而另一个线程去申请锁,则需要挂起等待,等待释放锁,则该线程被唤醒,继续获得锁执行。 int pthread_mutex_destroy(pthread_mutex_t *mutex);int pthread_mutex_init(pthread_mutex_t *restri原创 2016-06-12 12:47:13 · 343 阅读 · 0 评论 -
生产者消费者模型
生产者与消费者:3,2,1三种关系:生产者与消费者:互斥,同步消费者与消费者:互斥生产者与生产者:互斥条件变量: int pthread_cond_destroy(pthread_cond_t *cond); int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_con原创 2016-06-12 12:47:18 · 335 阅读 · 0 评论 -
读写锁
读写锁:(自旋锁)读者与读者: 互斥,同步写者与写者:互斥写者一般优先 1 #include 2 #include 3 4 #include 5 int val; 6 pthread_rwlock_t rw_lock; 7 void* read(void* arg) 8 { 9 while(1) 10 { 11 pthread_rw原创 2016-06-12 12:47:24 · 248 阅读 · 0 评论 -
信号量 (线程互斥)
信号量:表示可用资源的数量,MUTEX是非0即为1的,即,如果信号量描述的资源数目是1时,此时的信号量和互斥锁相同!调用sem_wait()可以获得资源(P操作),使semaphore的值减1,如果调用sem_wait()时semaphore的值已经是0,则挂起等待。如果不希望挂起等待,可以调用sem_trywait() 。调用sem_post() 可以释放资源(V操作),使semaph原创 2016-06-12 12:47:27 · 319 阅读 · 0 评论 -
信号
一、产生信号代码: 1#include 2#include 3int main() 4 { 5 printf("%d\n",getpid()); 6 while(1) 7 { 8 } 9 return 0; 10 }(1)终端输入 [admin@localhost SIGNAL]$ ./Signal^C[admin@localh原创 2016-06-12 12:47:50 · 230 阅读 · 0 评论 -
SIGCHLD 信号
SIGCHID:子进程在终止时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略,父进程可以自定义SIGCHLD信号的处理函数,这样父进程只需专心处理自己的工作,不必关心子进程了,子进程终止时会通知父进程,父进程在信号处理函数中调用wait清理子进程即可。要想不产生僵尸进程还有另外一种办法:父进程调用sigaction将SIGCHLD的处理动作置为SIG_IGN,这样fork出来的子进程在原创 2016-06-12 12:47:53 · 2044 阅读 · 0 评论 -
sig_atomic_t类型与volatile限定符
sig_atomic_t类型与volatile限定符volatile:防止编译器优化代码: 1 #include 2 #include 3 int a=0; 4 void signal_handler(int signal) 5 { 6 printf("signal is coming\n"); 7 a=1; 8 } 9 int main() 1原创 2016-06-12 12:47:56 · 523 阅读 · 0 评论 -
回调函数与函数指针
一、函数指针:(1)函数指针是指向函数的指针变量。也就是说,它是一个指针变量,而且该指针指向一个函数。对于指针变量来说,它的值是它指向的变量的地址。举个例子:指针变量pi是指向一个整型变量i的指针,则变量i的地址 &i 就是指针变量pi的值。也就是说整型变量指针指向一个整型变量,而整型变量指针的值就是它所指的整型变量的地址。与其它类型指针变量一样,函数指针变量的值就是它指向的函数的地址。那么什么是原创 2016-06-12 12:47:59 · 384 阅读 · 0 评论 -
可重入函数与线程安全
线程安全函数 概念: 线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 线程安全指的是多线程并发执行时,能够得到正确的结果,这里强调的是并发性,确保线程安全的措施是:线程安全函数不使用共享数据(全局、静态或堆)或者对共享数据实施同步机制保护。 确保线程安全: 要确保函数线程安全,主要需要考虑的是线程原创 2016-06-12 12:48:02 · 282 阅读 · 0 评论 -
正则表达式--------grep
一、正则表达式:规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示 一个模式,这就是正则表达式(Regular Expression)(1)字符类(它们在模式中表示一个字符,但是取值范围是 一类字符中的任意一个。)(2)数量限定符:(3)位置限定符:grep是一种查找过滤工具,正则表达式在grep中用来查找符合模式的字符串。grep找的是包含原创 2016-06-26 22:37:18 · 415 阅读 · 0 评论