Why RXD text are uncomplete in atmega328 intrupt driven USART?
This is more a how to program in C than an electronics question, even if programming happens on an AVR.
Sizeof returns size of the array, it does not know the contents of it, so full array is copied from source to destination. If you want to know the length of the string, use strlen (but as it works with null-terminated strings, you have to null terminate the string yourself, by adding the extra null character), or even better, since you already keep count of received char index, it also is the count of chars received, so store that into command_ready variable to know how much is received.
The other problem is, that if there is a transmission that continues directly after the '\n' character, it overwrites the first letter of just received command. That's why a ring buffer should be used, or dual buffer, or stop reception until command executed, to guarantee that an extra byte does not overwrite first character.
One further problem is the line memset(data_in[0], 0, 8); which most likely is not what you want. It does not clear the data_in array. It takes the first character data from data_in[0], and then uses that data as an address from where to write eight zeroes. Compiler should warn about using an integer as pointer without a cast, as now you are basically zeroing random memory addresses based on what data was received.
So basically, the tutorial has issues and should be taken as a tutorial, not as a working example.