How To Create Files in Linux From a Bash Shell Prompt

I‘m a new to CentOS Linux user. How do I create a file from bash prompt without using GUI tools?

Linux / UNIX like operating system offers many command line tools and text editors for creating text files. You can use vi or joe text editor. It is a terminal-based text editor for Linux/Unix like systems, available under the GPL. It is designed to be easy to use. In short, you can use any one of the following tool:
Tutorial details
Difficulty level Easy
Root privileges No
Requirements None
Est. reading time 5m
  1. cat command
  2. echo or printf command
  3. Nano text editor
  4. vi text editor
  5. joe text editor
  6. Any other console based text editor

Create a Text File using cat command

To create a text file called foo.txt, enter:
$ cat > foo.txt

This is a test.
Hello world!
press CTRL+D to save file

To display file contents, type:
$ cat foo.txt

Create a text file using echo or printf command

To create a file called foo.txt, enter:

echo 'This is a test' > foo.txt


printf 'This is a test\n' > foo.txt


printf 'This is a test\n Another line' > foo.txt

To display file contents, type:
$ cat foo.txt

Create a Text File using nano text editor

Nano is a text editor from GNU project for Linux or Unix-like system. To create a file named foo.txt, run:
$ nano foo.txt
Sample outputs:

GNU nano is a simple terminal-based text editor for Linux/Unix

You can start typing on screen. To quit or exit nano, press the Ctrl-X key combination and select Yes followed by the enter key.

Create a Text File using joe text editor

JOE is text editor. To create a file called foo.txt, type:
$ joe -help foo.txt
You will see help menu on screen. Next type something. To save the file and leave joe, by typing ^KX (press CTRL+K+X).

Create a Text File using vi / vim text editor

vi / vim is another text editor. To create a file called bar.txt, type:
$ vi bar.txt
Press ‘i’ to insert new text. To save the file and leave vi, type ESC+:+x (press ESC key, type : followed by x and [enter] key).

Further readings
  • Learn more about joe here : Introduction to the Joe Text Editor
  • Learn more about vi here : Download mastering the VI editor pdf version.

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 44 comments so far... add one

CategoryList of Unix and Linux commands
Disk space analyzersdf ncdu pydf
File Managementcat cp mkdir tree
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
44 comments… add one
  • Pafcio Oct 18, 2007 @ 9:58

    You can also use touch command to create empty files:
    touch foobar.txt

    • amit Oct 12, 2013 @ 7:47

      basically i m beginner could please give me any links or book to understand linux architecture, well i m also confused in using linux commands since there r so many option is there any web which explains how to use linux commands
      thanks in advance.

  • 🐧 nixCraft Oct 18, 2007 @ 20:09


    thanks for pointing out touch command!

  • Mohan Oct 18, 2007 @ 23:46

    echo ‘ This is a multiline

    text file created

    from the bash shell

    using echo command’ > multiline.txt

    • shankar Aug 26, 2011 @ 9:39

      i want create a text file. pls could you help me…

      • maxwell Sep 22, 2011 @ 14:24

        $ cat foot.txt

  • ganni Oct 29, 2007 @ 8:30

    Thanks a lot! It helps me.

    Thank you very much! all of you

  • Kaka Nov 16, 2007 @ 17:42

    Excellent, cause I just used it at work, and it worked and helped me.


  • Nitish Dec 4, 2007 @ 15:48

    Detailed information but would appreciate if someone can upload the solution for cat command as in executing or running the vi program. I am writing a finction in the vi and want to execute it outside the vi on the bash shell.

    Thx- Nitish Anand

  • amit nehra Dec 6, 2007 @ 2:12

    thanks guys. i do try cat, it works perfectly.
    but in vi mode i’m not able to save & exit the file. i had to exit using ctrl+z & the file was not saved.
    please help me. mail on

  • Nitish Anand Dec 23, 2007 @ 12:36

    Have u tried using:-

    !wq for save and exit VI
    !w to just exit.

  • chakjoy Feb 24, 2008 @ 3:35

    have two files, ‘file1’ and ‘file2’.
    file1 has:

    file2 has:

    would like to combine into one like:
    1234 | abcd
    4567 | efgh
    6789 | ijkl

    Please give direction.


    • musteah Oct 5, 2010 @ 13:19


      here is an solution. Using arrays:

      declare -a ARRAY1
      declare -a ARRAY2
      let count=0
      let count1=0
      while read LINE
      done < file1.txt
      while read LINE
      done < file2.txt
      for((i=0; i<${#ARRAY1[@]};i++));do
      echo "${ARRAY1[${i}]} | ${ARRAY2[${i}]}"

      I hope this help.

  • Nitish Anand Mar 27, 2008 @ 12:07

    Hi chakjoy,

    Did u manage to resolve your problem? Try the folling link if thats what you meant:-


    cd /var/log && ls -al
    this switches to the /var/log directory if the directory change was sucessfuly it will then list the contents of that directory.

    You can also list the contents of a directory without leaving your current location..

    ls -al /var/log
    Would list the contents of /var/log no matter your current location in the directory tree.

    You can also use | to send the output of one command to the input of another..

    mount | column -t
    Show mount points in a column format

    ls -al | grep *.jpg
    List the contents of a directory buit only show files ending in .jpg

    ps aux | grep X11
    List processes but only show processes containing X11 > and list.txt
    Will list the contents of the /var/log directory and save it in the file list.txt

    hope this helps


    You can chain copmmands together using &&

    cd /var/log && ls -al
    this swithces to the /var/log directory if the directory change was sucessfuly it will then list the contents o fhte directory.

    just to add to that, you can likewise chain commands together with the || operator (OR operator, not to be confused with a pipe | )

    $ cd /mnt || cd /varthis would attempt to change to the /mnt directory. If it could not it would then switch to the /var directory. If the cd /mnt command was successfull then it would stop. Similarly,

    $ cd /blah || cd /homeit’s probably safe to say there is no /blah directory on your computer so typing this command would attempt to change to a non-existant directory, fail, and consequently change to /home
    have fun!

  • Jaime Jun 10, 2008 @ 6:21

    There is so much to learn when you get inside of linux, for example, VI is not the easier text editor but it rocks xD

  • jakemanse Jun 16, 2009 @ 7:25

    That’s good I am new Linuxer , now I am studying it .

  • Mithat Perkoz Sep 3, 2009 @ 14:16

    Thx a lot guys.
    I am also a newbie to Linux and it helps a lot!

  • pratheesh Nov 10, 2009 @ 12:36

    how to chkdsk in linux cmd mode

  • pratheesh Nov 10, 2009 @ 12:39

    how to check in all disk drive in linux command mode

  • pratheesh Nov 10, 2009 @ 12:41

    how to install other software in linux command mode

  • srividya Jul 1, 2010 @ 4:56

    please i am not able to understand to do program with echo command. please tell mr steps from starting….

  • srividya Jul 1, 2010 @ 4:58

    how to save lines in a file? how to execute ?

  • srividya Jul 1, 2010 @ 5:00

    how to save lines in a file at unix? how to execute?

  • Vidar 75 Aug 1, 2010 @ 20:25

    Just $ > filename will do the same, manily creating a empty file named “filename”

    Go ahead type “> test” and see for your self

  • Suresh Aug 11, 2010 @ 16:40

    What is the main difference between touch & vi commnd?

  • vr4sk Dec 7, 2010 @ 9:58

    Could someone help me understand what this means?

    Save the information that you have read from the keyboard into a file

  • superking Feb 23, 2011 @ 8:37

    good job !!!

  • vijay Mar 21, 2011 @ 6:33

    how to search the empty file in linux …
    For that which command use ???
    please tell me …. help me …..

  • Ryan Jul 26, 2011 @ 18:39

    Perhaps a subliminal mistake, looks like you used ‘cat foot.txt’ instead of ‘cat foo.txt’ in your example.

  • siddharth Dec 5, 2011 @ 16:54

    hi guyz,

    mu /dev/hdc had 2.7 G and its now 100%. Need to clear it.

    Please help.

  • Phearret Jun 10, 2012 @ 0:41

    I am trying to maintain a list of “ROMS” be it NDS, or MAME, no matter.
    Instead of accessing each page on a website, is it possible to use cat to look for say; title” … ” within .aspx on the website and copy it to local txt file ? I have been using ..
    cat wordlist/* | tr -cs A-Za-z ’12’ | tr A-Z a-z | sort | uniq > wordlist/masterlist.txt to merge numerous txt files into one, have them sort, and no repeats. something like this to be able to input the website start & end page and where to save the roms list.. there doesn’t really seem to be any 1 site that has a complete & accurate list. I an not trying to circumvent anything to get to the roms, I merely wish to be able to goto a webpage, enter in the variables, run a script to gather the list from the site, then after I have done this to a few sites run the above quoted, to merge the different sites into 1 ( hopefully ) accurate list so I know the names & numbers of the roms for each list.

  • LAsitha Jun 14, 2012 @ 16:10

    Nice job.. thanxxx… :D

  • tot Jul 4, 2012 @ 12:22

    hey guys, how can I concatenate an echo command & DATE to only one line ..

    echo “The date is: ” && date >> file.txt

    but this command will display text “The date is: ” and insert the date into the file.txt

    the output I want is

    “The date is 07-12-12.”

    to the file.txt

    help pls..

    • shivdas Dec 19, 2013 @ 6:32

      echo `echo The date is: && date` >> file.txt

  • Dipti Das Jul 27, 2012 @ 12:11

    Very helpful steps for a fresher in C/C++

  • riten Jan 8, 2013 @ 11:11

    pls send me how to create log file(tape wirrten is normal file, normal file format only not tar file format)

  • masoud Jan 26, 2013 @ 18:46

    i want create “” file in this dir:
    plz help me…

  • Salem Jan 27, 2013 @ 21:18

    How do you edit the file you created ?

    • 🐧 nixCraft Oct 6, 2013 @ 8:45

      Use a text editor such as vi/emacs/joe and more.

  • Ray Sep 19, 2013 @ 20:11

    Great, but I found a typo:

    To display file contents, type
    $ cat foot.txt

    It should be foo.txt not foot.txt.

  • Sabit Mubarik Mar 5, 2015 @ 13:12

    I am doing with my BS Computer Science, I am provided with a project to make a

    A_primitive linux shell using terminal of Ubuntu or GNU (GCC) compiler and in it i have to set up a shell environment to use the following commands
    1 cd
    2 ls
    3 pwd
    4 pop
    5 push

    B_ using any technique within this file system to make a single file password protected.

    Noted: Can’t use ‘system’ or ‘exe’ command but can use libC and its assorted libraries also can use dirent.h,ctype.h.
    please please please help me with this having said that i have to submit it on monday 9th March,2015

  • M.kabir rahimi May 4, 2015 @ 15:30

    how we can create html file automatically in linux

  • Ngeshlew Oct 28, 2015 @ 14:50

    Hi Vivek,

    Thank you for the post. It keeps me coming back because it is easy and very direct.

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Still have questions? Post it on our forum